salt介紹
- salt是一個基礎平台管理工具,配置文件批量修改,文件同步
- salt是一個分布式遠程執行系統,用來在遠程節點上執行命令和查詢數據
salt的核心功能
- 是命令發送到遠程系統,而且是並行發送不是串行的
- 使用安全加密協議
- 對網絡要求比較低,使用最小最快的網絡載荷
- 提供簡單的編程接口(salt使用python開發)
salt的優點
saltstack使用python語言編寫,相當輕量級。 http://www.python.org
saltstack通訊層采用ZeroMQ PUB-SUB pattern實現,使得它很快速。http://www.zearmq.org
saltstack是開源的,通過python可以自己編寫模塊。
salt端口說明
salt-master啟動時會啟動兩個端口
- 4505:為salt的消息發布專用端口
- 4506:位客戶端與服務端通信的端口。 ---監控此端口可以監控哪些minion收到的消息,並回復了結果。
配置文件詳解 ---待整理
salt-master和salt-minion配置文件說明,待整理
官網
開發語言:python
工作方式:master/minion(ZeroMQ),Masterless,Salt-SSH(0.17+)
中文官網:www.saltstack.cn
GitHub:http://github.com/saltstack/salt
注意:
- centos5/redhat5 版本總的zeromq版本默認是2.1.9,存在keepalive bug,需要升級到3以上的版本。
- 配置文件語法要符合yaml語法,比如:冒號后面要有一個空格。
- salt要求python最低為python2.6
SaltStack通訊原理概述
Salt的KEY管理
- salt數據傳輸加密采用AES加密,同事master和minion端采用key管理;
- minion只有先被master接受(accepted)key后,才能進行管理,同事master端的pub key也會傳遞到minions上,實現更安全的雙向認證;
- keys默認保存在/etc/salt/pki目錄下;
- 管理工具:salt-key
salt命令詳解 ---待整理
salt-key
一、環境准備
1,配置yum源,---salt使用的是epel源
使用阿里雲的源:rpm -ivh http://mirrors.yun-idc.com/epel//6/x86_64/epel-release-6-8.noarch.rpm
2,規划主機,配置主機名
IP | 主機名 | 部署應用 |
10.80.0.161 | salt-masterold | salt-master |
10.80.0.162 | salt-masternew | salt-master |
10.80.0.163 | dns01 | salt-minion |
10.80.0.164 | dns02 | salt-minion |
二、在兩台master主機,安裝salt-master應用,並啟動程序
1,安裝master應用,添加開機自啟動
[root@localhost ~]#yum install –y salt-master [root@localhost ~]#chkconfig salt-master on
2,修改配置文件
#log_level: warning log_level: debug #調試時將日志級別調整為debug級別
3,啟動master程序
[root@localhost ~]#/etc/init.d/salt-master start
4,常用命令和參數
- salt-key 參數
-a | 接受指定minion | |
-A | 接受所有minion | |
-r | 拒絕指定minion | |
-R | 拒絕所有minion | |
-d | 刪除指定minion | |
-D | 刪除所有minion | |
-y | 默認yes |
三、在兩台minion主機,安裝salt-minion應用,修改配置文件,並啟動程序
1,安裝minion應用,添加開機自啟動
[root@localhost ~]#yum install –y salt-minion [root@localhost ~]#chkconfig salt-minion on
2,修改minion配置文件
[root@localhost ~]#vi /etc/salt/minion
#master: salt minion配置文件中,默認master配置的為salt,此處可以修改為master的IP地址,也可以在/etc/hosts中增加映射,此處我按照第二種方式修改 log_level: debug 調試過程日志級別修改為debug級別,生產系統可根據實際情況配置
[root@localhost ~]#vi /etc/hosts,在文件末尾增加一條記錄
10.80.0.162 salt
3,測試與master主機是否連通
[root@dns01 ~]# ping salt PING salt (10.80.0.162) 56(84) bytes of data. 64 bytes from salt (10.80.0.161): icmp_seq=1 ttl=64 time=0.351 ms 64 bytes from salt (10.80.0.161): icmp_seq=2 ttl=64 time=0.231 ms
3,啟動minion程序
[root@localhost ~]#/etc/init.d/salt-minion start
四、常見案例
1,minion修改主機名(以dns01為例)
- minion修改主機名 /etc/network
- minion刪除緩存(包括榮主機名文件和key文件) rm –rf /etc/salt/minion_id;rm –rf /etc/salt/pki
- master刪除dns01的key,salt-key –d dns01
- 重啟minion程序,/etc/init.d/salt-minion restart
------結束
注:
- 如果再master不刪除minion的key,有可能minion程序啟動后,會自動殺死自己。原因是:minion啟動后,會生成自己的key(主機名、IP地址和一些其它信息聯合生成的),當向master注冊后,會保存一個master的key。當主機名修改后自己的key會改變,如果master不刪除之前minion的key,不僅會注冊失敗,minion還會殺死自己的進程;
- minion的主機名會緩存到/etc/salt/minion_id文件里面,修改主機名后需要刪除這個文件;
2,master更換主機,所有minion遷移至新的master
思路(原理):
- 對minion而言只認master服務器上的的key與minion自己保存的master的key是否有沖突,沒有沖突就不會有問題
- minion要執向新的master的地址
操作步驟:
第一步:將masterold上的所有key文件打包上傳到masternew服務器上,解壓,然后重啟master
[root@saltmasterold]# tar -zcvf pki.tar.gz /etc/salt/pki/ [root@saltmasterold]# scp pki.tar.gz 10.80.0.162:/etc/salt/pki/ [root@saltmasternew]# cd /etc/salt/;tar -zxvf pki.tar.gz
[root@saltmasternew]#/etc/init.d/salt-master restart [root@saltmasternew]#salt-key -L Accepted Keys: dns01 dns02 Denied Keys: Unaccepted Keys: Rejected Keys:
第二步:修改所有minion配置文件,將master執向新的地址
[root@saltmaster salt]# salt '*' cmd.run "sed -i 's/162/161/g' /etc/hosts" dns02: dns01:
第三步:驗證是否修改成功
[root@saltmaster salt]# salt '*' cmd.run 'grep salt /etc/hosts' dns02: 10.80.0.161 salt dns01: 10.80.0.161 salt
第四步:重啟所有minion服務
[root@saltmaster salt]# salt '*' service.restart salt-minion dns02: True dns01: True
第五步:在masternew上驗證是否接管了所有minion
[root@masternew]# salt '*' test.ping dns01: True dns02: True
------遷移結束