1、簡介
SaltStack是一個服務器基礎架構集中化管理平臺,具備配置管理、遠程執行、監控等功能,一般可以理解爲簡化版的puppet和加強版的func。SaltStack基於Python語言實現,結合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)構建。通過部署SaltStack環境,我們可以在成千上萬臺服務器上做到批量執行命令,根據不同業務特性進行配置集中化管理、分發文件、採集服務器數據、操作系統基礎及軟件包管理等,SaltStack是運維人員提高工作效率、規範業務配置與操作的利器。
2、特性
(1)、部署簡單、方便;
(2)、支持大部分UNIX/Linux及Windows環境;
(3)、主從集中化管理;
(4)、配置簡單、功能強大、擴展性強;
(5)、主控端(master)和被控端(minion)基於證書認證,安全可靠;
(6)、支持API及自定義模塊,可通過Python輕鬆擴展。
(注:辦公網中,有一個暫時的測試環境,
master:172.22.2.193
minion:172.22.2.193,172.22.2.194,172.22.2.195,172.22.2.198
)
3、安裝
注:以下安裝方式針對centos7
(參考網址:http://repo.saltstack.com/[email protected]#rhel)
1)master安裝
sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-2015.8-2.el7.noarch.rpm
sudo yum install salt-master
sudo yum install salt-minion
#sudo yum install salt-ssh
#sudo yum install salt-syndic
#sudo yum install salt-cloud
#sudo yum install salt-api
(#根據需要安裝)
2)minion安裝
sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-2015.8-2.el7.noarch.rpm
sudo yum install salt-minion
4、簡單配置
salt的配置文件一般在/etc/salt
1)master配置
vi /etc/salt/master
更改日誌等級:將log_level和log_level_logfile的warning 改爲debug
更改interface:更改爲本機IP地址
2)minion配置
vi /etc/salt/minion
配置master地址:設ip或域名(最好域名)
配置minion名稱:自己命名,一般設ip或域名(以更好區分)
3)master與minion連接
配置完後,所有minion執行salt-minion重啓,在master上執行‘salt-key L' ,可以看到主機的key管理,執行’salt-key -A' 接受所有的key
至此,salt的基本環境已經搭建好了。
4)測試連接
SaltStack master啓動後默認監聽4505和4506兩個端口。4505(publish_port)爲saltstack的消息發佈系統,4506(ret_port)爲saltstack客戶端與服務端通信的端口。如果使用lsof 查看4505端口,會發現所有的minion在4505端口持續保持在ESTABLISHED狀態
或者使用以下命令測試連接,所有minion顯示true
5、salt常用模塊簡單用法
模塊詳細用法見官網說明
1)工作目錄設置
2)cp模塊(實現遠程文件、目錄的複製,以及下載URL文件等操作)
將主服務器file_roots指定位置下的目錄複製到被控主機
salt '*' cp.get_dir salt://hellotest /data
將主服務器file_roots指定位置下的文件複製到被控主機
salt '*' cp.get_file salt://hellotest/rocketzhang /root/rocketzhang
下載指定URL內容到被控主機指定位置
salt '*' cp.get_url http://xxx.xyz.com/download/0/files.tgz /root/files.tgz
3)cmd模塊(實現遠程的命令行調用執行)
salt '*' cmd.run 'netstat -ntlp'
4)sls用法
祥見官網,或者參考後面應用場景舉例
6、salt其他設置
1)minion分組設置
master配置文件中設置,比如:
分組之後,可以針對分組進行批量配置,比如:
2)return設置
return是指salt系統對執行minion後返回的數據進行存儲或返回給其他程序,在本環境中,採用mysql進行存儲,在master中安裝mysql數據庫。
可以參考官網教程:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html
舉例:
在mysql數據庫中可以看到執行結果
設置步驟:
a)master設置
master安裝mysql數據庫,並創建salt數據庫。後續參考官網設置步驟如下:
直接複製以下命令行執行, 創建表。
DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
`jid` varchar(255) NOT NULL,
`load` mediumtext NOT NULL,
UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX jid ON jids(jid) USING BTREE;
DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
`fun` varchar(50) NOT NULL,
`jid` varchar(255) NOT NULL,
`return` mediumtext NOT NULL,
`id` varchar(255) NOT NULL,
`success` varchar(10) NOT NULL,
`full_ret` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY `id` (`id`),
KEY `jid` (`jid`),
KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
b)minion設置
minion配置文件中添加一下內容
c)minion安裝msyql-python模塊
d)測試正確與否
無報錯即可。
7、salt應用場景簡單舉例
以下例子都是很簡單的salt應用,複雜場景待更新或自行學習。
1)DNS設置
在/srv/salt/base/中,創建init/files/用於放置配置文件resolv.conf
在配置文件中設置好dns地址
在init中創建sls文件
dns.sls文件內容如下:
給所有minon執行dns同步,執行結果: