集中化管理平臺saltstack--原理及部署(1)
簡介
SaltStack是一個伺服器基礎架構集中化管理平臺,具備配置管理、遠端執行、監控等功能,一般可以理解為簡化版的puppet和加強版的func。SaltStack基於Python語言實現,結合輕量級訊息佇列(ZeroMQ)與Python第三方模組(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)構建。有如下特性:
(1)、部署簡單、方便;
(2)、支援大部分UNIX/Linux及Windows環境;
(3)、主從集中化管理;
(4)、配置簡單、功能強大、擴充套件性強;
(5)、主控端(master)和被控端(minion)基於證書認證,安全可靠;
(6)、支援API及自定義模組,可通過Python輕鬆擴充套件。
通過部署SaltStack環境,我們可以在成千上萬臺伺服器上做到批量執行命令,根據不同業務特性進行配置集中化管理、分發檔案、採集伺服器資料、作業系統基礎及軟體包管理等,SaltStack是運維人員提高工作效率、規範業務配置與操作的利器。
SaltStack master啟動後預設監聽4505和4506兩個埠。4505(publish_port)為saltstack的訊息釋出系統,4506(ret_port)為saltstack被控端與服務端通訊的埠。如果使用lsof 檢視4505埠,會發現所有的minion在4505埠持續保持在ESTABLISHED狀態。minion與master之間的通訊模式如下:
被控端直接於主控端的zeromq建立長連線,接收廣播到的任務訊息並執行。即在主控端配置iptables規則:
iptables -I INPUT -m state --state new -m tcp -p tcp --dport 4505 -j ACCEPT
iptables -I INPUT -m state --state new -m tcp -p tcp --dport 4506 -j ACCEPT
saltstack認證原理:
1)、minion在第一次啟動時,會在/etc/salt/pki/minion/(該路徑在/etc/salt/minion裡面設定)下自動生成minion.pem(private key)和 minion.pub(public key),然後將 minion.pub傳送給master。
2)、master在接收到minion的public key後,通過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會存放以minion id命名的 public key,然後master就能對minion傳送指令了。
依賴情況:
SaltStack的通訊模式分為2種模式:ZeroMQ、REAT,鑑於REAT目前還不是太穩定,選擇ZeroMQ模式。
安裝
本例採用centos6。5預設的Python2。6。6。。若更改Python版本,同時要修改# vim /usr/bin/yum。
此處僅介紹通過yum安裝saltstack。
預設的yum 源沒有saltstack包,需要改為epel 源。
https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
若安裝時出現報錯:
Error: Package: salt-2015.5.10-2.el6.noarch (epel)
Requires: python-requests
Error: Package: salt-2015.5.10-2.el6.noarch (epel)
Requires: PyYAML
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
需要在/etc/yum.repos.d/加上centos自帶的yum源--CentOS-Base.repo。
master端安裝:yum -y install salt-master
chkconfig salt-master on
minion端安裝:yum -y install salt-minion
chkconfig salt-minion on
調整salt配置並檢驗
注:saltstack的配置檔案格式都是YAML 的,配置的時候需要注意語法
master端:
vi /etc/salt/master
interface: masterIP #繫結master通訊IP。
auto_accept: True #設為自動認證,避免繁瑣的手動執行salt-key確認證書信任。
file_roots: #指定salt檔案根目錄的位置
base:
- /srv/salt
更改完成後啟動該服務
minion端:
vi /etc/salt/minion
master: masterIP #繫結master主機IP地址。
id: JYD-test-2 #更改被控端主機識別id,建議用主機名來配置
更改完成後啟動該服務
應用
salt-key -L # 顯示當前所有被控端id
-D 刪除所有認證id
-d id 刪除某個id證書
-A 接受所有id證書請求
-a id 接受某個id證書請求
salt '*' test.ping # 測試所有主機的連通性(此處*為萬用字元)
salt -E '^JYD-test.*' cmd.run 'free -m' # -E使用正則,cmd.run執行遠端命令
-L 以主機id名列表的形式操作部分主機
-G 根據被控主機的grains過濾(後續詳細介紹)
-I 根據被控主機的pillar過濾 (後續詳細介紹)
-N 根據分組名稱過濾(分組在/etc/salt/master裡定義)
-C 根據條件符not and or 匹配
-S 根據被控主機的IP或子網匹配
轉載於:https://blog.51cto.com/jinyudong/1900247