CentOS7.5 -- Ansible部署與應用

来源:https://www.cnblogs.com/wenrulaogou/archive/2018/09/13/9641779.html
-Advertisement-
Play Games

第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 = /data
View 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.gz
View 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=restarted
View 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.xml
View 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=mounted
View 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.yaml
View Code

5.10 操作後測試步驟

快照還原
推送公鑰
使用ping模塊測試
執行ansible-playbook測試
測試全網備份,測試是否能發郵件,並校驗結果
測試nfs的掛載
測試實時同步


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第1章 關於yum源 1.1 什麼是yum源 yum(Yellow dog Updater, Modified)是一個在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端軟體包管理器。基於 RPM 包管理,能夠從指定的伺服器 自動下載 RPM 包並且安裝,可以自動處理依賴性 ...
  • 進程的概念和與程式的區別 1、進程的定義 進程是允許某個併發執行的程式在某個數據集合上的運行過程。 進程是由正文段、用戶數據段及進程式控制制塊共同組成的執行環境。正文段存放被執行的機器指令,用戶數據段存放進程在執行時直接進行操作的用戶數據。進程式控制制塊存放程式的運行環境,操作系統通過這些數據描述和管理進程 ...
  • 下載 clamwin 到 windows 並安裝http://www.clamwin.com/為了方便使用clamwin,寫一個bat,實現拖拽到bat 自動查毒@echo offmode con cols=100 lines=2REM 拖拽查毒REM 文件全名為: %~nx1, 文件名為: %~n... ...
  • ...
  • 在ARM開發中,經常使用的開發環境就是Keil uVision集成開發環境+JLink模擬器,本文就是就是介紹、總結使用該開發環境中遇到的問題,併在問題後方附上親測可行的解決方法。 ...
  • 經常會通過ssh登錄遠程伺服器,一種是通過密碼方式登錄,一種是通過公鑰登錄。 如何設置通過公鑰登錄伺服器 1. 先生成公鑰和私鑰 此時,會在存放ssh秘鑰的地方生成兩個文件(不同系統,存放秘鑰的地方不同),“.pub”結尾的是公鑰,另一個是私鑰 2. 第二步,將公鑰部署到伺服器 公鑰需要寫入到服務的 ...
  • 一、安裝 參考:https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html 二、配置 三、導庫 ...
  • 執行命令 本地上傳文件到伺服器 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...