ansible與saltstack簡介

課前回顧

在web上使用mariadb客戶端,經過命令 mysql -u wp_zh -p1 -h 10.0.0.51 能夠檢測web與數據庫的是否能夠鏈接

批量管理要選擇批量管理工具,ansible saltstack
使用:
	1.批量命令執行
	2.批量安排服務
	3.批量配置同步
	4.批量任務執行
	5.批量代碼部署
做用:
	1.提升工做效率
	2.提升工做準確度
	3.減小維護成本
	4.減小重複性工做
優點:
1.遠程執行
批量執行遠程命令,能夠對多臺主機進行遠程操做
2.配置管理
批量配置軟件服務,能夠進行自動化方式配置,服務的統一配置管理,和啓停
3.事件驅動
經過Ansible的模塊,對服務進行不一樣的事件驅動
好比:
1)修改配置後重啓
2)只修改配置文件,不重啓
3)修改配置文件後,從新加載
4)遠程啓停服務管理
4.管理公有云
經過API接口的方式管理公有云,不過這方面作的不如saltstack.
saltstack自己能夠經過saltcloud管理各大雲廠商的雲平臺。
5.二次開發
由於語法是Python,因此便於運維進行二次開發。
6.任務編排
能夠經過playbook的方式來統一管理服務,而且可使用一條命令,實現一套架構的部署
7.跨平臺,跨系統

ansible不須要下載客戶端,不須要啓動,可是要作優化

#centos使用dnf命令安裝ansible
[root@m01 ~]# yum provides dnf
dnf-4.0.9.2-1.el7_6.noarch : Package manager

自動化工具對比

同類型軟件對比:python

​ 1.puppet學習難,安裝ruby環境難,沒有遠程執行功能mysql

​ 2.ansible輕量級,大規模環境下只經過ssh會很慢,串行的,不須要安裝客戶端,不須要啓動,只支持Python2web

​ 3.saltstack,通常選擇sall的c/s結構模式,須要安裝客戶端,經過端對端的方式鏈接服務器,可是也能夠不安裝客戶端,經過ssh協議鏈接服務器,salt-master和salt-minion是並行的,大規模批量操做的時候,會比ansible快一些,底層使用的是zero-MQ消息隊列,可是比較佔資源,saltstack既有Python2和Python3sql

saltstack官網shell

saltstack服務端

cs/s結構中,服務端與客戶端的鏈接不須要sshd進程,甚至能夠開啓或者關閉ssh服務數據庫

saltstack服務端能夠管理全部的saltstack客戶端vim

[root@m01 ~]# yum install -y salt-master salt-minion
[root@m01 ~]# rpm -q salt-master salt-minion
salt-master-2015.5.10-2.el7.noarch
salt-minion-2015.5.10-2.el7.noarch

[root@m01 ~]# rpm -ql salt-master
/etc/salt/master
/usr/bin/salt
/usr/bin/salt-cp
/usr/bin/salt-key
/usr/bin/salt-master
/usr/bin/salt-run
/usr/bin/salt-unity
/usr/lib/systemd/system/salt-master.service
[root@m01 ~]# rpm -ql salt-minion
/etc/salt/minion
/usr/bin/salt-call
/usr/bin/salt-minion
/usr/lib/systemd/system/salt-minion.service

#取消註釋(指定能夠鏈接誰)(選作)
[root@m01 ~]# vim /etc/salt/master 
interface: 0.0.0.0
#啓動
[root@m01 ~]# systemctl start salt-master.service

#取消註釋,指定master(指定客戶端尋找的ip)
[root@m01 ~]# vim /etc/salt/minion
master: 10.0.0.61
#啓動
[root@m01 ~]# systemctl start salt-minion.service

#查看saltstack端口(4505發送,4506接收)
[root@m01 ~]# netstat -lntup  
tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      1415/python                 
tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      1423/python

[root@m01 ~]# salt-key 
Accepted Keys:		#接受的
Denied Keys:		#拒絕的
Unaccepted Keys:	#沒有被容許的key
m01
Rejected Keys:		拒絕的

[root@m01 ~]# salt-key -A	#接受全部客戶端密匙
The following keys are going to be accepted:
Unaccepted Keys:
m01
web01
Proceed? [n/Y] y
Key for minion m01 accepted.
Key for minion web01 accepted.
[root@m01 ~]# salt-key -a xx	#能夠選擇接受指定客戶端密匙

[root@m01 ~]# salt-key 
Accepted Keys:
m01
web01
Denied Keys:
Unaccepted Keys:
Rejected Keys:

#檢查服務端和客戶端是否能夠連通
[root@m01 ~]# salt '*' test.ping
web01:
    True
m01:
    True

saltstack客戶端centos

客戶端的使用不須要端口ruby

[root@web01 ~]# yum install -y salt-minion

#修改配置文件
[root@web01 ~]# vim /etc/salt/minion 
master: 10.0.0.61

#啓動saltstack客戶端
[root@web01 ~]# systemctl start salt-minion.service 

#之內saltstack很佔服務器資源,因此不用的時候須要關閉
[root@m01 ~]# systemctl stop salt-master.service salt-minion.service

服務端操控客戶端

查看客戶端主機名,IP,內存,磁盤bash

cmd.run 能夠執行任何操做命令,cmd實際上就是saltstack的一個模塊
.就至關於調用函數,方法(playbook)

[root@m01 ~]# salt 'web01' cmd.run 'free -m' 
web01:
                  total        used        free      shared  buff/cache   available
    Mem:            972         209         247          25         515         592
    Swap:

#查看客戶端詳細信息,主機名,IP(內置變量)
[root@m01 ~]# salt '*' grains.items
[root@m01 ~]# salt 'web01' grains.items

#查看客戶端主機名
[root@m01 ~]# salt 'm01' grains.get 'fqdn'
m01:
    m01
#查看客戶端IP
[root@m01 ~]# salt 'm01' grains.get 'fqdn_ip4'
m01:
    - 10.0.0.61
    - 172.16.1.61
[root@m01 ~]# salt 'm01' grains.get 'ip4_interfaces'
m01:
    ----------
    eth0:
        - 10.0.0.61
    eth1:
        - 172.16.1.61
    lo:
        - 127.0.0.1
[root@m01 ~]# salt 'm01' grains.get 'ip4_interfaces:eth0'
m01:
    - 10.0.0.61
[root@m01 ~]# salt 'm01' grains.get 'master'
m01:
    10.0.0.61

#開啓或者關閉客戶端web01的進程
[root@m01 ~]# salt 'web01' cmd.run 'systemctl start sshd'
[root@m01 ~]# salt 'web01' 'systemctl start sshd'

#使用ansible操做主機組
[root@m01 ~]# salt 'web0_group' cmd.run 'systemctl start sshd'

ansible官網

TP

由於ansible只安裝在服務端,不用安裝客戶端(由於ansible基於ssh協議),這種服務端也叫控制端,客戶端叫被控端,受控端

ansible服務之星流程:

​ 1.ansible讀取playbook劇本(host),劇本中會記錄對哪些主機之星哪些任務

​ 2.首先ansible經過主機清單找到要執行的主機,而後調用具體的模塊

​ 3.其次ansible會經過鏈接插件鏈接對應的主機並推送對應的任務列表

​ 4.最後被管理的主機將ansible發送過來的任務解析爲本地shell命令執行

saltmast和ansible不能同時安裝,否則會致使Python環境發生衝突,兩個軟件都用不了

Ansible的架構

一、鏈接插件connection plugins用於鏈接主機 用來鏈接被管理端
二、核心模塊core modules鏈接主機實現操做, 它依賴於具體的模塊來作具體的事情
三、自定義模塊custom modules根據本身的需求編寫具體的模塊(通常開發使用)
四、插件plugins完成模塊功能的補充
五、劇本playbook,ansible的配置文件,將多個任務定義在劇本中,由ansible自動執行
六、主機清單inventor定義ansible須要操做主機的範圍

最重要的一點是 ansible是模塊化的 它全部的操做都依賴於模塊

img

Ansible的執行流程

1.Ansible讀取playbook劇本,劇本中會記錄對哪些主機執行哪些任務。
2.首先Ansible經過主機清單找到要執行的主機,而後調用具體的模塊。
3.其次Ansible會經過鏈接插件鏈接對應的主機並推送對應的任務列表。
4.最後被管理的主機會將Ansible發送過來的任務解析爲本地Shell命令執行。

ad-hoc與playbook

[ansible任務執行模式]
ad-hoc:
ad-hoc模式使用單個模塊,支持批量執行單條命令。'ad-hoc命令是一種能夠快速輸入的命令',並且不須要保存起來的命令。至關於bash中的一句shell。
playbook:
playbook模式是ansible主要管理方式,也是ansible功能強大的關鍵所在。playbook經過多個task集合完成一類功能,如web服務的安裝部署、數據庫服務器的批量備份等。'能夠簡單地把playbook理解爲經過組合多條ad-hoc操做的配置文件。'


[ansible命令執行過程]
一、加載本身的'主配置文件',默認/etc/ansible/ansible.cfg
二、查找對應的'playbook',找到要執行的主機或者組。
三、加載本身對應的'模塊文件',如command
四、經過ansible將模塊或命令生成對應的'臨時py文件',並將該'文件傳輸'至遠程服務器
五、'對應執行用戶家目錄的.ansible/tmp/XXX/XXX.PY文件'
六、給文件+x執行
七、執行並返回結果
八、刪除臨時py文件,sleep 0 退出。
相關文章
相關標籤/搜索