第1章 Ansible概述 Ansible是一個配置管理系統configuration management system python 語言是運維人員必須會的語言 ansible 是一個基於python 開發的自動化運維工具 其功能實現基於ssh遠程連接服務 ansible 可以實現批量系統配置, ...
第1章 Ansible概述
Ansible是一個配置管理系統configuration management system
python 語言是運維人員必須會的語言
ansible 是一個基於python 開發的自動化運維工具
其功能實現基於ssh遠程連接服務
ansible 可以實現批量系統配置,批量軟體部署,批量文件拷貝,批量運行命令等功能
除了ansible之外,還有saltstack 等批量管理軟體
1.1 Ansible能做什麼
ansible可以幫助我們完成一些批量任務,或者完成一些需要經常重覆的工作。
比如:同時在100台伺服器上安裝nginx服務,併在安裝後啟動服務。
比如:將某個文件一次性拷貝到100台伺服器上。
比如:每當有新伺服器加入工作環境時,你都要為新伺服器部署某個服務,也就是說你需要經常重覆的完成相同的工作。
這些場景中我們都可以使用到ansible。
1.2 Ansible軟體特點
1.ansible不需要單獨安裝客戶端,SSH相當於ansible客戶端。
2.ansible不需要啟動任何服務,僅需安裝對應工具即可。
3.ansible依賴大量的python模塊來實現批量管理。
4.ansible配置文件/etc/ansible/ansible.cfg
1.3 Ansible基礎架構
1.連接插件(connectior plugins) 用於連接主機
用來連接被管理端
2.核心模塊(core modules) 連接主機實現操作, 它依賴於具體的模塊來做具體的事情
3.自定義模塊(custom modules) 根據自己的需求編寫具體的模塊
4.插件(plugins) 完成模塊功能的補充
5.劇本(playbooks)ansible的配置文件,將多個任務定義在劇本中,由ansible自動執行
6.主機清單(host inventory)定義ansible需要操作主機的範圍
最重要的一點是 ansible是模塊化的 它所有的操作都依賴於模塊
不需要單獨安裝客戶端(no agents),基於系統自帶的sshd服務,sshd就相當於ansible的客戶端
不需要服務端(no sever)
需要依靠大量的模塊實現批量管理
配置文件 /etc/ansible/ansible.cfg (前期不用配置)
1.4 ansible中查看模塊
[root@m01 ~]# ansible-doc -l 列出所有模塊信息 [root@m01 ~]# ansible-doc -s cron 參看指定模塊的幫助
第2章 Ansible部署與使用
2.1 ansible命令語法格式
[root@m01 ~]# ansible oldboy -m command -a "hostname" 10.0.0.31 | SUCCESS | rc=0 >> backup 10.0.0.41 | SUCCESS | rc=0 >> nfs01
2.2 Ansible清單管理
inventory文件通常用於定義要管理主機的認證信息, 例如ssh登錄用戶名、密碼以及key相關信息。如何配置Inventory文件
主機
1.支持主機名通配以及正則表達式,例如web[1:3].oldboy.com
2.支持基於非標準的ssh埠,例如web1.oldboy.com:6666
3.支持指定變數,可對個別主機的特殊配置,如登陸用戶,密碼等
主機組
1.支持嵌套組,例如[game:children],那麼在game模塊下麵的組都會被game所包含
2.支持指定變數,例如[game:vars]在下麵指定變數
以下操作都是在/etc/ansible/hosts 完成的
添加三台主機至webserver [webservers] web1.oldboy.com web2.oldboy.com web3.oldboy.com 添加三台主機至webserver[low改良版] [webservers] web[1:3].oldboy.com 添加三台主機至webserver[密碼版] [webservers] web1.oldboy.com ansible_ssh_pass='123456' web2.oldboy.com ansible_ssh_pass='123456' web3.oldboy.com ansible_ssh_pass='123456' 添加三台主機至webserver[密碼改良版] [webservers] web[1:3].oldboy.com ansible_ssh_pass='123456' 添加三台主機至webserver[密碼拆分版] [webservers] web1.oldboy.com web2.oldboy.com web3.oldboy.com [webservers:vars] ansible_ssh_pass='123456' 定義多組,多組彙總整合 [apache] web1.oldboy.com web2.oldboy.com web3.oldboy.com [apache:vars] ansible_ssh_pass='123456' [nginx] 10.0.0.7 10.0.0.31 10.0.0.41 10.0.0.61 [nginx:vars] ansible_ssh_pass='123456' webservers組包括兩個子組[apapche,nginx] [webservers:children] apache nginx ansible nginx --list-hosts ansible apache --list-hosts ansible websers --list-hosts
2.3 Ansible安裝配置
實現從管理機m01到其他機器的密鑰認證
說明:
ansible其功能實現基於SSH遠程連接服務
使用ansible需要首先實現ssh密鑰連接
ansible藉助公鑰批量管理
ssh服務分發公鑰實質執行過程
①. 管理伺服器創建私鑰和公鑰(密鑰對) ②. 將公鑰文件遠程傳送複製到被管理伺服器相應用戶~/.ssh/id_dsa.pub下,並修改.ssh目錄許可權為700 ③. 修改公鑰文件文件名稱為authorized_keys,授權許可權為600 ④. 利用ssh服務配置文件的配置參數,進行識別公鑰文件authorized_keys ⑤. 進而實現基於密鑰遠程登錄伺服器(免密碼登錄/非交互方式登錄)
-P指定密碼 -f指定存放的位置 [root@m01 ~]# ssh-keygen -t rsa 一直回車直到結束即可 Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): #私鑰創建後保存的路徑 Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): #私鑰需不需進行加密,設置密碼 Enter same passphrase again: #私鑰需不需進行加密,再次輸入密碼確認 ssh-keygen -P "" -f ~/.ssh/id_rsa 非互動式創建密碼 [root@m01 ~]# ll .ssh/ total 8 -rw------- 1 root root 1679 Sep 11 03:15 id_rsa #創建出來的私鑰 -rw-r--r-- 1 root root 390 Sep 11 03:15 id_rsa.pub #創建出來的公鑰 #利用非交換式工具實現批量分發公鑰與批量管理伺服器 [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] -i 指定要分發的公鑰文件以及路徑信息 [user@] 以什麼用戶身份進行分發 machine 將公鑰分發到哪台主機上,遠程主機IP地址
2.3.1 安裝ansible
[root@m01 ~]# yum install ansible -y 檢查ansible版本 [root@m01 ~]# ansible --version ansible 2.6.1
2.3.2 配置ansible
軟體安裝完成,進行修改ansible下的hosts文件,註意文件的路徑
[root@m01 ~]# vim /etc/ansible/hosts [oldboy] 172.16.1.31 172.16.1.41
【】中的名字代表組名
主機(hosts)部分可以使用功能變數名稱、主機名、IP地址表示;一般此類配置中多使用IP地址;
組名下的主機地址就是ansible可以管理的地址
至此ansible 服務就部署完成
2.3.3 驗證ansible
ansible是通過ssh埠探測通信
[root@m01 ~]# ansible oldboy -m ping 10.0.0.30 | SUCCESS => { "changed": false, "ping": "pong" } 10.0.0.40 | SUCCESS => { "changed": false, "ping": "pong" }
2.4 /etc/ansible下的文件
[root@m01 ansible]# ll total 28 -rw-r--r-- 1 root root 18066 Sep 6 06:38 ansible.cfg #ansible配置文件 -rw-r--r-- 1 root root 1016 Sep 6 06:38 hosts #定義ansible可以管理的主機信息 drwxr-xr-x 2 root root 4096 Sep 6 06:38 roles #主要在自動化的時候部署多台主機時使用
2.5 Ansible內置變數
2.6 Ansible常用模塊
在ansible中是指需要快速執行一條命令, 並且不需要保存的命令,對於複雜的命令則為playbook
Ansible註意事項->提示顏色信息說明
黃色:對遠程節點進行相應修改
綠色:對遠程節點不進行相應修改,或者只是對遠程節點信息進行查看
紅色:操作執行命令有異常
紫色:表示對命令執行發出警告信息(可能存在的問題,給你一下建議)
2.6.1 command與shell
command模塊 預設模塊, 執行命令 [root@m01 ~]# ansible oldboy -a "hostname" shell模塊 如果需要一些管道操作,則使用shell [root@m01 ~]# ansible oldboy -m shell -a "ifconfig|grep eth0" -f 50 # -f =forks /etc/ansible/ansible.cfg #結果返回的數量
2.6.2 yum安裝模塊
推送腳本文件至遠程,遠程執行腳本文件
[root@m01 ~]# ansible oldboy -m yum -a "name=httpd state=installed" name ---指定要安裝的軟體包名稱 state ---指定使用yum的方法 installed,present ---安裝軟體包 removed,absent ---移除軟體包 latest ---安裝最新軟體包
2.6.3 copy模塊
推送文件模塊
[root@m01 ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/test.txt"
在推送覆蓋遠程端文件前,對遠端已有文件進行備份,按照時間信息備份
[root@m01 ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup=yes"
直接向遠端文件內寫入數據信息,並且會覆蓋遠端文件內原有數據信息
[root@m01 ~]# ansible oldboy -m copy -a "content='bgx' dest=/tmp/oldboy"
src --- 推送數據的源文件信息
dest --- 推送數據的目標路徑
backup --- 對推送傳輸過去的文件,進行備份
content --- 直接批量在被管理端文件中添加內容
group --- 將本地文件推送到遠端,指定文件屬組信息
owner --- 將本地文件推送到遠端,指定文件屬主信息
mode --- 將本地文件推送到遠端,指定文件許可權信息
2.6.4 service服務模塊
[root@m01 ~]# ansible oldboy -m service -a "name=crond state=stopped enabled=yes"
name --- 定義要啟動服務的名稱
state --- 指定服務狀態是停止或是運行,停止和運行指令要寫成過去時
started --- 啟動
stopped --- 停止
restarted --- 重啟
reloaded --- 重載
enabled --- 是否讓服務開啟自啟動
2.6.5 script模塊
編寫腳本
[root@m01 ~]# mkdir -p /server/scripts [root@m01 ~]# cat /server/scripts/yum.sh #!/usr/bin/bash yum install -y iftop
在本地運行模塊,等同於在遠程執行,不需要將腳本文件進行推送目標主機執行
[root@m01 ~]# ansible oldboy -m script -a "/server/scripts/yum.sh"
2.6.6 file配置模塊
[root@m01 ~]# ansible oldboy -m file -a "path=/tmp/oldboy state=diretory" [root@m01 ~]# ansible oldboy -m file -a "path=/tmp/tt state=touch mode=555 owner=root group=root" [root@m01 ~]# ansible oldboy -m file -a "src=/tmp/tt path=/tmp/tt_link state=link"
path --- 指定遠程主機目錄或文件信息
recurse --- 遞歸授權
state ---
directory --- 在遠端創建目錄
touch --- 在遠端創建文件
link --- link或hard表示創建鏈接文件
absent --- 表示刪除文件或目錄
mode --- 設置文件或目錄許可權
owner --- 設置文件或目錄屬主信息
group --- 設置文件或目錄屬組信息
2.6.7 group模塊
name --- 指定創建的組名
gid --- 指定組的gid
state
absent --- 移除遠端主機的組
present --- 創建遠端主機的組(預設)
創建組,指定gid
[root@m01 ~]# ansible oldboy -m group -a "name=oldgirl gid=888"
2.6.8 user模塊
[root@m01 ~]# echo "bgx"| openssl passwd -1 -stdin $1$1KmeCnsK$HGnBE86F/XkXufL.n6sEb. [root@m01 ~]# ansible oldboy -m user -a 'name=xlw password="$1$1KmeCnsK$HGnBE86F/XkXufL.n6sEb."' 創建oldgirl,設定uid為888,並加入gid為888 [root@m01 ~]# ansible oldboy -m user -a "name=oldgirl uid=888 group=888 shell=/sbin/nologin create_home=no" 隨機生成加密字元串(-1使用MD5進行加密 -stdin 非互動式 -salt 加密參數) [root@m01 ~]# echo "bgx" | openssl passwd -1 -stdin 固定加密字元串 [root@m01 ~]# echo "123"| openssl passwd -1 -stdin -salt 'salt 創建普通用戶,並配置對應的用戶密碼 [root@m01 ~]# echo "bgx" | openssl passwd -1 -stdin $1$1KmeCnsK$HGnBE86F/XkXufL.n6sEb. [root@m01 ~]# ansible oldboy -m user -a 'name=xlw password="$1$765yDGau$diDKPRoCIPMU6KEVEaPTZ0"'
uid --- 指定用戶的uid
group --- 指定用戶組名稱
groups --- 指定附加組名稱
password --- 給用戶添加密碼
shell --- 指定用戶登錄shell
create_home --- 是否創建家目錄
2.6.9 crond模塊
正常使用crond服務
[root@m01 ~]# crontab -l * * * * * /bin/sh /server/scripts/yum.sh
使用ansible添加一條定時任務
[root@m01 ~]# ansible oldboy -m cron -a "minute=* hour=* day=* month=* weekday=* job='/bin/sh /server/scripts/test.sh'" [root@m01 ~]# ansible oldboy -m cron -a "job='/bin/sh /server/scripts/test.sh'"
設置定時任務註釋信息,防止重覆,name設定
[root@m01 ~]# ansible oldboy -m cron -a "name='cron01' job='/bin/sh /server/scripts/test.sh'"
刪除相應定時任務
[root@m01 ~]# ansible oldboy -m cron -a "name='ansible cron02' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh' state=absent"
註釋相應定時任務,使定時任務失效
[root@m01 scripts]# ansible oldboy -m cron -a "name='ansible cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh' disabled=no"
minute 分 Minute when the job should run ( 0-59, *, */2, etc )
hour 時 Hour when the job should run ( 0-23, *, */2, etc )
day 日 Day of the month the job should run ( 1-31, *, */2, etc )
month 月 Month of the year the job should run ( 1-12, *, */2, etc )
weekday 周 Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )
job 工作 ;要做的事情
name 定義定時任務的描述信息
disabled 註釋定時任務
state
absent 刪除定時任務
present 創建定時任務(預設為present)
2.6.10 mount模塊
僅將掛載的配置寫入/etc/fstab,並不會執行掛載操作
[root@m01 ~]# ansible oldboy -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=present"
臨時掛載設備,並將掛載信息寫入/etc/fstab
[root@m01 ~]# ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mounted"
臨時卸載,不會清理/etc/fstab
[root@m01 ~]# ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=unmounted"
卸載,不僅臨時卸載,同時會清理/etc/fstab
[root@m01 ~]# ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=absent"
present ---開機掛載,僅將掛載配置寫入/etc/fstab(不常用)
mounted ---掛載設備,並將配置寫入/etc/fstab
unmounted ---卸載設備,不會清除/etc/fstab寫入的配置
absent ---卸載設備,會清理/etc/fstab寫入的配置
第3章 ansible-playbook
playbook是由一個或多個模塊組成的,使用多個不同的模塊,完成一件事情。
3.1 ansible軟體特點
可以實現批量管理
可以實現批量部署
ad-hoc(批量執行命令)---針對臨時性的操作 ansible clsn -m command -a "hostname" <- 批量執行命令舉例
編寫劇本-腳本(playbook)---針對重覆性的操作
3.2 ansible核心功能
pyYAML-----用於ansible編寫劇本所使用的語言格式(saltstack---python) rsync-ini語法 sersync-xml語法 ansible-pyYAML語法 paramiko---遠程連接與數據傳輸 Jinja2-----用於編寫ansible的模板信息
第4章 劇本編寫規則說明
4.1 YAML三板斧
縮進
YAML使用一個固定的縮進風格表示層級結構,每個縮進由兩個空格組成, 不能使用tabs
冒號
以冒號結尾的除外,其他所有冒號後面所有必須有空格。
短橫線
表示列表項,使用一個短橫杠加一個空格。
多個項使用同樣的縮進級別作為同一列表。
4.2 劇本書寫格式
- hosts: 172.16.1.7 處理指定伺服器 (空格)hosts:(空格)172.16.1.7
task: 劇本所要乾的事情; (空格)(空格)task:
- name: (兩個空格)-(空格)name:
command: echo hello clsn linux (四個空格)command:(空格)
劇本格式示例
[root@m01 ansible-playbook]# vim rsync.yaml - hosts: 172.16.1.41 tasks: - name: Install Rsync yum: name=rsync state=installed
4.3 劇本檢查方法
ansible-playbook --syntax-check 01.yml --- 進行劇本配置信息語法檢查 ansible-playbook -C 01.yml --- 模擬劇本執行(彩排)
4.3.1 語法檢查
ansible-playbook --syntax-check [root@m01 ansible-playbook]# ansible-playbook --syntax-check 01.yml playbook: 01.yml
4.3.2 模擬劇本執行
ansible-playbook -C [root@m01 ansible-playbook]# ansible-playbook -C 01.yml PLAY [all] **************************************************************** TASK [Gathering Facts] **************************************************** ok: [172.16.1.41] ok: [172.16.1.8] 此處省略……….. PLAY RECAP **************************************************************** 172.16.1.31 : ok=2 changed=0 unreachable=0 failed=0 172.16.1.41 : ok=2 changed=0 unreachable=0 failed=0 172.16.1.8 : ok=2 changed=0 unreachable=0 failed=0
4.4 劇本示例
劇本編寫內容擴展:劇本任務編寫多個任務
- hosts: all tasks: - name: restart-network cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' - name: sync time cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
劇本編寫內容擴展:劇本任務編寫多個主機
- hosts: 172.16.1.7 tasks: - name: restart-network cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' - name: sync time cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1" - hosts: 172.16.1.31 tasks: - name: show ip addr to file shell: echo $(hostname -i) >> /tmp/ip.txt
4.5 劇本編寫方式
多主機單任務編寫方式
多主機多任務編寫方式
不同主機多任務編寫方式
第5章 Ansible項目案例
5.1 環境規劃
全網備份
實時備份
角色 |
外網IP(NAT) |
內網IP(LAN) |
部署軟體 |
m01 |
eth0:10.0.0.61 |
eth1:172.16.1.61 |
ansible |
backup |
eth0:10.0.0.41 |
eth1:172.16.1.41 |
rsync |
nfs |
eth0:10.0.0.31 |
eth1:172.16.1.31 |
nfs、Sersync |
web01 |
eth0:10.0.0.7 |
eth1:172.16.1.7 |
httpd |
5.2 目錄規劃
[root@m01 ~]# mkdir /etc/ansible/ansible_playbook/{file,conf,scripts} -p [root@m01 ~]# tree /etc/ansible/ansible_playbook/ /etc/ansible/ansible_playbook/ ├── conf └── file └── scripts
5.3 需提前準備好的文件
5.3.1 rsync配置文件
準備對應的配置文件存放至/etc/ansible/ansible_playbook/conf/
[root@m01 conf]# cat /etc/ansible/ansible_playbook/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 = /dataView Code
5.3.2 nfs配置文件
準備nfs配置文件exports
[root@m01 ansible_playbook]# cat /etc/ansible/ansible_playbook/conf/nfs_exports /data/ 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)View Code
5.3.3 Sersync軟體包
下載Sersync軟體包
[root@m01 ansible_playbook]# ll /etc/ansible/ansible_playbook/file/ -rw-r--r-- 1 root root 727290 Aug 1 12:04 sersync.tar.gzView Code
5.3.4 sersync配置文件
準備sersync實時同步的配置文件
[root@m01 ansible_playbook]# cat /etc/ansible/ansible_playbook/conf/confxml.xml.nfs <?xml version="1.0" encoding="ISO-8859-1"?> <head version="2.5"> <host hostip="localhost" port="8008"></host> <debug start="false"/> <fileSystem xfs="true"/> <filter start="false"> <exclude expression="(.*)\.svn"></exclude> <exclude expression="(.*)\.gz"></exclude> <exclude expression="^info/*"></exclude> <exclude expression="^static/*"></exclude> </filter> <inotify> <delete start="true"/> <createFolder start="true"/> <createFile start="true"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="false"/> <modify start="false"/> </inotify> <sersync> <localpath watch="/data"> <remote ip="172.16.1.41" name="data"/> </localpath> <rsync> <commonParams params="-az"/> <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/> <userDefinedPort start="false" port="874"/><!-- port=874 --> <timeout start="true" time="100"/><!-- timeout=100 --> <ssh start="false"/> </rsync> <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> <crontab start="false" schedule="600"><!--600mins--> <crontabfilter start="false"> <exclude expression="*.php"></exclude> <exclude expression="info/*"></exclude> </crontabfilter> </crontab> <plugin start="false" name="command"/> </sersync> <plugin name="command"> <param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix--> <filter start="false"> <include expression="(.*)\.php"/> <include expression="(.*)\.sh"/> </filter> </plugin> <plugin name="socket"> <localpath watch="/opt/tongbu"> <deshost ip="192.168.138.20" port="8009"/> </localpath> </plugin> <plugin name="refreshCDN"> <localpath watch="/data0/htdocs/cms.xoyo.com/site/"> <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/> <sendurl base="http://pic.xoyo.com/cms"/> <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/> </localpath> </plugin> </head>View Code
5.4 基礎環境部署
基礎環境:所有機器統一的配置
1.需要關閉firewalld以及selinux、epel倉庫、ssh埠、優化基礎配置
2.需要安裝rsync和nfs-utils
3.準備www用戶
4.需要準備/etc/rsync.pass密碼文件
5.需要準備全網備份腳本
基礎的playbook劇本 [root@m01 ansible_playbook]# cat base.yaml - hosts: all tasks: - name: Install Epel Repos get_url: url=http://mirrors.aliyun.com/repo/epel-7.repo dest=/etc/yum.repos.d/epel.repo - name: Install Rsync Nfs-Utils yum: name=rsync,nfs-utils state=installed - name: Create Group WWW group: name=www gid=666 - name: Create User WWW user: name=www uid=666 group=666 create_home=no shell=/sbin/nologin - name: Create Rsync_Client_Pass copy: content='1' dest=/etc/rsync.pass mode=600 - name: Create Scripts Directory file: path=/server/scripts recurse=yes state=directory - name: Push File Scripts copy: src=./scripts/rsync_backup_md5.sh dest=/server/scripts/ - name: Crontable Scripts cron: name="backup scripts" hour=01 minute=00 job="/bin/bash /server/scripts/rsync_backup_md5.sh &>/dev/null"View Code
5.5 應用環境:Rsync
1.安裝rsync
2.配置rsync(配置變更,一定要進行重載操作)
3.創建虛擬用戶,許可權調整
4.創建目錄/data/ /backup
5.啟動rsync
6.配置郵箱->郵箱的發件人->校驗的腳本
[root@m01 ansible_playbook]# cat rsync.yaml - hosts: backup tasks: - name: Installed Rsync Server yum: name=rsync,mailx state=installed - name: configure Rsync Server copy: src=./conf/rsyncd.conf dest=/etc/rsyncd.conf notify: Restart Rsync Server - name: Create Virt User copy: content='rsync_backup:1' dest=/etc/rsync.password mode=600 - name: Create Data file: path=/data state=directory recurse=yes owner=www group=www mode=755 - name: Create Backup file: path=/backup state=directory recurse=yes owner=www group=www mode=755 - name: Start RsyncServer service: name=rsyncd state=started enabled=yes - name: Push Check Scripts copy: src=./scripts/rsync_check_backup.sh dest=/server/scripts/ - name: Crond Check Scripts cron: name="check scripts" hour=05 minute=00 job="/bin/bash /server/scripts/rsync_check_backup.sh &>/dev/null"View Code
5.6 應用環境:NFS
1.安裝nfs-utils
2.配置nfs (當修改了配置,觸發重載操作)
3.創建目錄,授權
4.啟動
[root@m01 ansible_playbook]# cat nfs.yaml - hosts: nfs tasks: - name: Installed Nfs Server yum: name=nfs-utils state=installed - name: Configure Nfs Server copy: src=./conf/exports dest=/etc/exports notify: Restart Nfs Server - name: Create Share Data file: path=/data state=directory recurse=yes owner=www group=www mode=755 - name: Start Nfs Server service: name=nfs-server state=started enabled=yes handlers: - name: Restart Nfs Server service: name=nfs-server state=restartedView Code
5.7 應用環境:Sersync
1.下載sersync
2.解壓,改名,配置
3.啟動
[root@m01 ansible_playbook]# cat sersync.yaml - hosts: nfs tasks: - name: Scp Sersync copy: src=./file/sersync2.5.4_64bit_binary_stable_final.tar.gz dest=/usr/local/sersync.tar.gz - name: Zip shell: cd /usr/local && tar xf sersync.tar.gz && mv GNU-Linux-x86 sersync args: creates: /usr/local/sersync - name: configure Sersync copy: src=./conf/confxml.xml dest=/usr/local/sersync/ - name: Start Sersync shell: /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xmlView Code
5.8 應用環境:WEB
掛載nfs共用的目錄
[root@m01 ansible_playbook]# cat web.yaml - hosts: web tasks: - name: Mount NFS Server Share Data mount: src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mountedView Code
5.9 包含include
[root@m01 ansible_playbook]# cat mail.yaml - import_playbook: base.yaml - import_playbook: rsync.yaml - import_playbook: nfs.yaml - import_playbook: sersync.yaml - import_playbook: web.yamlView Code
5.10 操作後測試步驟
快照還原
推送公鑰
使用ping模塊測試
執行ansible-playbook測試
測試全網備份,測試是否能發郵件,並校驗結果
測試nfs的掛載
測試實時同步