saltstack (1) 简介
基本原理:
? ? SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion與master之間通過ZeroMQ消息隊(duì)列通信。minion上線后先與master端聯(lián)系,把自己的pub key發(fā)過去,這時(shí)master端通過salt-key -L命令就會(huì)看到minion的key,接受該minion-key后,也就是master與minion已經(jīng)互信。master可以發(fā)送任何指令讓minion執(zhí)行了,salt有很多可執(zhí)行模塊,比如說cmd模塊,在安裝minion的時(shí)候已經(jīng)自帶了,它們通常位于你的python庫中,locate salt | grep /usr/ ?可以看到salt自帶的所有相關(guān)模塊。這些模塊是python寫成的文件,里面會(huì)有好多函數(shù),如cmd.run,當(dāng)我們執(zhí)行salt '*' cmd.run 'uptime'的時(shí)候,master下發(fā)任務(wù)匹配到的minion上去,minion執(zhí)行模塊函數(shù),并返回結(jié)果。master監(jiān)聽4505和4506端口,4505對應(yīng)的是ZMQ的PUB system,用來發(fā)送消息,4506對應(yīng)的是REP system是來接受消息的。
具體步驟如下
1. Salt stack的Master與Minion之間通過ZeroMq進(jìn)行消息傳遞,使用了ZeroMq的發(fā)布-訂閱模式,連接方式包括tcp,ipc
2. salt命令,將cmd.run ls命令從salt.client.LocalClient.cmd_cli發(fā)布到master,獲取一個(gè)Jodid,根據(jù)jobid獲取命令執(zhí)行結(jié)果。
3. master接收到命令后,將要執(zhí)行的命令發(fā)送給客戶端minion。
4. minion從消息總線上接收到要處理的命令,交給minion._handle_aes處理
5. minion._handle_aes發(fā)起一個(gè)本地線程調(diào)用cmdmod執(zhí)行l(wèi)s命令。線程執(zhí)行完ls后,調(diào)用minion._return_pub方法,將執(zhí)行結(jié)果通過消息總線返回給master
6. master接收到客戶端返回的結(jié)果,調(diào)用master._handle_aes方法,將結(jié)果寫的文件中
7. salt.client.LocalClient.cmd_cli通過輪詢獲取Job執(zhí)行結(jié)果,將結(jié)果輸出到終端
安裝 saltstack
[root@redis01-jp ~]#? wget https://repo.saltstack.com/yum/amazon/salt-amzn-repo-2016.11-1.amzn1.noarch.rpm
[root@redis01-jp ~]# rpm -ivh salt-amzn-repo-2016.11-1.amzn1.noarch.rpm
Preparing...? ? ? ? ? ? ? ? ? ? ? ? ? ################################# [100%]
Updating / installing...
?? 1:salt-amzn-repo-2016.11-1.amzn1 ? ################################# [100%]
[root@redis01-jp ~]#?yum install salt-master -y #服務(wù)端
[root@redis01-jp ~]#?yum install salt-minion -y #客戶端
[root@redis01-jp ~]#?yum install salt-ssh?
[root@redis01-jp ~]#?yum install salt-syndic
[root@redis01-jp ~]#?yum install salt-cloud
[root@redis01-jp ~]# vim /etc/salt/master
[root@redis01-jp ~]# sed -n '15p' /etc/salt/master
interface: 0.0.0.0
[root@redis01-jp ~]# service salt-master start
Starting salt-master daemon: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [? OK? ]
[root@redis01-jp ~]# lsof -i:4505
COMMAND ? ? PID USER ? FD ? TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 60444 root ? 12u? IPv4 145608? ? ? 0t0? TCP *:4505 (LISTEN)
[root@redis01-jp ~]# lsof -i:4506
COMMAND ? ? PID USER ? FD ? TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 60464 root ? 20u? IPv4 145637? ? ? 0t0? TCP *:4506 (LISTEN)
[root@redis01-jp ~]#
[root@redis02-jp ~]# vim /etc/salt/minion
[root@redis02-jp ~]# sed -n '17p;79p' /etc/salt/minion
master: redis01-jp
id: redis02-jp
[root@redis02-jp ~]# service salt-minion start
Starting salt-minion daemon: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [? OK? ]
[root@redis02-jp ~]#
[root@redis01-jp ~]# salt-key -L?
Accepted Keys:
Denied Keys:
Unaccepted Keys:
redis02-jp
Rejected Keys:
[root@redis01-jp ~]# salt-key -a redis02-jp? ? ? 添加指定ID的key
The following keys are going to be accepted:
Unaccepted Keys:
redis02-jp
Proceed? [n/Y] y
Key for minion redis02-jp accepted.
[root@redis01-jp ~]# salt-key -L
Accepted Keys:
redis02-jp
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@redis01-jp ~]#
關(guān)于master的認(rèn)證:
? salt-key ?的基本命令:
? salt-key -L #檢測當(dāng)前server端所有minion端key的情況,三種:接收、等待接收和拒絕
? salt-key -a minion_id ? ?#指定接收某臺(tái)minion的key
? salt-key -A ? ?#接收Unaccepted Keys下所有的minion
? salt-key -d ?minion_id ? #刪除已經(jīng)接收的機(jī)器中指定機(jī)器minion key (Accepted Keys:)
? salt-key -D ? #刪除已經(jīng)接收的所有機(jī)器(Accepted Keys:)
? salt-key -y
自動(dòng)認(rèn)證
[root@redis01-jp ~]# sed -n '215p' /etc/salt/master
auto_accept: True
[root@redis01-jp ~]# service salt-master restart
Stopping salt-master daemon: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [? OK? ]
Starting salt-master daemon: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [? OK? ]
[root@redis01-jp ~]#
用法與幫助
salt [options] '<target>' <function> [arguments]
? -E ? 可以用正則表達(dá)式來匹配對象
? -L ? 以列表的形式來指定對象
? -G? 根據(jù)默認(rèn)的grain的結(jié)果 執(zhí)行模塊
? -N? 匹配指定的組
salt '' sys.doc ? ? ? ? ? #查看所有執(zhí)行模塊的doc?
salt? '' sys.doc test ? #查看test模塊的幫助?
salt '*' sys.doc test.ping ? #查看test.ping函數(shù)的幫助
salt '*' sys.list_functions grains ?#列出模塊的相關(guān)函數(shù)
轉(zhuǎn)載于:https://blog.51cto.com/caiyuanji/1884393
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的saltstack (1) 简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql的status状态说明
- 下一篇: javaScript中的几种排序方式