salt stack是一種自動化的運維工具,能夠同時對N臺服務器進行配置管理、遠程命令執行等操做。html
salt stack分爲兩個部分node
salt-master,部署在控制服務器上,用於發出運維指令; salt-minion,部署在全部須要批量運維的線上服務器上;
服務端:yum install salt-master -y 客戶端:yum install salt-minion -y
服務端:/etc/salt/masterpython
服務端配置:mysql
interface: 192.168.1.229 auto_accept: True
其中,interface 用於設置master監聽的IP地址;linux
auto_accept設置是否自動接收minion的KEY。ios
master啓動後默認監聽4505和4506兩個端口:4505(publish_port)爲salt的消息發佈系統;4506(ret_port)爲salt客戶端與服務端通訊的端口。nginx
客戶端:/etc/salt/minionredis
客戶端配置:sql
master: 192.168.1.229 id :34
其中,master設置服務端地址;apache
id用於設置minion自身的ID,master根據這個ID識別minion;
服務端啓動方式:service salt-master start 客戶端啓動方式:service salt-minion start
服務端:/var/log/salt/master 客戶端:/var/log/salt/minion
一、minion在第一次啓動時,會在/etc/salt/pki/minion/(該路徑在/etc/salt/minion裏面設置)下自動生成minion.pem(private key)和minion.pub(public key),而後將minion.pub發送給master;
二、master 在接收到minion的public key後,經過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會存放以minion id命名的public key, 而後master就能對minion發送指令了。
Salt在master和minion數據交換過程當中使用AES加密, 爲了保證發送給minion的指令不會被篡改,在發送命令到minion以前,minion的key須要先被master所接受(accepted),運行salt-key能夠列出當前key的狀態:
[root@localhost src]# salt-key -L Accepted Keys: 34 35 37 39 56 57 Unaccepted Keys: Rejected Keys:
salt-key命令能夠接受特定的單個key或批量接受key,使用-A選項接受當前全部的key,接受單個key可使用-a keyname。
認證命令爲salt-key,經常使用的有以下命令
-a ACCEPT, --accept=ACCEPTAccept the following key -A, --accept-all Accept all pending keys -r REJECT, --reject=REJECTReject the specified public key -R, --reject-all Reject all pending keys -d DELETE, --delete=DELETEDelete the named key -D, --delete-all Delete all keys
固然salt也是能夠自動認證的,把下面的False改爲True就OK了:
grep -n "auto_accept:" /etc/salt/master
salt 命令的格式
salt <target> <function> <args>
這裏target是指minion的id,function是要執行的功能函數,args是函數參數。例如:
salt '*' cmd.run 'ls /home/' salt '*' cmd.exec_code bash 'for i in {1,2};do echo $i;done' salt '*' service.restart salt-minion
對全部的minion執行命令:
salt '*' cmd.run 'uptime'
輸出結果:
34: 18:13:18 up 268 days, 6:04, 3 users, load average: 0.73, 0.87, 0.88 37: 18:13:18 up 142 days, 16:51, 1 user, load average: 0.47, 0.50, 0.46 39: 18:13:17 up 142 days, 16:49, 3 users, load average: 0.60, 0.59, 0.51 35: 18:13:17 up 268 days, 6:03, 1 user, load average: 1.11, 0.97, 0.87 57: 18:13:18 up 149 days, 2:30, 1 user, load average: 1.54, 1.62, 1.55 56: 18:13:17 up 149 days, 2:31, 0 users, load average: 1.50, 1.59, 1.51
-L選項指定minion列表:
salt -L '35,56' cmd.run 'uptime'
-E選項使用正則匹配指定minion列表:
salt -E '^3' cmd.run 'uptime'
-N選項指定一個分組:
salt -N group2 test.ping
這裏的test.ping命令和ICMP的ping沒有關係。
注意:服務器分組須要事先在配置文件(/etc/salt/master)添加。
這裏能夠查看到salt支持的全部模塊提供的功能列表:
salt '*' -d cmd
好比:
一、disk模塊,查看磁盤使用率
salt '*' disk.usage salt '*' disk.percent /var salt '*' disk.inodeusage
二、dig模塊
salt ns1 dig.A www.google.com salt ns1 dig.AAAA www.google.com salt ns1 dig.MX google.com salt ns1 dig.NS google.com salt ns1 dig.SPF google.com salt ns1 dig.check_ip 127.0.0.1
三、pkg模塊,用於批量安裝minion服務器
salt '*' pkg.install <package name> salt '*' pkg.upgrade
注意:不一樣的linux發行版本,採用的包管理方式不同,例如Ubuntu使用apt,CentOS使用yum等,所以該模塊有不一樣的實現;
四、cron模塊,管理集羣的crontab
salt '*' cron.ls root salt '*' cron.raw_cron root salt '*' cron.rm_job root /usr/local/weekly salt '*' cron.rm_env root MAILTO salt '*' cron.set_job root '*' '*' '*' '*' 1 /usr/local/weekly salt '*' cron.write_cron_file root /tmp/new_cron
五、at模塊,一次性任務
salt '*' at.at 12:05am '/sbin/reboot' tag=reboot salt '*' at.at '3:05am +3 days' 'bin/myscript' tag=nightly runas=jim salt '*' at.atq salt '*' at.atrm all
salt '*' service.available sshd salt '*' service.get_all salt '*' service.reload <service name> salt '*' service.restart <service name> salt '*' service.start <service name> salt '*' service.stop <service name> salt '*' service.status <service name> [service signature]
七、cmd模塊
salt '*' cmd.run "ls -l | awk '/foo/{print \$2}'" salt '*' cmd.exec_code python2 'print("hello world")' salt '*' cmd.script salt://scripts/runme.sh 'arg1 arg2 "arg 3"'
cmd模塊能夠執行一段代碼、也能夠執行一個指定腳本;
八、nginx模塊,批量操做nginx服務器
salt '*' nginx.configtest salt '*' nginx.signal reload salt '*' nginx.status salt '*' nginx.version
相似的,salt還支持對
等模塊的支持。
參考文檔:
http://docs.saltstack.com/en/latest/topics/tutorials/walkthrough.html