centos7之saltstack使用手冊
武sir的圖鎮樓:
salt是一個異構平臺基礎設置管理工具(雖然我們通常只用在Linux上),使用輕量級的通訊器ZMQ,用Python寫成的批量管理工具,完全開源,遵守Apache2協議,與Puppet,Chef功能類似,有一個強大的遠程執行命令引擎,也有一個強大的配置管理系統,通常叫做Salt State System。
基本原理:
SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion與master之間通過ZeroMQ消息隊列通信
minion上線後先與master端聯系,把自己的pub key發過去,這時master端通過salt-key -L命令就會看到minion的key,接受該minion-key後,也就是master與minion已經互信
master可以發送任何指令讓minion執行了,salt有很多可執行模塊,比如說cmd模塊,在安裝minion的時候已經自帶了,它們通常位於你的python庫中,locate salt | grep /usr/
可以看到salt自帶的所有東西。
這些模塊是python寫成的文件,裏面會有好多函數,如cmd.run,當我們執行salt ‘*‘ cmd.run ‘uptime‘
的時候,master下發任務匹配到的minion上去,minion執行模塊函數,並返回結果。master監聽4505和4506端口,4505對應的是ZMQ的PUB system,用來發送消息,4506對應的是REP system是來接受消息的。
具體步驟如下:
Salt stack的Master與Minion之間通過ZeroMq進行消息傳遞,使用了ZeroMq的發布-訂閱模式,連接方式包括tcp,ipc salt命令,將cmd.run ls命令從salt.client.LocalClient.cmd_cli發布到master,獲取一個Jodid,根據jobid獲取命令執行結果。 master接收到命令後,將要執行的命令發送給客戶端minion。 minion從消息總線上接收到要處理的命令,交給minion._handle_aes處理 minion._handle_aes發起一個本地線程調用cmdmod執行ls命令。線程執行完ls後,調用minion._return_pub方法,將執行結果通過消息總線返回給master master接收到客戶端返回的結果,調用master._handle_aes方法,將結果寫的文件中 salt.client.LocalClient.cmd_cli通過輪詢獲取Job執行結果,將結果輸出到終端。
測試salt:
/etc/salt/master
minion下配置:
/etc/salt/minion/
master: master_ip或master_FQDN ##註明master的ip或者域名
id: minion_id ##取一個獨一無二的minion名字,以方便辨認
啟動master,minion:
systemctl start salt-master systemctl start salt-minion
systemctl enable salt-minion systemctl enable salt-master
master接受minion的key:
salt-key -L ##查看所有minion_key salt-key -a ‘key-name‘ ##接受該key 或者salt-key -A ##接受所有key
master對minion執行命令:
[[email protected]_unix ~]#
salt "mysql-slave" test.ping
mysql-slave: True
salt ‘*‘ cmd.run ‘uptime‘ ##在所有機器上執行命令uptime
salt ‘*‘ cmd.run ‘--reboot--‘ ##這類命令很危險,請不要嘗試,請想辦法禁止
命令說明:
說明: ‘*’ 代表的是target是指在那些minion上操作 ‘test’ ,’pkg’是一個執行模塊,所有的執行模塊見http://docs.saltstack.com/ref/modules/all/index.html?highlight=full%20list%20builtin ‘ping’,’install’是執行模塊下面的函數,同樣參加上述鏈接查看幫助 ‘ftp’ 是函數的參數(arg),有的函數需要參數,有的不需要
二、salt常用命令
salt 該命令執行salt的執行模塊,通常在master端運行,也是我們最常用到的命令
salt [options] ‘<target>‘ <function> [arguments] 如: salt ‘*‘ test.ping
salt-run 該命令執行runner(salt帶的或者自定義的,runner以後會講),通常在master端執行,比如經常用到的manage
salt-run [options] [runner.func] salt-run manage.status ##查看所有minion狀態 salt-run manage.down ##查看所有沒在線minion salt-run manged.up ##查看所有在線minion
如:[[email protected]_unix ~]# salt-run manage.status
down:
up:
- mysql-slave
salt-key 密鑰管理,通常在master端執行
salt-key [options] salt-key -L ##查看所有minion-key salt-key -a <key-name> ##接受某個minion-key salt-key -d <key-name> ##刪除某個minion-key salt-key -A ##接受所有的minion-key salt-key -D ##刪除所有的minion-key
salt-call 該命令通常在minion上執行,minion自己執行可執行模塊,不是通過master下發job
salt-call [options] <function> [arguments] salt-call test.ping ##自己執行test.ping命令 salt-call cmd.run ‘ifconfig‘ ##自己執行cmd.run函數
如:
[[email protected] ~]# salt-call test.ping
local:
True
salt-cp 分發文件到minion上,不支持目錄分發,通常在master運行
salt-cp [options] ‘<target>‘ SOURCE DEST salt-cp ‘*‘ testfile.html /tmp salt-cp ‘test*‘ index.html /tmp/a.html
salt-ssh 0.17.1版本加入的salt-ssh
salt-master master運行命令:
salt-master [options] salt-master ##前臺運行master salt-master -d ##後臺運行master salt-master -l debug ##前臺debug輸出
salt-minion minion運行命令
salt-minion [options] salt-minion ##前臺運行 salt-minion -d ##後臺運行 salt-minion -l debug ##前臺debug輸出
salt-syndic : 都知道saltstack傳統的架構都是 c/s 一個master管一堆minion的形式 syndic架構多了一層類似代理的東西
大牛saltstack博客:http://www.shencan.net/index.php/category/%e8%87%aa%e5%8a%a8%e5%8c%96%e8%bf%90%e7%bb%b4/saltstack/
centos7之saltstack使用手冊