[自動化] Saltstack服務配置詳解
Saltstack 是一個服務器基礎設施管理工具,它具有配置管理、遠程執行、監控等功能。Saltstack由Python語言編寫,基於 C/S 架構,即服務端 master 和客戶端 minions,Master和 Minion之間是通過 Zeromq(消息隊列)進行通信的 ;適合大規模批量管理服務器。
Saltstack 常用模塊
(1)pkg模塊:包管理,包括增刪更新
(2)file模塊:管理文件操作,包括同步文件、設置文件權限和所屬用戶組、刪除文件等。
(3)cmd模塊:在Million上執行命令或者腳本。
(4)user模塊:管理系統賬戶操作。
(5)service模塊:管理系統服務操作。
(6)cron模塊:管理cron服務操作。
saltstack安裝
1.準備工作
準備三臺機器,這三臺機器都關閉selinux以及防火墻
setenforcr 0
systemctl stop firewalld.service
systemctl disable firewalld.service
master服務器 (192.168.100.143)
minion服務器 (192.168.100.144 192.168.100.145)
2.編輯hosts文件(三臺都配置)
vim /etc/hosts 192.168.100.143 master.saltstack.com 192.168.100.144 web01.saltstack.com 192.168.100.145 web02.saltstack.com
3.分別修改各自的主機名
vim /etc/hostname
master.saltstack.com #master服務器
web01.saltstack.com #million服務器1
web02.saltstack.com #million服務器1
配置完成,重啟生效,再次關閉selinux。
4.安裝
(1)服務端
yum install -y epel-release #安裝epel源
yum install -y salt-master
(2)客戶端
yum install -y epel-release #安裝epel源 yum install -y salt-minion
5.配置服務端配置文件(/etc/salt/master)
vim /etc/salt/master
interface: 192.168.100.143 #第15行,修改監聽地址為本機地址
auto_accept: True #第215行,主服務器會自動認證被控端的認證,只要被控端在設置完主服務器的IP地址後啟動服務,主服務器就會允許被控端自動認證,以避免以後每次都要運行salt-key來確認認證書信任。
file_roots:
base:
- /srv/sale
#第416行,去掉註釋。開啟saltstack文件根目錄位置,註意這個目錄默認沒有創建,需要自己手動創建。
nodegroups:
group1: ‘web01.saltstack.com‘
group2: ‘web02.saltstack.com‘ #第710行,配置組分類
pillar_opts: True #第552行,開啟pillar功能,同步文件功能
pillar_roots:
base:
- /srv/pillar #第529行,去掉註釋,pillar的主目錄,需要自己創建
6.創建salt與pillar文件根目錄
mkdir /srv/salt
mkdir /srv/pillar
7.啟動salt-master服務
systemctl start salt-master
systemctl enable salt-master
8.配置million客戶端配置文件(/etc/salt/minion)
vim /etc/salt/minion
master: 192.168.100.143 ##第16行,指定master服務器的IP
id: web01.saltstack.com #註意冒號要有空格 ##第78行,指定客戶端主機名,另一臺是web02.saltstack.com
9.分別啟動兩臺客戶端服務
systemctl start salt-minion
10.測試
(1)查看在主服務器上已經被接受過的客戶端
salt-key
(1)測試連接服務端和客戶端的通信狀態
##在主服務器端進行操作
salt ‘*‘ test.ping
web01.saltstack.com:
True
web02.saltstack.com:
True
(2)測試遠程執行命令
##在主服務器端進行操作
salt ‘*‘ cmd.run ‘hostname‘ ##遠程執行命令
Saltstack的三大組件
1.grains
grains 是在 minion(客戶端)啟動時收集到的一些信息,比如操作系統類型、網卡ip等,它更適合做一些靜態的屬性值的數據采集 。
使用命令:
salt ‘web01.saltstack.com‘ grains.ls //列出所有的 grains 項目名字
salt ‘web01.saltstack.com‘ grains.items //列出所有的 grains 項目名以及值
grains在遠程執行命令時也很方便,示例如下:
salt -G os:CentOS cmd.run ‘hostname‘
2.pillar
pillar 和 grains 不一樣,是在 master 上定義的,並且是針對 minion 定義的一些信息。像一些比較重要的數據(密碼)可以存在 pillar 裏,還可以定義變量等。
salt ‘web01.saltstack.com‘ pillar.items #查看指定minion的 pillar值
綜上所述,如果你想定義的屬性值是經常變化的,就采用pillar:如果很固定、不易變,就采用 grains。
3.state
state組件是SaltStack的核心功能,通過預先定制好的sls文件對被控端主機進行狀態管理,如程序包、文件、網路配置、系統服務、系統用戶等。state的定義也是通過編寫sls文件進行操作的。
示例一:通過saltstack遠程安裝apache
1.創建入口文件top.sls
mkdir /srv/salt #配置文件中需要開啟
vim /srv/salt/top.sls #創建入口文件,入口文件的作用是定義pillar 的數據覆蓋被控主機的有效範圍
base:
‘*‘:
- apache
2.創建pillar入口文件apache.sls
vim /srv/salt/apache.sls
apache: #這裏是自定義的名稱
pkg.installed: #安裝包
- names:
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
3.重啟服務端服務
systemctl restart salt-master
4.執行命令
salt ‘*‘ state.highstate ##執行並刷新state配置命令
這樣就可遠程安裝apache服務了
示例二:文件目錄管理
1、文件管理
(1)接著編輯之前的 top.sls 文件
vim /srv/salt/top.sls #修改為如下
base:
‘web02.saltstack.com‘:
- file
(2)新建 file.sls 文件
vim /srv/salt/file.sls
file-test: #自定義
file.managed:
- name: /opt/file.txt #指定遠程客戶端要生成的文件。
- source: salt://test/abc/1.txt #源文件
- user: root
- group: root
- mode: 644
(3)新建所要測試的源文件
mkdir -p /srv/salt/test/abc/
vim /srv/salt/test/abc/1.txt
test-test-test
(4)重啟服務端服務
systemctl restart salt-master
(5)執行命令
salt ‘web02.saltstack.com‘ state.highstate ##執行並刷新state配置命令
2、目錄管理
(1)接著編輯之前的 top.sls 文件
vim /srv/salt/top.sls #修改為如下
base:
‘web02.saltstack.com‘:
- dir
(2)新建 dir.sls 文件
vim /srv/salt/dir.sls
file-dir:
file.recurse:
- name: /opt/dir
- source: salt://test1/a
- user: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
- clean: True
註意:clean: True 源刪除文件或目錄,目標也會跟著刪除,否則不會刪除。可以默認設置為 False。
(3)新建所要測試的源目錄
mkdir -p /srv/salt/test1/a
vim /srv/salt/test1/a/0.txt
12345678
(4)重啟服務端服務
systemctl restart salt-master
(5)執行命令
salt ‘web02.saltstack.com‘ state.highstate ##執行並刷新state配置命令
示例三:遠程執行
1.遠程執行命令
(1)接著編輯之前的 top.sls 文件
vim /srv/salt/top.sls #修改為如下
base:
‘web01.saltstack.com‘:
- cmd
(2)新建 cmd.sls 文件
vim /srv/salt/cmd.sls
cmd-test:
cmd.run:
- onlyif: test -f /opt/123.txt
- names:
- touch /opt/cmdtest.txt
- mkdir /opt/cmdtest
- user: root
(3)在web01.saltstack.com主機上創建/opt/123.txt
touch /opt/123.txt
(4)重啟服務端服務
systemctl restart salt-master
(5)執行命令
salt ‘web01.saltstack.com‘ state.highstate ##執行並刷新state配置命令
2.遠程執行腳本
(1)接著編輯之前的 top.sls 文件
vim /srv/salt/top.sls #修改為如下
base:
‘web01.saltstack.com‘:
- shell
(2)新建 shell.sls 文件
vim /srv/salt/shell.sls
shell-test:
cmd.script:
- source: salt://test/1.sh
- user: root
(3)新建 1.sh 腳本文件
vim /srv/salt/test/1.sh
#!/bin/bash
echo "hello" > /opt/123.txt
(4)重啟服務端服務
systemctl restart salt-master
(5)執行命令
salt ‘web01.saltstack.com‘ state.highstate ##執行並刷新state配置命令
示例四:管理任務計劃
1.建cron計劃
(1)接著編輯之前的 top.sls 文件
vim /srv/salt/top.sls #修改為如下
base:
‘web02.saltstack.com‘:
- cron
(2)新建 cron.sls 文件
vim /srv/salt/cron.sls
cron-test:
cron.present:
- name: /bin/touch /opt/111.txt
- user: root
- minute: ‘*‘
- hour: 0
- daymonth: ‘*‘
- month: ‘3,5‘
- dayweek: ‘*‘
(3)重啟服務端服務
systemctl restart salt-master
(4)執行命令
salt ‘web02.saltstack.com‘ state.highstate ##執行並刷新state配置命令
2.刪除 cron
只需修改 cron.sls 文件,
把 cron.present: 改成 cron.absent即可。然後重啟服務,執行並刷新state配置命令。
vim /srv/salt/cron.sls
cron-test:
cron.absent:
- name: /bin/touch /opt/111.txt
- user: root
- minute: ‘*‘
- hour: 0
- daymonth: ‘*‘
- month: ‘3,5‘
- dayweek: ‘*‘
systemctl restart salt-master
salt ‘web02.saltstack.com‘ state.highstate ##執行並刷新state配置命令
[自動化] Saltstack服務配置詳解