salt介紹
saltstack是由thomas Hatch於2011年建立的一個開源項目,設計初衷是爲了實現一個快速的遠程執行系統。python
salt強大嗎
系統管理員平常會進行大量的重複性操做,例如安裝軟件,修改配置文件,建立用戶,批量執行命令等等。若是主機數量龐大,單靠人工維護實在讓人難以忍受。linux
早期運維人員會根據本身的生產環境來寫特定腳本完成大量重複性工做,這些腳本複雜且難以維護。系統管理員面臨的問題主要是一、系統配置管理,二、遠程執行命令,所以誕生了不少開源軟件,系統維護方面有fabric、puppet、chef、ansible、saltstack等,這些軟件擅長維護系統狀態或方便的對大量主機進行批量的命令執行。centos
salt靈活性強大,能夠進行大規模部署,也能進行小規模的系統部署。salt的設計架構適用於任意數量的服務器,從少許本地網絡系統到跨越數個數據中心,拓撲架構都是c/s模型,配置簡單。緩存
不論是幾臺、幾百臺、幾千臺服務器,均可以使用salt在一箇中心節點上進行管控,靈活定位任意服務器子集來運行命令。 安全
Salt是python編寫的,支持用戶經過python自定義功能模塊,也提供了大量的python API接口,用戶能夠根據須要進行簡單快速的擴展。服務器
salt部署基本架構
在安裝salt以前,先理解salt架構中各個角色,主要區分是salt-master和salt-minion,顧名思義master是中心控制系統,minion是被管理的客戶端。網絡
salt架構中的一種就是master > minion。架構
在遠程執行系統中,salt用python經過函數調用完成任務。運維
運行salt依賴包dom
python zeromq pyzmp pycrypto msgpack-python yaml jinja2
解決依賴包最簡單的辦法就是用安裝包管理器,yum工具
服務器環境準備
服務器環境 | centos7(master) | centos7(master) |
ip地址 |
192.168.178.131 | 192.168.178.132 |
身份 |
master | slave |
軟件包 |
salt-master | salt-minion |
修改虛擬機ip地址爲靜態地址,而且確保可上網
![](http://static.javashuo.com/static/loading.gif)
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="7d4f9ede-810f-4976-a01b-250b845c99cc" DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.11.131 NETMASK=255.255.255.0 GATEWAY=192.168.11.1 DNS1=119.29.29.29
![](http://static.javashuo.com/static/loading.gif)
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="f9fc5929-8594-466e-a041-34caee8c1e32" DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.11.132 NETMASK=255.255.255.0 GATEWAY=192.168.11.1 DNS1=119.29.29.29
![](http://static.javashuo.com/static/loading.gif)
# Generated by NetworkManager nameserver 119.29.29.29
![](http://static.javashuo.com/static/loading.gif)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.11.132 slave 192.168.11.131 master
關閉服務器安全策略
![](http://static.javashuo.com/static/loading.gif)
關閉firewalld systemctl disable firewalld systemctl stop firewalld 關閉iptables iptables -F 關閉selinux
安裝saltstack
salt軟件包須要epel源的支持,那麼下載
EPEL的全稱叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社區打造,爲 RHEL 及衍生髮行版如 CentOS、Scientific Linux 等提供高質量軟件包的項目。裝上了 EPEL以後,就至關於添加了一個第三方源。
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空緩存
yum makecache #生成yum緩存
安裝好epel源就能夠開始安裝salt了
查看salt包
yum list salt
安裝salt-master yum install salt-master -y
安裝salt-minion
yum install salt-minion -y
salt端口
安裝好salt以後開始配置,salt-master默認監聽兩個端口:
4505 publish_port 提供遠程命令發送功能 4506 ret_port 提供認證,文件服務,結果收集等功能 確保客戶端能夠通訊服務器的此2個端口,保證防火牆容許端口經過。所以在測試環境直接關閉防火牆。
配置文件
salt-master的配置文件是/etc/salt/master salt-minion的配置文件是/etc/salt/minion 配置文件中包含了大量可調整的參數,這些參數控制master和minion各個方面
配置salt-master
![](http://static.javashuo.com/static/loading.gif)
# salt運行的用戶,影響到salt的執行權限 user: root #s alt的運行線程,開的線程越多通常處理的速度越快,但通常不要超過CPU的個數 worker_threads: 10 # master的管理端口 publish_port : 4505 # master跟minion的通信端口,用於文件服務,認證,接受返回結果等 ret_port : 4506 # 若是這個master運行的salt-syndic鏈接到了一個更高層級的master,那麼這個參數須要配置成鏈接到的這個高層級master的監聽端口 syndic_master_port : 4506 # 指定pid文件位置 pidfile: /var/run/salt-master.pid
超哥的salt-master文件
[root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$ interface: 0.0.0.0 #綁定到本地的0.0.0.0地址 publish_port: 4505 #管理端口,命令發送 user: root #運行salt進程的用戶 worker_threads: 5 #salt運行線程數,線程越多處理速度越快,不要超過cpu個數 ret_port: 4506 #執行結果返回端口 pidfile: /var/run/salt-master.pid #pid文件位置 log_file: /var/log/salt/master #日誌文件地址
#自動接收minion的key
auto_accept: False
![](http://static.javashuo.com/static/loading.gif)
# minion的識別ID,能夠是IP,域名,或是能夠經過DNS解析的字符串 id: slave # salt運行的用戶權限 user: root # master的識別ID,能夠是IP,域名,或是能夠經過DNS解析的字符串 master : master # master通訊端口 master_port: 4506 # 備份模式,minion是本地備份,當進行文件管理時的文件備份模式 backup_mode: minion # 執行salt-call時候的輸出方式 output: nested # minion等待master接受認證的時間 acceptance_wait_time: 10 # 失敗重連次數,0表示無限次,非零會不斷嘗試到設置值後中止嘗試 acceptance_wait_time_max: 0 # 從新認證延遲時間,能夠避免由於master的key改變致使minion須要從新認證的syn風暴 random_reauth_delay: 60 # 日誌文件位置 log_file: /var/logs/salt_minion.log
超哥的satl-minion文件
[root@slave ~]# grep -v ^# /etc/salt/minion|grep -v ^$ master: master master_port: 4506 user: root id: slave acceptance_wait_time: 10 log_file: /var/log/salt/minion
啓動salt-master和salt-minion
systemctl start salt-minion systemctl start salt-master
#檢查salt狀態
systemctl status salt-minion
systemctl status salt-master
在master上接收minion祕鑰
在minion啓動後鏈接master會請求master爲其簽發證書,等待證書籤發完成後,master能夠信任minion,而且minion和master之間的通訊是加密的。
在salt-master執行
salt-key命令用於管理mionion祕鑰
[root@master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
slave #此時已經出現slave
Rejected Keys:
此時slave已經出如今unaccepted keys中,說明minion已經和master聯繫,而且master已經獲取了minion的公鑰,等待下一步指令。
檢查master和minion的祕鑰匹配
在master上執行
[root@master ~]# salt-key -f slave Unaccepted Keys: slave: 0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea
而後能夠在minion上獲取minion的祕鑰
[root@slave ~]# salt-call --local key.finger local: 0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea
所以可確認祕鑰匹配,在master上接收祕鑰
[root@master ~]# salt-key -a slave The following keys are going to be accepted: Unaccepted Keys: slave Proceed? [n/Y] y Key for minion slave accepted.
確認接收祕鑰後,檢驗minion祕鑰是否被接收
[root@master ~]# salt-key -L
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:
祕鑰接收完成後,就能夠執行第一條salt啦
第一條salt命令
[root@master ~]# salt '*' test.ping slave: True
這是條很簡單的探測minion主機存活命令,也是遠程執行命令,咱們經過master發送消息給"*"全部的minion,而且告訴他們運行salt內置的命令(也是python模塊中的一個函數),返回true表示slave機器監控存活。