課堂筆記day38——Ansible自動化管理

1. Ansible介紹

2013年以前批量管理服務器都是用ssh秘鑰認證+腳本批量管理,ssh它的特點是非常的簡單且實用,而且它是一個類似實時復制的inotify工具。但是2013年后由于MySQL 高可用和MHA集群的發(fā)展,要求所有機器之間都需要秘鑰認證,就誕生了Ansible工具。

2. 批量管理工具的歷史

SSH+腳本:08年以前

CFEngine:07~08年

Puppet:10~13年

saltstack:14~17(python開發(fā))

ansible:16年以后(python開發(fā))

3. 為什么要用Ansible?

使用簡單、方便,易于學習,功能和其他工具相比略勝一籌。

Ansible有自己的配置文件,可以多線程直接實現,而且不需要寫腳本(類似實時復制的sersync)。

4. 什么是Ansible

Ansible是一個用來遠程管理服務器的工具軟件。

Ansible是一個用來批量部署遠程主機上服務的工具。這里“遠程主機(Remote Host)”是指任何可以通過SSH登錄的主機,所以它既可以是遠程虛擬機或物理機,也可以是本地主機。

Ansible通過SSH協(xié)議實現管理節(jié)點與遠程節(jié)點之間的通信。理論上來說,只要能通過SSH登錄到遠程主機來完成的操作,都可以通過Ansible實現批量自動化操作。

涉及管理操作:復制文件、安裝服務、服務啟動停止管理、配置管理等等。

5. 為什么要用批量管理工具運維?

可以顯著的提高效率;例如百度幾萬臺服務器和阿里云幾萬臺服務器(如果沒有批量操作管理工具,估計阿里的人早已累死;而且像百度、阿里這樣的互聯網公司服務器全部都是定制的,且他們在存儲數據上都有一個特點:SSD+SATA熱點存儲)。

6. Ansilbe特點

Ansible基于Python語言實現,由Paramiko和PyYAML兩個關鍵模塊構建。

Shell、Python是Linux運維學員必會的兩門語言。

安裝部署過程特別簡單,學習曲線很平坦。

不需要單獨安裝客戶端,只是利用現有的SSHD服務(協(xié)議)即可。

不需要服務端(no servers)。

ansible playbook,采用yaml配置,提前編排自動化任務。

ansible功能模塊較多,對于自動化的場景支持豐富。

官方參考網址:http://docs.ansible.com

7. Ansible架構介紹(見圖說明)

連接插件connectior plugins用于連接主機 用來連接被管理端

核心模塊 core modules 連接主機實現操作, 它依賴于具體的模塊來做具體的事情

自定義模塊 custom modules,根據自己的需求編寫具體的模塊

插件 plugins,完成模塊功能的補充

劇本 playbooks,ansible的配置文件,將多個任務定義在劇本中,由ansible自動執(zhí)行

主機清單 inventor,定義ansible需要操作主機的范圍

最重要的一點是 ansible是模塊化的 它所有的操作都依賴于模塊

image.png

實踐部分:

1. Ansible實踐環(huán)境準備


172.16.1.61(m01)===>172.16.1.31(nfs01)

172.16.1.61(m01)===>172.16.1.41(backup)

2. 安裝Ansible

#m01管理機安裝epel-release、ansible、libselinux-python

[root@m01 /]# yum install epel-release -y

[root@m01 /]# yum install ansible -y

[root@m01 /]# yum install libselinux-python -y

[root@m01 /]# rpm -qa|grep libselinux-python

libselinux-python-2.5-14.1.el7.x86_64

#其它所有被管理服務器下安裝libselinux-python

[root@nfs01 /]# yum install libselinux-python -y

[root@nfs01 /]# rpm -qa|grep libselinux-python

libselinux-python-2.5-14.1.el7.x86_64  

3. 主機列表配置

#先備份原始主機列表配置文件

[root@m01 /]# cp /etc/ansible/hosts{,.ori}

#方法一:

#將原始配置文件修改為如下

#注意:如果管理機向被管理機分發(fā)了公鑰文件則不需要添加[oldboy_pass]模塊

[root@m01 /]# cat >/etc/ansible/hosts<<EOF

