salt靈活性強大,能夠進行大規模部署,也能進行小規模的系統部署。salt的設計架構適用於任意數量的服務器,從少許本地網絡系統到跨越數個數據中心,拓撲架構都是c/s模型,配置簡單。html
無論是幾臺、幾百臺、幾千臺服務器,均可以使用salt在一箇中心節點上進行管控,靈活定位任意服務器子集來運行命令。 python
Salt是python編寫的,支持用戶經過python自定義功能模塊,也提供了大量的python API接口,用戶能夠根據須要進行簡單快速的擴展。nginx
參考學習:http://www.javashuo.com/article/p-cfvzqlkb-dr.htmlshell
在遠程執行系統中,salt用python經過函數調用完成任務。json
運行salt依賴包vim
python zeromq pyzmp pycrypto msgpack-python yaml jinja2
語法規則 大小寫敏感 使用縮進表示層級關係 縮進時禁止tab鍵,只能空格 縮進的空格數不重要,相同層級的元素左側對其便可 # 表示註釋行 yaml支持的數據結構 對象: 鍵值對,也稱做映射 mapping 哈希hashes 字典 dict 冒號表示 key: value key冒號後必須有 數組: 一組按次序排列的值,又稱爲序列sequence 列表list 短橫線 - list1 純量: 單個不可再分的值 對象:鍵值對 yaml first_key: second_key:second_value python { 'first_key':{ 'second_key':'second_value', } }
環境準備:數組
準備2臺機器: 192.168.58.137 master 192.168.58.138 minion1 minion能夠由多臺機器,這裏拿一臺機器演示
master和minion 分別須要安裝不一樣的軟件包瀏覽器
master上: yum install salt-master -y minions上: yum install salt-minion -y
master和minion1配置hosts文件服務器
[root@master ~]# vi /etc/hosts 192.168.58.137 master 192.168.58.138 minion1 #經過Xshell左下角所有會話口:ping master 或者 ping minion1 #有迴應表示能ping通,表示DNS解析都過了 iptables -F 將三臺機器關閉防火牆服務 systemctl disable firewalld 永久關閉防火牆
修改配置前先備份:master minion網絡
[root@minionl ~]# cp /etc/salt/minion /etc/salt/minion.bck [root@master ~]# cp /etc/salt/master /etc/salt/master.bck
修改salt-master以及salt-minion的配置文件
minion1配置修改以下 master: master master_port: 4506 user: root id: s21minion1 acceptance_wait_time: 10 log_file: /var/log/salt/minion #master: master #填寫master的主機名, #master_port: 4506 #填寫master接收響應的端口號 #user: root #以root執行 #id: s21minion2 #這個id是,master在管理minion界面中,顯示的名字 master修改以下 interface: 0.0.0.0 publish_port: 4505 user: root worker_threads: 5 ret_port: 4506 pidfile: /var/run/salt-master.pid log_file: /var/log/salt/master
systemctl start salt-master systemctl start salt-minion
salt-key -L #列出master管控的全部key信息 Accepted Keys: #已接收的密鑰 Denied Keys: #拒絕密鑰 Unaccepted Keys: #發現密鑰 s21minion1 Rejected Keys:
在master上敲打: salt-key -f s21minion1 在minion上敲打 : salt-call --local key.finger [root@master ~]# salt-key -f s21minion1 Unaccepted Keys: s21minion1: fd:27:e6:20:7b:32:74:64:39:fb:9e:d8:de:d6:05:62:53:1f:0b:8e:5c:c4:4d:d4:76:39:d3:c2:b4:c8:67:eb [root@minionl ~]# salt-call --local key.finger local: fd:27:e6:20:7b:32:74:64:39:fb:d6:05:62:53:1f:0b:8e:5c:c4:4d:d4:c2:b4:c8:67:eb #密鑰都同樣表示沒有問題
salt-key -A #接收全部未被管控的祕鑰 [root@master ~]# salt-key -A
[root@master ~]# salt "*" test.ping s21minion1: True #返回True表示存活 #轉換json展現: [root@master ~]# salt "*" --out=json test.ping { "s21minion1": true }
[root@master ~]# salt "*" --summary cmd.run "hostname" s21minion1: minionl #cmd是超級模塊,全部shell命令都能執行 #返回全部minion的主機名字.
[root@master ~]# salt "*" cmd.run "yum install nginx -y" #cmd是超級模塊,全部shell命令都能執行
[root@master ~]# salt "*" cmd.run "yum install nginx -y" #瀏覽器訪問http://192.168.58.138/ 有響應頁面,成功
[root@master ~]# salt "*" pkg.version "nginx" s21minion1: 1:1.12.2-3.el7
[root@master ~]# salt "*" service.stop "nginx" s21minion1: True
[root@master 192.168.11.72 ~]$salt 'slave' grains.items
[root@master ~]# salt "s21minion1" grains.item fqdn_ip4 s21minion1: ---------- fqdn_ip4: - 192.168.58.138 [root@master ~]# salt "s21minion1" grains.item fqdn_ip4 --out=json #生成json格式 { "s21minion1": { "fqdn_ip4": [ "192.168.58.138" ] } }
import salt.client local = salt.client.LocalClient() local.cmd("s21minion1","cmd.run",["touch /tmp/heihei"])
[root@minionl ~]# cd /tmp [root@minionl tmp]# ls heihei vmware-root #能夠看到建立heihei文件