寫在前面:
更該主機名,方便識別。更爲了其他的方便。本次採用兩臺服務器測試。master端也同樣可以安裝minion作爲客戶端被管理。如果後續有需求,可以多增加幾臺服務器,或者虛擬機做測試。千萬別用線上服務器。萬一出問題就麻煩了。業務就掛了
Saltstack(中國用戶組www.saltstack.cn)
基於python開發,c/s架構,支持多平臺,比puppet輕量,在遠程執行命令時非常快捷,配置和使用比puppet容易,能實現puppet幾乎所有的功能。
三種工作方式: 本地, c/s, 基於ssh(不用安裝agent)
三大功能: 遠程命令執行,配置管理(服務,文件,cron,用戶,組),雲管理
支持系統:大多數都支持,windows上不支持安裝master
參考博客:http://daixuan.blog.51cto.com/5426657/1899160
實驗主機:
centos6.7-4: 192.168.1.110 作爲master端
centos6.7-3: 192.168.1.107 作爲minion端
主機名最好更改一下:
master端:
vim /etc/sysconfig/network
HOSTNAME=master
vim /etc/hosts
192.168.1.110 master
minion端:
vim /etc/sysconfig/network
HOSTNAME=minion
vim /etc/hosts
192.168.1.107 minion
1.2.2 yum方式安裝(採用epel源)
兩臺機器最好更改一下/etc/hosts地址 保證可以ping通
master端安裝:
rpm -ivh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install salt-master //安裝salt-master
service salt-master start //啓動salt-master
ss -antlup | egrep "4505|4506" //查看端口 或者
ps -ef | grep salt-master
vim /etc/salt/master
auto_accept: True //可選,key通過‘salt-key -a keyname’命令手動進行認證
minon端安裝:
rpm -ivh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install salt-minion //安裝salt-minion
更改minion配置文件:
vim /etc/salt/minion
或者sed命令更改:
sed -i 's/#master: salt/master: 192.168.1.110/g' /etc/salt/minion //增加master主機的配置,把ip指向master的ip。如果配置成主機名的話,需要在/etc/hosts文件中master主機對應的IP ,如果使用內部DNS的例外,可以在內部DNS上的統一配置。
注意:192.168.1.110就是master服務器端的ip地址,master: 的後面有一個空格,空格後面纔是ip地址,如果沒有空格會提示出錯 後面配置minion的ip也是一樣有一個空格
沒有空格出現錯誤,錯誤如下:
Starting salt-minion daemon: [ERROR ] Error parsing configuration file: /etc/salt/minion - while scanning a simple key
in "<string>", line 44, column 1:
id:host172
^
could not found expected ':'
in "<string>", line 46, column 1:
# Append a domain to a hostname ...
^
找到#id 改成
id: minion_192.168.1.102 //id後面這個名字可以自己取,最好別太複雜。這個ip是minion端的ip地址,爲了方便,我就用minion加上minion端的ip來命名了
還可以改成minion然後用ip的最後一段,如 minion102這樣
或者用sed更改 如下:
sed -i 's/#id:/id: minon_192.168.1.102/g' /etc/salt/minion
service salt-minion start //啓動salt-minion
ss -antlu | egrep "4505|4506" //查看salt-minion端口
ps -ef | grep salt-minion
注意: ID如果不指定的話,salt通過socket.getfqdn()來獲取主機的名稱來作爲標識,指定給ID,作爲minion與master交互的身份標識
更改完salt-minion配置文件以後,一定要重啓salt-minion,否則 在master端進行salt-key -A進行認證key的時候不能認證通過,會發現沒有認證的key
netstat -antlp | grep 4505 確保消息發佈端口正常
netstat -antlp | grep 4506 確保客戶端與服務端通信端口正常
salt-master -l debug debug模式,查看salt都進行哪些操作
2. key認證
server上執行:
salt-key -a minion #這裏minion就是minion配置文件設置的id,-a指定具體的某一臺minion客戶端服務器
認證完後,此時我們在minion端的 /etc/salt/pki/minion 目錄下面會多出一個minion_master.pub 文件
可以使用 salt-key 命令查看到已經簽名的客戶端
salt-key 可以使用-A簽名所有主機,也可以使用-d刪除指定主機的key
salt-key的使用實例:
更多證書管理方法 使用:salt-key --help 查看 下面會有列出
# 顯示所有minion的認證信息
salt-key -L
# 接受192.168.0.100的認證信息 -a指定具體key
salt-key -a 192.168.0.100
# 接受192.168.0.100的認證信息,不需要手動驗證
salt-key -a 192.168.0.100 -y
# 接受192.168.0.100的認證信息,即使該minion是Rejected Keys狀態
salt-key -a 192.168.0.100 --include-all
# 接受所有 Unaccepted Keys 狀態的minion的認證信息
salt-key -A 或者 salt-key -A -y
# 拒絕認證192.168.0.100
salt-key -d 192.168.0.100
# 拒絕所有 Unaccepted Keys 狀態的minion
salt-key -D #這樣就刪除了所有認證,最好不要做。但是刪除了所有的認證以後,如果在此執行salt-key -A -L 會看到沒有任何一個認證的key。 需要重啓所有服務器上的minion,否則就會一直沒有key被認證。
可以 salt-key * 一下 # *號 代表所有
*************查看哪些服務器的minion掛了****************
salt-run manage.status
3. 遠程執行
示例1: salt '*' test.ping 這裏的*表示所以已經簽名的客戶端,也可以指定其中一個
示例2: salt '*' cmd.run 'df -h'
說明1: 這裏的*必須是在master上已經被接受過的客戶端,可以通過salt-key查到,通常是我們已經設定的id值。關於這部分內容,它支持通配、列表以及正則。 比如兩臺客戶端 web10 web11, 那我們可以寫成 salt 'web*' salt 'web1[02]' salt -L 'web10,web11' salt -E 'web(10|11) 等形式,使用列表,即多個機器用逗號分隔,而且需要加-L,使用正則必須要帶-E選項。 它還支持grains,加-G選項,後面會介紹到。
其他安裝方式:
1.2.3 pip方式安裝
master端安裝:
pip install salt
mkdir /etc/salt/;wget -O /etc/salt/master https://github.com/saltstack/salt/blob/develop/conf/master
salt-master -d
minion端安裝:
pip install salt
mkdir /etc/salt/;wget -SO /etc/salt/minion https://github.com/saltstack/salt/blob/develop/conf/minion
sed -i ‘s/#master: salt/master: IPADDRESS/g’/etc/salt/minion
#IPADDRESS是master服務器的ip地址
salt-minion -d
1.2.4源碼安裝
master端安裝:
git clone https://github.com/saltstack/salt.git
pip install -r salt/requirements/zeromq.txt
mkdir /etc/salt/; cp salt/conf/master /etc/salt
salt-master -d
minion端安裝:
git clone https://github.com/saltstack/salt.git
pip install -r salt/requirements/zeromq.txt
python salt/setup.py install
mkdir /etc/salt/; cp salt/minion /etc/salt/
sed -i ‘s/#master: salt/master: IPADDRESS/g’ /etc/salt/minion
注意:IPADDRESS爲master的ip地址
由於saltstack軟件依賴包比較多,我們不建議用源碼編譯安裝每個依賴包的方式全裝,所以這裏採用pip安裝方式去安裝依賴包。如果想學編譯安裝,百度上有很多教程
1.2.5 salt-bootstrap安裝
salt-bootstrap是saltstack的一個單獨項目,該項目主要用於解決多平臺意見不熟saltstack環境。核心工程就是維護一個龐大的bash腳本
master端安裝:
curl -L https://bootstrap.saltstack.com -o install_salt.sh
sh install_salt.sh -M -N #只安裝最新版master
minion端安裝:
echo “IPADDRESS salt” >> /etc/hosts #IPADDRESS爲master服務器的地址
curl -L https://bootstrap.saltstack.com -o install_salt.sh
sh install_salt.sh -i minion #只安裝最新版minion並且指定minion id
關於salt-bootstrap腳本參數可以運行 sh install_salt.sh -h 查看,改腳本也提供非常方便的一鍵部署參數
----------部署環境完成,本人用epel方式進行yum安裝的--------
1.3.1 證書管理
[root@master ~]# salt-key -L //查看當前證書籤證情況
Accepted Keys: 已接收的密鑰
Denied Keys: 被決絕的密鑰
Unaccepted Keys: 未接受的密鑰
Rejected Keys: 被丟棄的密鑰
[root@master ~]# salt-key -A –y //同意簽證所有沒接收的簽證請求
提示告訴我們:沒有未簽證的主機(因爲我們只有一臺master一臺minion,minion接受簽證了)
運行第一條saltstack命令,檢測master和minion之間通信是否正常
salt '*' test.ping
更多證書管理命令可以通過salt-key -h查看
-l 顯示指定狀態的key(支持正則表達式)
-L 顯示所有public keys
-a 接受制定等待恩正的key(支持正則表達式)
-A 接受所有等待認證的key
-r 拒絕等待認證的key(支持正則表達式)
-R 拒絕所有等到認證的key,
--include-all 顯示所有狀態的key(包含non-pending狀態)
-p(小寫的) 打印指定的public key(支持正則表達式)
-P(大寫的) 打印所有的public key
-d 刪除指定的key
-D 刪除所有key
-f 顯示指定的key指紋信息(支持正則表達式)
-F 現實所有key指紋信息
第一條測試命令:
salt 'minion_192.168.1.107' test.ping
1.3.2 日常命令參數
查看安裝的時候分別安裝了那些命令(yum安裝方式)
[root@master ~]# rpm -ql salt-master
/etc/rc.d/init.d/salt-master //salt-master服務啓動腳本
/etc/salt/master //salt master配置文件
/usr/bin/salt //salt master核心操作命令
/usr/bin/salt-cp //salt 文件傳輸命令
/usr/bin/salt-key //salt 證書管理命令
/usr/bin/salt-master //salt master服務命令
/usr/bin/salt-run //salt master runner命令
/usr/bin/salt-unity
………