天天看點

Day 47 Ansible-playbook劇本

Day 47 Ansible-playbook劇本

playbook是由一個或多個子產品組成的,使用多個不同的子產品,完成一件事情。

yum  copy   service

安裝一個服務,配置,并啟動。

    1.找誰來拍。

    2.大概的任務。

    3.具體怎麼做。

1.安裝

2.配置

3.啟動

[root@m01 ~]# cat httpd_install.yaml   安裝并配置httpd

#這是一個ansible的playbook

- hosts: web     指定主機子產品

  tasks:         執行操作

    - name: Install Httpd Server    說明資訊

      yum: name=httpd,httpd-tools state=installed      安裝httpd

    - name: Configure Httpd Server

      copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf   

       本地修改好的配置檔案發送到指定主機

    - name: Start Httpd Server

      service: name=httpd state=started enabled=yes

       啟動對應服務

2.修改本地拷貝好的httpd.conf檔案

3.執行ansible-playbook httpd_install.yaml 推送

角色     外網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

[root@m01 ~]# mkdir /etc/ansible/ansible_playbook/{file,conf,scripts} -p

[root@m01 ~]# tree /etc/ansible/ansible_playbook/

/etc/ansible/ansible_playbook/8

├── conf

└── file

└── scripts

    1.需要關閉firewalld以及selinux、epel倉庫、ssh端口、優化基礎配置

    2.需要安裝rsync和nfs-utils

    3.準備www使用者

    4.需要準備/etc/rsync.pass密碼檔案

    5.需要準備全網備份腳本

[root@m01 ansible_playbook]# cat base.yaml   基礎劇本

- hosts: all     (all:所有主機)指定主機清單内的所有主機

  tasks:          執行操作

    - name: Install Epel Repos      說明資訊

      get_url: url=http://mirrors.aliyun.com/repo/epel-7.repo dest=/etc/yum.repos.d/epel.repo

      配置epel源

    - name: Dns Client         說明資訊

      copy: src=./conf/resolv.conf dest=/etc/resolv.conf

        本地修改好的配置檔案發送到指定主機

    - 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/

       本地寫好的腳本推送到指定主機

#!/usr/bin/bash      指定腳本

#定義變量

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

Ip=`ifconfig eth1|awk 'NR==2{print $2}'`

Host=`hostname`

Date=`date +%F`

Path=/backup

df=${Host}_${Ip}_${Date}

#建立目錄

mkdir -p $Path/$df

#打包重要檔案

tar zchf  $Path/$df/system.tar.gz /etc/fstab /etc/rsyncd.conf

tar zchf  $Path/$df/log.tar.gz    /var/log/secure /var/log/messages

#攜帶md5資訊

find $Path/$df/ -type f -name "*.tar.gz" |xargs md5sum >$Path/$df/falg_$Date

#不輸入密碼

export RSYNC_PASSWORD=1

#推送至備份伺服器

rsync -avz $Path/ [email protected]::backup

#保留七天内的檔案

find $Path/ -type d -mtime +7 |xargs rm -rf

    - name: Crontable Scripts           說明資訊

      cron: name="backup scripts" hour=01 minute=00 job="/bin/bash /server/scripts/rsync_backup_md5.sh &>/dev/null"

      書寫定時任務

    1.安裝rsync

    2.配置rsync(配置變更,一定要進行重載操作)

    3.建立虛拟使用者,權限調整

    4.建立目錄/data/  /backup

    5.啟動rsync

    6.配置郵箱->郵箱的發件人->校驗的腳本

[root@m01 ansible_playbook]# cat rsync.yaml  配置備份伺服器的rsync

- hosts: backup    指定主機172.16.1.41

  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   

      如果配置檔案發生改變,則執行handlers中以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/

          本地寫好的腳本推送到指定主機

#!/usr/bin/bash     指定腳本

#驗證md5資訊是否正确

find $Path/ -type f -name "falg_$Date"|xargs md5sum -c >$Path/falgmd5_$Date

#清理長時間滞留資訊

find $Path/ -type f -name "falgmd5*" -mtime +7 |xargs rm -rf

find $Path/ -type d -mtime +180 |xargs rm -rf

#發送驗證結果給管理者

mail -s "驗證資訊$Date" [email protected] <$Path/falgmd5_$Date

    - name: Crond Check Scripts          說明資訊

      cron: name="check scripts" hour=05 minute=00 job="/bin/bash /server/scripts/rsync_check_backup.sh &>/dev/null"

      書寫定時任務

  handlers:   觸發notify後執行相對應的操作

    - name: Restart Rsync Server       說明資訊

      service: name=rsyncd state=restarted    重新開機對應服務

    1.安裝nfs-utils

    2.配置nfs     (當修改了配置,觸發重載操作)

    3.建立目錄,授權

    4.啟動

 [root@m01 ansible_playbook]# cat nfs.yaml  共享指定目錄

- hosts: nfs     指定主機172.16.1.31

    - 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   

      如果配置檔案發生改變,則執行handlers中以Restart Nfs Server命名的對應操作

    - name: Create Share Data    說明資訊

      建立目錄并指定屬主和屬組,修改權限

    - name: Start Nfs Server    說明資訊

      service: name=nfs-server state=started enabled=yes

      啟動對應服務

  handlers:     觸發notify後執行相對應的操作

    - name: Restart Nfs Server    說明資訊

      service: name=nfs-server state=restarted

      重新開機對應服務

    1.下載下傳sersync

    2.解壓,改名,配置

    3.啟動

[root@m01 ansible_playbook]# cat sersync.yaml  實時同步

- hosts: nfs   指定主機172.16.1.31

  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.xml

            開啟Sersync服務

    [root@m01 ansible_playbook]# cat web.yaml    挂載nfs共享的目錄

- hosts: web     指定主機172.16.1.7

    - name: Mount NFS Server Share Data     說明資訊

      mount: src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mounted  

    挂載172.16.1.31共享的目錄/data  挂到哪兒  指定類型   預設defaults  狀态=挂載

[root@m01 ansible_playbook]# cat mail.yaml    所有劇本

- import_playbook: base.yaml    基礎劇本

- import_playbook: rsync.yaml   配置rsync劇本

- import_playbook: nfs.yaml     配置nfs劇本

- import_playbook: sersync.yaml   配置Sersync劇本

- import_playbook: web.yaml    挂載劇本

    1.推送公鑰

    2.使用ping子產品測試

    3.執行ansible-playbook測試

    4.測試全網備份,測試是否能發郵件,并校驗結果

    5.測試nfs的挂載

    6.測試實時同步   

繼續閱讀