SaltStack簡介
SaltStack
- saltstack是一個新的基礎平臺管理工具,只需要花費數分鐘即可執行起來,可以支撐管理上萬臺伺服器的規模,數秒鐘即可完成資料傳遞。
- saltstack是使用Python語言開發的,同時也支援restAPI方便二次開發以及和它平臺整合,同時官方也釋出了一個Web管理介面halite。
- Salt是python編寫的,支援使用者通過python自定義功能模組,也提供了大量的python API介面,使用者可以根據需要進行簡單快速的擴充套件。
優點
- 首先,他速度快,基於訊息佇列+執行緒,跑完多臺裝置,都是毫秒級別的
- 其次,非常靈活,原始碼是python,方便理解和自定義模組(python 語言相對於其他的perl、ruby等還是很好理解的)
- 命令簡單,功能強大
saltstack執行方式
- Local
- Master/Minion
- Salt SSH
saltstack三大功能
- 遠端執行
- 配置管理
- 雲管理
saltstack資料系統
- Grains (靜態資料)
- pillar (動態資料)
saltstack配置管理
- SLS(YAML、Jinja)
- Highstate
- States Module
部署配置SaltStack
準備兩臺機器,這兩臺機器都關閉 selinux,清空防火牆規則。
List
CentOS7.3
epel-7.repo
salt-master
salt-minion
# 依賴包
python
zeromq
pyzmp
pycrypto
msgpack-python
yaml
jinja2
節點名 | IP | 軟體版本 | 硬體 | 網路 | 說明 |
---|---|---|---|---|---|
Master | 192.168.43.132 | list 裡面都有 | 2C4G | Nat,內網 | 測試環境 |
192.168.43.234 | list 裡面都有 | 2C4G | Nat,內網 | 測試環境 |
安裝saltstack
salt軟體包需要epel源的支援,那麼下載
EPEL的全稱叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社群打造,為 RHEL 及衍生髮行版如 CentOS、Scientific Linux 等提供高質量軟體包的專案。裝上了 EPEL之後,就相當於新增了一個第三方源。
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空快取
yum makecache #生成yum快取
# master 安裝salt-master
yum install salt-master -y
# slave 安裝salt-minion
yum install salt-minion -y
配置Saltstack
# salt-master的配置檔案是/etc/salt/master
# salt-minion的配置檔案是/etc/salt/minion
# 配置檔案中包含了大量可調整的引數,這些引數控制master和minion各個方面
salt-master
[root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$
interface: 0.0.0.0 #繫結到本地的0.0.0.0地址
publish_port: 4505 #管理埠,命令傳送
user: root #執行salt程式的使用者
worker_threads: 5 #salt執行執行緒數,執行緒越多處理速度越快,不要超過cpu個數
ret_port: 4506 #執行結果返回埠
pidfile: /var/run/salt-master.pid #pid檔案位置
log_file: /var/log/salt/master #日誌檔案地址
#自動接收minion的key
auto_accept: False
salt-minion
[root@slave ~]# grep -v ^# /etc/salt/minion|grep -v ^$
master: master
master_port: 4506
user: root
id: slave
acceptance_wait_time: 10
log_file: /var/log/salt/minion
啟動驗證服務
systemctl start salt-minion
systemctl start salt-master
#檢查salt狀態
systemctl status salt-minion
systemctl status salt-master
# 驗證埠
[root@master ~]# ss -atnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:* users:(("sshd",pid=883,fd=3))
LISTEN 0 100 *:4505 *:* users:(("salt-master",pid=1232,fd=13))
LISTEN 0 100 *:4506 *:* users:(("salt-master",pid=1244,fd=21))
# salt-master預設監聽兩個埠
4505 # publish_port 提供遠端命令傳送功能
4506 # ret_port 提供認證,檔案服務,結果收集等功能
# 確保客戶端可以通訊伺服器的此2個埠,保證防火牆允許埠通過。因此在測試環境直接關閉防火牆
配置master認證minion
master上接受minion金鑰
在minion啟動後連線master會請求master為其簽發證照,等待證照籤發完成後,master可以信任minion,並且minion和master之間的通訊是加密的。
salt-master執行
[root@master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
slave # 此時已出現slave
Rejected Keys:
# 此時slave已經出現在unaccepted keys中,說明minion已經和master聯絡,
# 並且master已經獲取了minion的公鑰,等待下一步指令。
檢查master和minion的金鑰匹配
[root@master ~]# salt-key -f slave
Unaccepted Keys:
slave: d4:97:1a:81:4d:88:d2:9b:0b:73:e3:66:07:7e:20:6c
# 因此可確認金鑰匹配,在master上接受金鑰
[root@master ~]# salt-key -a slave
The following keys are going to be accepted:
Unaccepted Keys:
slave
Proceed? [n/Y] y
Key for minion slave accepted.
# 確認接收祕鑰後,檢驗minion祕鑰是否被接收
[root@master ~]# salt-key -L
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:
salt-key常用命令
[root@linux-node1 ~]# salt-key -L
Accepted Keys: #已經接受的key
Denied Keys: #拒絕的key
Unaccepted Keys:#未加入的key
Rejected Keys:#吊銷的key
#常用引數
-L #檢視KEY狀態
-A #允許所有
-D #刪除所有
-a #認證指定的key
-d #刪除指定的key
-r #登出掉指定key(該狀態為未被認證)
#在master端/etc/salt/master配置
auto_accept: True #如果對Minion信任,可以配置master自動接受請求
salt-key的使用
# 列出當前所有的key
[root@master ~]# salt-key
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:
# 新增指定minion的key
[root@master ~]# salt-key -a salt -y
# 新增所有minion的key
[root@master ~]# salt-key -A -y
# 刪除指定的key
[root@master ~]# salt-key -d slave -y
# 刪除所有的key
[root@master ~]# salt-key -D -y
日常命令引數
首先知道master和minion都安裝了什麼檔案,然後才知道怎麼操作
# master端
[root@master ~]# rpm -ql salt-master
/etc/salt/master # salt master主配置檔案
/usr/bin/salt # salt master核心操作命令
/usr/bin/salt-cp # salt 檔案傳輸命令
/usr/bin/salt-key # salt證照管理
/usr/bin/salt-master # salt master服務命令
/usr/bin/salt-run # salt master runner命令
/usr/bin/salt-unity
/usr/lib/systemd/system/salt-master.service
/usr/share/man/man1/salt-cp.1.gz
/usr/share/man/man1/salt-key.1.gz
/usr/share/man/man1/salt-master.1.gz
/usr/share/man/man1/salt-run.1.gz
/usr/share/man/man1/salt-unity.1.gz
/usr/share/man/man7/salt.7.gz
# slave端
[root@slave ~]# rpm -ql salt-minion
/etc/salt/minion # minion配置檔案
/usr/bin/salt-call # 拉取命令
/usr/bin/salt-minion # minion服務命令
/usr/lib/systemd/system/salt-minion.service # minion啟動指令碼
/usr/share/man/man1/salt-call.1.gz
/usr/share/man/man1/salt-minion.1.gz
第一條SaltStack命令
第一條salt命令
[root@master ~]# salt '*' test.ping
slave:
True
[root@master ~]# salt '*' test.echo 'zhou'
slave:
zhou
# salt是一個命令
# * 表示目標主機, 在這裡代表所有目標主機
# test.ping是salt遠端執行的一個模組下面的方法。
# 這是條很簡單的探測minion主機存活命令,也是遠端執行命令,我們通過master傳送訊息給"*"所有的minion,
# 並且告訴他們執行salt內建的命令(也是python模組中的一個函式),返回true表示slave機器監控存活。
[root@master ~]# salt '*' test.fib 50
slave:
|_
- 0
- 1
- 1
- 2
- 3
- 5
- 8
- 13
- 21
- 34
- 5.00679016113e-06
# test.fib生成斐波那契數列
# 菲波那切數列定義是第0項是0,第1項是1,數列從第3項開始,每一項等於前兩項之和。
Salt命令組成結構
完整的一個命令
# 在命令列輸入的命令都是 執行模組
# 等到命令寫入到檔案中, 就叫做狀態模組
salt --help # 即可檢視salt幫助
[root@master 192.168.199.155 ~]$salt --help
Usage: salt [options] '<target>' <function> [arguments]
# salt命令 引數 目標 salt模組的函式 遠端執行的引數
# 完整的五部分命令
# summary引數顯示salt命令的概要
[root@master ~]# salt --summary '*' cmd.run 'hostname'
slave:
slave
-------------------------------------------
Summary
-------------------------------------------
# of Minions Targeted: 1
# of Minions Returned: 1
# of Minions Did Not Return: 0
-------------------------------------------
# 列出salt的sys模組
[root@master ~]# salt 'slave' sys.list_modules
slave:
- acl
- aliases
- alternatives
- archive
- artifactory
- blockdev
- btrfs
- buildout
- cloud
- cmd
遠端執行命令模組
[root@master ~]# salt 'slave' sys.list_modules
# cmd是超級模組,所有shell命令都能執行
[root@master ~]# salt 'slave' cmd.run 'ps -ef |grep python'
slave:
root 882 1 0 14:57 ? 00:00:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
root 1220 1 0 15:13 ? 00:00:00 /usr/bin/python /usr/bin/salt-minion
root 1223 1220 0 15:13 ? 00:00:00 /usr/bin/python /usr/bin/salt-minion
root 13564 1 0 15:31 ? 00:00:00 /usr/bin/python /usr/bin/salt-minion
root 13565 13564 0 15:31 ? 00:00:00 /bin/sh -c ps -ef |grep python
root 13567 13565 0 15:31 ? 00:00:00 grep python
遠端安裝nginx
#在minion上安裝nginx
[root@master~]$salt 'slave' pkg.install "nginx"
#解除安裝minion上的nginx
[root@master~]$salt 'slave' pkg.remove "nginx"
#檢查pkg包的版本
[root@master~]$salt 'slave' pkg.version "nginx"
遠端管理服務模組
# 管理服務是系統管理員的重要任務,通過salt管理minion服務會很簡單,使用service模組
[root@master ~]# salt 'slave' service.start "nginx"
slave:
True
[root@master ~]# salt 'slave' service.status "nginx"
slave:
True
[root@master ~]# salt 'slave' service.stop "nginx"
slave:
True
--out控制salt命令結果輸出格式
JSON
[root@master ~]# salt --out=json '*' cmd.run_all 'hostname'
{
"slave": {
"pid": 13780,
"retcode": 0,
"stderr": "",
"stdout": "slave"
}
}
YAML
[root@master ~]# salt --out=yaml '*' cmd.run_all 'hostname'
slave:
pid: 13786
retcode: 0
stderr: ''
stdout: slave