一、使用場景:
1. 需要通過日誌或cap包等線上機器的日誌產出物來進行問題定位分析;
2. 有多臺主機, 不同主機需要不同vpn要來回不停切換進行查詢;
3. 自主開發的應用,需要持續的改進,不斷的更新、發佈、部署、調整配置,這不是運維部門喜歡的狀態
4. 軟件商提供的“產品”無法滿足運維部門的要求:無法通過簡單的 Q&A 文檔保證系統的正常運行,經常需要有一定技術能力的人員解決系統運行過程中各種稀奇古怪的問題。
5. “非專職運維人員”,需要頻繁的登錄各種服務器,執行一些命令來查看狀態或者更改配置。很多操作都是不斷的重複。
6. ”重複的工作應該交給程序去做“,所以我自己寫過一些腳本。爲了避免將腳本上傳到幾十臺服務器並且不時進行更改,我使用salt來進行服務器的批量操作。
二、是什麼:
1. 是一個C/S結構的輕量、安全的自運維工具
2. master: 管理端
3. minion: 被管理端
4. 可能是源於python的簡約精神,Salt的安裝配置和使用簡單到了令人髮指的地步。任何稍有經驗的linux使用者可以在10分鐘之內搭建一個測試環境並跑通一個例子(相比之下,puppet可能需要30--60分鐘)。
5. Salt使用大名鼎鼎的ZeroMQ作爲通訊協議,性能極高。可以在數秒鐘之內完成數據的傳遞
6. 基於ZeroMQ通信,具備很強的擴展性;可以進行分級管理,能夠管理分佈在廣域網的上萬臺服務器。
三、怎麼安裝:
1. Add jessie-backports and stretch repositories:
Debian:
echo 'deb http://httpredir.debian.org/debian jessie-backports main' >> /etc/apt/sources.list
echo 'deb http://httpredir.debian.org/debian jessie main' >> /etc/apt/sources.list
2. apt-get install salt-master
3. apt-get install salt-minion
4. 修改minion端的master: xxxx 管理端地址
5. /etc/init.d/salt-minion restart
6. 在管理端接收被管理端的連接, salt-key -L 查看, salt-key -a host-name 允許
四、怎麼用:
1. salt '*' test.ping
2. salt -N icg cmd.run 'cat /usr/local/xxx/server-*/logs/*.out' runas=ecp
3. salt執行命令的格式如下:
- salt '<target>' <function> [arguments]
target:執行salt命令的目標,可以使用正則表達式
function:方法,由module提供
arguments:function的參數
target可以是以下內容:
4. 正則表達式
- salt -E 'Minion*' test.ping #主機名以Minion開通
5. 列表匹配
- salt -L Minion,Minion1 test.ping
6. Grians匹配
- salt -G 'os:CentOS' test.ping
os:CentOS(默認存在)是Grains的鍵值對,數據以yaml保存在minion上,可在minion端直接編輯/etc/salt/grains,yaml格式。或者在master端執行salt '*' grains.setval key "{'sub-key': 'val', 'sub-key2': 'val2'}" ,具體文檔(命令salt * sys.doc grains查看文檔)
7. 組匹配
- salt -N groups test.ping
如,在master新建/etc/salt/master.d/nodegroups.conf ,yaml格式
8. 複合匹配
- salt -C 'G@os:CentOS or L@Minion' test.ping
9. Pillar值匹配
- salt -I 'key:value' test.ping
/etc/salt/master設置pillar_roots,數據以yaml保存在Master上
10. CIDR匹配
- salt -S '10.252.137.0/24' test.ping
10.252.137.0/24是一個指定的CIDR網段
function是module提供的方法
通過下面命令可以查看所有的function:
- salt '10.252.137.141' sys.doc cmd
function可以接受參數:
- salt '10.252.137.141' cmd.run 'uname -a'
並且支持關鍵字參數:
- #在所有minion上切換到/目錄以salt用戶運行uname -a命令。
- salt '10.252.137.141' cmd.run 'uname -a' cwd=/ user=salt
五、非root用戶運行
1. chmod 777 /etc/init.d/salt-minion
2. chown -R user:group /etc/salt /var/cache/salt /var/log/salt /var/run/salt
3. cd /etc/salt chmod 777 minion.d chmod 777 pki
4. 修改/etc/salt/minion 中的配置項, user: popo pidfile: /var/log/salt/salt-minion.pid
詳見:http://docs.saltstack.cn/ref/configuration/nonroot.html
六、參考:
1. https://docs.saltstack.com/en/latest/topics/installation/debian.html#installation-from-the-debian-raspbian-official-repository
2. https://saltstack.com/ (官網)
3. https://github.com/kerncai/saltstack/blob/master/saltstack%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E7%AE%80%E5%8D%95%E9%85%8D%E7%BD%AE.md