在生產環境中,服務器往往不只一臺,有可能是成千上萬臺。對於運維人員來說,如果單獨對每一臺服務器進行管理,工作難度實在是太大了。SaltStack是一個服務器基礎設施管理工具,它具有配置管理,遠程執行,監控等功能。SaltSack有Python語言編寫,是非常簡單易用和輕量級的管理工具
SaltStack原理
SaltStack由Master和Minion構成,master是服務端,表示一臺服務器;minion是客戶服務端,表示多臺服務器。在master上發送命令給minion,minion就會執行相應的命令。master與minion之間是通過ZeroMQ(消息隊列)進行通信的。
SaltStack的master端監聽4505與4506端口,4505爲master和minion認證通信端口,4506爲master用來發送命令或者接受minion的命令執行返回信息。
當客戶端啓動後,會主動連接master端註冊,然後一直保持該TCP連接,而master通過這條TCP連接對客戶端進行控制,如果連接斷開,master對客戶端將不能進行控制,但是,當客戶端檢查到連接斷開後,會定期向master端請求註冊連接。
SaltStack常用模塊
SaltStack提供了非常多的功能模塊,以便於對操作系統的基礎功能和常用工具的操作
(1)pkg模塊
pkg模塊的作用是包管理,包括增刪更新
(2)file模塊
file模塊的作用是管理文件操作,包括同步文件,設置文件權限和所屬用戶組,刪除文件等操作
(3)cmd模塊
cmd模塊的作用是在minion上執行命令或者腳本
(4)user模塊
user模塊的作用是管理系統帳號操作
(5)service模塊
service模塊的作用是管理系統服務操作
(6)cron模塊
cron模塊的作用是管理cron服務操作
部署環境介紹
角色 主機名 IP master master.saltstack.com 192.168.195.147 minion web01.saltstack.com 192.168.195.167 minion web02.saltstack.com 192.168.195.168
SaltStack安裝部署
修改三臺服務器主機名
hostnamectl set-hostname master.saltstack.com //在master修改
hostnamectl set-hostname web01.saltstack.com
hostnamectl set-hostname web02.saltstack.com
修改三臺hosts文件(內容相同)
vim /etc/hosts
192.168.195.147 master.saltstack.com
192.168.195.167 web01.saltstack.com
192.168.195.168 web02.saltstack.com
init 6 //分別重啓系統 讓各主機名生效
安裝saltstack
重啓之後將三臺服務器的防火牆關閉,selinux功能關閉
systemctl stop firewalld.service
setenforce 0
分別爲三臺機器添加epel源,本地有官方源
yum install epel-release -y #安裝epel源
master上安裝saltsatck服務端
yum install salt-master -y #安裝 master salt 服務
安裝好之後修改配置文件
vim /etc/salt/master
第15行
interface: 192.168.195.147 # master 監控地址
第215行
auto_accept: True #開啓 避免要運行salt-key來確認證書認證,自動授權同意
第416行
file_roots: #開啓saltstack文件根目錄位置,存放文件
base:
- /srv/salt #默認文件夾不存在,需要創建
第710行529GG
nodegroups:
group1: 'web01.saltstack.com' #指定被控制服務器主機名
group2: 'web02.saltstack.com'
第552行
pillar_opts: True #開啓pillar功能
第529行
pillar_roots: #pillar的主目錄,存放動態信息
base:
- /srv/pillar #默認文件夾不存在,需要創建
mkdir /srv/salt #創建
mkdir /srv/pillar
cat /etc/salt/master | grep -v ^$ | grep -v ^# #查看配置文件修改內容
systemctl start salt-master.service #開啓服務
netstat -antp | egrep '4505|4506' #查看 4505 4506 端口是否打開
被管理端minion上的部署配置
兩臺minion上安裝saltstack客戶端
yum -y install salt-minion #安裝 minion salt 服務
安裝好之後修改配置文件
vim /etc/salt/minion
第16行
master: 192.168.195.147 #指向 master IP地址
第78行
和master配置文件中節點服務器名稱統一
id:web01.saltstack.com #節點一上修改
id:web02.saltstack.com #節點二上修改
啓動被監控主機服務
systemctl start salt-minion.service
在監控端master查看管理的主機
salt-key list #查看被控主機
在主控端測試與被控端的通信狀態!
salt '*' test.ping 測試與被管理端是否網絡連通
salt '*' cmd.run 'df -h' //遠程執行命令
查看被控主機上grains所有值:(每次minion在啓動是都會獲取客戶端信息)
salt 'web01.saltstack.com' grains.items (靜態數據)
salt 'web01.saltstack.com' pillar.items (動態數據)
配置管理安裝Apache
下面進行的演示是遠程通過 yum 方式安裝 Apache。步驟如下:
修改配置文件
vi /etc/salt/master // 打開如下內容的註釋
file_roots:
base:
- /srv/salt/
注意:環境: base、dev(開發環境)、test(測試環境)、prod(生產環境)
vi /srv/salt/top.sls
base:
'*':
- apache
注意:'*',則表示在所有的客戶端執行 apache 模塊。
vi /srv/salt/apache.sls
apache-service:
pkg.installed:
- names: // 如果只有一個服務,那麼就可以寫成 –name: httpd 不用再換一行
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
注意:apache-service 是自定義的 id 名。pkg.installed 爲包安裝函數,下面是要安裝的包的名字。service.running 也是一個函數,來保證指定的服務啓動,enable 表示開機啓動。
重啓服務
systemctl restart salt-master
執行命令
salt '*' state.highstate
在minion上查看apache服務是否安裝成功