Saltstack 是一個服務器基礎設施管理工具,它具備配置管理、遠程執行、監控等功能。Saltstack由Python語言編寫,基於 C/S 架構,即服務端 master 和客戶端 minions,Master和 Minion之間是經過 Zeromq(消息隊列)進行通訊的 ;適合大規模批量管理服務器。node
(1)pkg模塊:包管理,包括增刪更新linux
(2)file模塊:管理文件操做,包括同步文件、設置文件權限和所屬用戶組、刪除文件等。web
(3)cmd模塊:在Million上執行命令或者腳本。shell
(4)user模塊:管理系統帳戶操做。apache
(5)service模塊:管理系統服務操做。vim
(6)cron模塊:管理cron服務操做。bash
準備三臺機器,這三臺機器都關閉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)ide
vim /etc/hosts 192.168.100.143 master.saltstack.com 192.168.100.144 web01.saltstack.com 192.168.100.145 web02.saltstack.com
vim /etc/hostname master.saltstack.com #master服務器 web01.saltstack.com #million服務器1 web02.saltstack.com #million服務器1
配置完成,重啓生效,再次關閉selinux。
(1)服務端
yum install -y epel-release #安裝epel源 yum install -y salt-master
(2)客戶端
yum install -y epel-release #安裝epel源 yum install -y salt-minion
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的主目錄,須要本身建立
mkdir /srv/salt mkdir /srv/pillar
systemctl start salt-master systemctl enable salt-master
vim /etc/salt/minion master: 192.168.100.143 ##第16行,指定master服務器的IP id: web01.saltstack.com #注意冒號要有空格 ##第78行,指定客戶端主機名,另外一臺是web02.saltstack.com
systemctl start salt-minion
(1)查看在主服務器上已經被接受過的客戶端
salt-key
(1)測試鏈接服務端和客戶端的通訊狀態
##在主服務器端進行操做 salt '*' test.ping web01.saltstack.com: True web02.saltstack.com: True
(2)測試遠程執行命令
##在主服務器端進行操做 salt '*' cmd.run 'hostname' ##遠程執行命令
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'
pillar 和 grains 不同,是在 master 上定義的,而且是針對 minion 定義的一些信息。像一些比較重要的數據(密碼)能夠存在 pillar 裏,還能夠定義變量等。
salt 'web01.saltstack.com' pillar.items #查看指定minion的 pillar值
綜上所述,若是你想定義的屬性值是常常變化的,就採用pillar:若是很固定、不易變,就採用 grains。
state組件是SaltStack的核心功能,經過預先定製好的sls文件對被控端主機進行狀態管理,如程序包、文件、網路配置、系統服務、系統用戶等。state的定義也是經過編寫sls文件進行操做的。
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)接着編輯以前的 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配置命令
(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)接着編輯以前的 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配置命令
(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)接着編輯以前的 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配置命令
只需修改 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配置命令