第1章 Ansible基本概述 1.1 ansible是一個配置管理系統configuration management system, 你只需要可以使用ssh訪問你的伺服器或設備就行。 1.安裝軟體 2.配置服務 1.2 ansible能做什麼 ansible可以幫助我們完成一些批量任務,或者完成 ...
第1章 Ansible基本概述
1.1 ansible是一個配置管理系統configuration management system,
你只需要可以使用ssh訪問你的伺服器或設備就行。
1.安裝軟體
2.配置服務
1.2 ansible能做什麼
ansible可以幫助我們完成一些批量任務,或者完成一些需要經常重覆的工作。
比如:同時在100台伺服器上安裝nfs服務,併在安裝後啟動服務。
比如:將某個文件一次性拷貝到100台伺服器上。
比如:每當有新伺服器加入工作環境時,你都要為新伺服器部署某個服務,也就是說你需要經常重覆的完成相同的工作。
這些場景中我們都可以使用到ansible。
1.3 ansible軟體特點
1.ansible不需要單獨安裝客戶端,SSH相當於ansible客戶端。
2.ansible不需要啟動任何服務,僅需安裝對應工具即可。
3.ansible依賴大量的python模塊來實現批量管理。
4.ansible配置文件/etc/ansible/ansible.cfg
實現從管理機m01到其他機器的密鑰認證
第2章 Ansible安裝配置
2.1 ansible藉助公鑰批量管理
創建及利用非交換式工具實現批量分發公鑰與批量管理伺服器
[root@m01 ~]# ssh-keygen -t rsa [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
2.2 安裝ansible
[root@m01 ~]# yum install ansible -y
2.3 配置ansible
[root@m01 ~]# vim /etc/ansible/hosts [zeq] 172.16.1.31 172.16.1.41
2.4 驗證ansible
2.4.1 ansible是通過ssh埠探測通信
[root@m01 ~]# ansible zeq -m ping 172.16.1.7 | SUCCESS => { "changed": false, "ping": "pong" } 172.16.1.31 | SUCCESS => { "changed": false, "ping": "pong" } 172.16.1.41 | SUCCESS => { "changed": false, "ping": "pong" }
2.4.2 批量執行命令
[root@m01 ~]# ansible zeq -m command -a "df -h"
2.4.3 如果沒有給對應的主機下發公鑰,可以使用密碼的方式進行添加
172.16.1.41 ansible_ssh_user='root' ansible_ssh_pass='1' ansible_ssh_port='22'
2.5 定義主機清單
[root@m01 ~]# vim /etc/ansible/hosts [web] 172.16.1.7 [nfs] 172.16.1.31 [backup] 172.16.1.41 [zeq:children] web nfs backup
2.5.1 測試
[root@m01 ~]# ansible web --list-hosts #web hosts (1): 172.16.1.7 [root@m01 ~]# ansible nfs --list-hosts #nfs hosts (1): 172.16.1.31 [root@m01 ~]# ansible backup --list-hosts #rsync hosts (1): 172.16.1.41 [root@m01 ~]# ansible zeq --list-hosts #集中所有的小組,用於執行一些基礎的配置 hosts (3): 172.16.1.31 172.16.1.41 172.16.1.7
第3章 ansible命令語法格式及模塊
1.command 執行命令
2.shell 執行命令
3.yum 安裝軟體模塊
4.copy 配置模塊
5.service 啟動服務模塊
6.user 用戶管理
7.file 創建目錄,創建文件,往文件寫內容
8.cron 定時任務
9.mount 掛載
3.1 command命令模塊
預設模塊, 執行命令
[root@m01 ~]# ansible zeq -a "hostname"
3.2 如果需要一些管道操作,則使用shell
[root@m01 ~]# ansible zeq -m shell -a "ifconfig|grep eth0" -f 50
-f =forks /etc/ansible/ansible.cfg #結果返回的數量
3.3 yum安裝模塊
|
|
|
|
|
|
|
|
|
|
|
|
3.3.1 推送腳本文件至遠程,遠程執行腳本文件
[root@m01 ~]# ansible zeq -m yum -a "name=httpd state=installed"
3.4 copy模塊
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.4.1 推送文件模塊
[root@m01 ~]# ansible zeq -m copy -a "src=/etc/hosts dest=/tmp/test.txt owner=www group=www mode=0600"
3.4.2 在推送覆蓋遠程端文件前,對遠端已有文件進行備份,按照時間信息備份
[root@m01 ~]# ansible zeq -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup=yes"
3.4.3 直接向遠端文件內寫入數據信息,並且會覆蓋遠端文件內原有數據信息
[root@m01 ~]# ansible zeq -m copy -a "content='bgx' dest=/tmp/zeq"
3.5 service服務模塊
參數 |
說明 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[root@m01 ~]# ansible zeq -m service -a "name=crond state=stopped enabled=yes"
3.6 user模塊
[root@m01 ~]# echo "bgx"| openssl passwd -1 -stdin $1$1KmeCnsK$HGnBE86F/XkXufL.n6sEb.
[root@m01 ~]# ansible zeq -m user -a 'name=xlw password="$1$1KmeCnsK$HGnBE86F/XkXufL.n6sEb."'
3.7 file配置模塊
參數 |
說明 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[root@m01 ~]# ansible zeq -m file -a "path=/tmp/zeq state=diretory" [root@m01 ~]# ansible zeq -m file -a "path=/tmp/tt state=touch mode=555 owner=root group=root" [root@m01 ~]# ansible zeq -m file -a "src=/tmp/tt path=/tmp/tt_link state=link"
3.8 crond模塊
正常使用
crond
服務
[root@m01 ~]# crontab -l * * * * * /bin/sh /server/scripts/yum.sh
使用
ansible
添加一條定時任務
[root@m01 ~]# ansible zeq -m cron -a "minute=* hour=* day=* month=* weekday=* job='/bin/sh /server/scripts/test.sh'" [root@m01 ~]# ansible zeq -m cron -a "job='/bin/sh /server/scripts/test.sh'"
設置定時任務註釋信息,防止重覆,
name
設定
[root@m01 ~]# ansible zeq -m cron -a "name='cron01' job='/bin/sh /server/scripts/test.sh'"
刪除相應定時任務
[root@m01 ~]# ansible zeq -m cron -a "name='ansible cron02' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh' state=absent"
註釋相應定時任務,使定時任務失效
[root@m01 scripts]# ansible zeq -m cron -a "name='ansible cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh' disabled=no"
3.9 mount模塊
參數 |
說明 |
|
|
|
|
|
|
|
指定掛載文件類型 |
opts |
設定掛載的參數選項信息 |
path |
指定掛載點 |
[root@m01 ~]# ansible zeq -m mount -a "path=/backup src=10.0.0.31:/data fstype=nfs opts=defautls,noatime state=mounted"
3.10 ansible查看幫助方法
ansible-doc -l --- 查看所有模塊說明信息 ansible-doc copy --- 表示指定查看某個模塊參數用法信息
第4章 ansible實戰應用
4.1 推送你的公鑰(免密登錄)
[root@m01 ~]# sshpass -p1 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
4.2 配置Ansible的主機清單
[root@m01 ~]# cat /etc/ansible/hosts [web] 172.16.1.7 172.16.1.8 [nfs] 172.16.1.31 [backup] 172.16.1.41
4.3 檢查主機是否都ok
[root@m01 ~]# ansible all -m ping epel、firewalld、selinux、ww
4.4 基礎環境:
1.所有的主機都需要安裝rsync和nfs-utils
2.所有的主機都需要準備對應的rsync客戶端的密碼文件/etc/rsync.pass
3.所有的主機都需要創建一個uid和gid為666的www用戶
4.所有的主機都需要全網備份的腳本,並配置好定時任務
4.4.1 安裝rsync和nfs-utils
[root@m01 ~]# ansible all -m yum -a "name=rsync,nfs-utils state=installed"
4.4.2 準備rsync的客戶端密碼文件
[root@m01 ~]# ansible all -m copy -a "content='1' dest=/etc/rsync.pass owner=root group=root mode=600"
4.4.3 準備對應的www用戶,uid和gid都為666
[root@m01 ~]# ansible all -m group -a "name=www gid=666" [root@m01 ~]# ansible all -m user -a "name=www uid=666 group=666 create_home=no shell=/sbin/nologin"
4.4.4 從管理上拷貝對應的腳本文件,然後將其加入定時任務
[root@m01 ~]# ansible all -m copy -a "src=./scripts/rsync_backup_md5.sh dest=/server/scripts/ mode=755" [root@m01 ~]# ansible all -m cron -a "name='Rsync Bakcup Scripts' hour=01 minute=00 job='/bin/bash /server/scripts/rsync_backup_md5.sh &>/dev/null'" [root@m01 ~]# pwd /root [root@m01 ~]# mkdir scripts [root@m01 ~]# cat scripts/rsync_backup_md5.sh #!/usr/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
4.4.5
腳本編寫
1.定義變數
Host=$(hostname) Addr=$(ifconfig eth1|awk 'NR==2{print $2}') Date=$(date +%F) Dest=${Host}_${Addr}_${Date} Path=/backup
2.創建備份目錄
[ -d $Path/$Dest ] || mkdir -p $Path/$Dest
3.備份對應的文件
cd / && \ [ -f $Path/$Dest/system.tar.gz ] || tar czf $Path/$Dest/system.tar.gz etc/fstab etc/rsyncd.conf && \ [ -f $Path/$Dest/log.tar.gz ] || tar czf $Path/$Dest/log.tar.gz var/log/messages var/log/secure && \
4.攜帶md5驗證信息
[ -f $Path/$Dest/${Date}.flag ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/${Date}.flag
5.推送本地數據至備份伺服器
export RSYNC_PASSWORD=1 rsync -avz $Path/ [email protected]::backup
6.本地保留最近7天的數據
find $Path/ -type d -mtime +7|xargs rm -rf
4.5 應用環境:(配置rsync服務->Backup伺服器)
1.安裝rsync
2.配置rsync,/etc/rsyncd.conf
3.創建目錄,創建虛擬用戶文件,變更許可權
4.啟動服務,加入開機自啟動
5.配置郵箱,準備對應的腳本
4.5.1 安裝rsync
[root@m01 ~]# ansible backup -m yum -a "name=rsync state=installed"
4.5.2 配置rsync,/etc/rsyncd.conf
[root@m01 ~]# ansible backup -m copy -a "src=./conf/rsyncd.conf dest=/etc/rsyncd.conf" [root@m01 ~]# pwd /root [root@m01 ~]# mkdir conf [root@m01 ~]# cat conf/rsyncd.conf uid = www gid = www port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 ignore errors read only = false list = false auth users = rsync_backup secrets file = /etc/rsync.password log file = /var/log/rsyncd.log ##################################### [backup] path = /backup [data] path = /data
4.5.3 創建目錄,變更許可權,創建虛擬用戶文件
[root@m01 ~]# ansible backup -m file -a "path=/backup state=directory mode=755 owner=www group=www" [root@m01 ~]# ansible backup -m file -a "path=/data state=directory mode=755 owner=www group=www" [root@m01 ~]# ansible backup -m copy -a "content='rsync_backup:1' dest=/etc/rsync.password mode=600 owner=root group=root"
4.5.4 啟動服務,加入開機自啟動
[root@m01 ~]# ansible backup -m service -a "name=rsyncd state=started enabled=yes"
4.5.5 配置郵箱
配置郵箱(配發件伺服器)
yum install mailx -y set from=[email protected] 填寫自己郵箱 set smtp=smtps://smtp.qq.com:465 set smtp-auth-user=[email protected] 填寫自己郵箱 set smtp-auth-password=#填寫客戶端授權碼 set smtp-auth=login set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb/
4.5.6 準備對應的腳本
1.定義全局的變數
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
2.定義局部變數
Path=/backup
Date=$(date +%F)
3.查看flag文件,並對該文件進行校驗, 然後將校驗的結果保存至result_時間
find $Path/*_${Date} -type f -name "flag"|xargs md5sum -c >$Path/result_${Date}
4.將校驗的結果發送郵件給管理員
mail -s "Rsync Backup $Date" [email protected] <$Path/result_${Date}
5.刪除超過7天的校驗結果文件, 刪除超過180天的備份數據文件
find $Path/ -type f -name "result*" -mtime +7|xargs rm -f find $Path/ -type d -mtime +180|xargs rm -rf
4.6 應用環境:(配置nfs服務)
1.安裝nfs-utils
2.配置nfs-utils
3.創建對應的共用目錄,並修改許可權
4.啟動nfs
4.6.1 安裝nfs-utils
[root@m01 ~]# ansible nfs -m yum -a "name=nfs-utils state=installed"
4.6.2 配置nfs-utils
[root@m01 ~]# ansible nfs -m copy -a "content='/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)' dest=/etc/exports"
4.6.3 創建對應的共用目錄,並遞歸修改許可權
[root@m01 ~]# ansible nfs -m file -a "path=/data state=directory recurse=yes owner=www group=www mode=755"
4.6.4 啟動nfs
[root@m01 ~]# ansible nfs -m service -a "name=nfs-server state=started enabled=yes"
4.7 應用環境:(配置web服務,掛載操作)
[root@m01 ~]# ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mounted"
4.8 驗證:
1.驗證nfs存儲是否可以用
2.驗證rsync是否能完成推送
3.backup伺服器進行校驗