[oldboy]

172.16.1.31

172.16.1.41

[oldgirl]

172.16.1.31

172.16.1.41

172.16.1.51

[oldboy_pass]

172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456

172.16.1.41 ansible_ssh_user=root ansible_ssh_pass=123456

EOF

[root@m01 /]# cat /etc/ansible/hosts

[root@m01 ~]# ansible oldboy -m command -a "free -m" #<==出現如下結果證明已經配置完成

172.16.1.31 | CHANGED | rc=0 >>

 total used free shared buff/cache available

Mem: 972 103 555 7 313 654

Swap: 1999 0 1999  
#方法二:修改/etc/ansible/ansible.cfg中的374行或者將71行的注釋取消掉 

[root@m01 ~]# cat /etc/ansible/ansible.cfg -n|grep 374

 374 #ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s

#修改為:ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no

#注意:如果是在重啟服務器后修改374行,需要提前將公鑰分發(fā)至各個需要管理的服務器

[root@m01 ~]# cat /etc/ansible/ansible.cfg -n |grep -w 71

71 #host_key_checking = False

#修改為:host_key_checking = False    

4. Ansible命令的常用參數

-m MODULE_NAME:模塊名字,默認command

-a MODULE_ARGS:模塊參數

-f FORKS:并發(fā)進程數,默認為5

-i INVENTORY:指定主機例表文件(/etc/anslble/hosts)

ansible-doc -l #<==查找屬于ansible的模塊

ansible-doc -s command   #<==查找某個模塊的具體參數幫助 

5. command模塊

5.1 功能說明

command Executes a command on a remote node

執(zhí)行一個命令在遠程節(jié)點上

5.2 操作實踐

1)#注意:不支持的符號;例如 > < | &等 $HOME

ansible oldboy -m command -a "free -m"

ansible oldboy -m command -a "df -h"

ansible oldboy -m command -a "ls /root"

ansible oldboy -m command -a "cat redhat-release"

ansible oldboy -m command -a "cat /etc/redhat-release"
2)#chdir相當于cd /etc

ansible oldboy -m command -a "pwd chdir=/etc"
3)#"pwd creates=/etc"相當于[ -e /etc ]||pwd

后面執(zhí)行成功,前面就不執(zhí)行;后面執(zhí)行失敗,前面才執(zhí)行(creates是創(chuàng)建的意思)

ansible oldboy -m command -a "pwd creates=/etc"
4)#"ls /root removes=/root" 相當于[ -e /root ]&&ls /root

后面執(zhí)行成功,前面才執(zhí)行;后面執(zhí)行失敗,前面就不執(zhí)行(removes是清除的意思)

ansible oldboy -m command -a "ls /root removes=/root"
5)#warn=False 忽略警告

ansible oldboy -m command -a "chmod 000 /etc/hosts warn=False"

6.項目實踐

rsync服務器端:172.16.1.31、172.16.1.41

rsync客戶端:172.16.1.7、172.16.1.8

實現:從172.16.1.7推送文件到172.16.1.31,從172.16.1.8推送文件到172.16.1.41.

#rsync服務端配置命令:
[root@m01 /server/scripts]# cat rsync_server.sh 
#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
#rsync服務端部署
cp /etc/rsyncd.conf{,.ori}
#配置文件
cat >/etc/rsyncd.conf<<EOF
#config_______________start
#created by liuhuan
uid = rsync
gid = rsync
use chroot = no
fake  super  = yes
max connections = 200
timeout = 600 
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = welcome to oldboyedu backup!
path = /backup/
EOF
#創(chuàng)建用戶|創(chuàng)建目錄并授權|生成密碼文件并授權
useradd rsync
mkdir -p /backup
chown -R rsync.rsync /backup
echo "rsync_backup:oldboy" >/etc/rsync.password
chmod 600 /etc/rsync.password
ls -l /etc/rsync.password
#rsync客戶端命令
[root@m01 /server/scripts]# cat rsync_client.sh 
#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
#rsync客戶端部署
#生成密碼認證文件并授權
echo "oldboy" >/etc/rsync.password
chmod 600 /etc/rsync.password
ls -l /etc/rsync.password
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容