1、簡介linux
Saltstack 比 Puppet 出來晚幾年,是基於Python 開發的,也是基於 C/S 架構,服務端 master 和客戶端 minions ;Saltstack 和 Puppet 很像,能夠說 Saltstatck 整合了 Puppet 和 Chef 的功能,更增強大,更適合大規模批量管理服務器,而且它比 Puppet 更容易配置。nginx
三大功能: 遠程命令執行,配置管理(服務,文件,cron,用戶,組),雲管理。web
支持系統:大多數都支持,windows 上不支持安裝 master。shell
2、安裝配置apache
1、準備工做vim
準備兩臺機器,這兩臺機器都關閉 selinux,清空 iptables 規則並保存。windows
master:192.168.0.109bash
slaver:192.168.0.110服務器
2、編輯 hosts 文件架構
兩臺都設置,若機器太多,能夠經過搭建 DNS,則不用在每臺機器上設置這個
# vim /etc/hosts
192.168.0.109 master.test.com 192.168.0.110 slaver.test.com |
3、設置 hostname
在 master 上
[root@master ~]# vim/etc/sysconfig/network
HOSTNAME=master.test.com |
在 slaver 上
[root@slaver ~]# vim/etc/sysconfig/network
HOSTNAME=slaver.test.com |
4、安裝
1)服務端安裝
[root@master ~]# yum install -yepel-release
[root@master ~]# yum install -ysalt-master salt-minion
2)客戶端安裝
[root@slaver ~]# yum install -yepel-release
[root@slaver ~]# yum install -ysalt-minion
5、配置
服務端和客戶端都要配置 master
# vim /etc/salt/minion //在第16行添加,冒號後有一個空格
master: 192.168.0.109 |
6、啓動服務
1)服務端
[root@master ~]# /etc/init.d/salt-masterstart
Starting salt-master daemon: [肯定] |
[root@master ~]# /etc/init.d/salt-minionstart
Starting salt-minion daemon: [肯定] |
2)客戶端
[root@slaver ~]# /etc/init.d/salt-minionstart
Starting salt-minion daemon: [肯定] |
3、配置認證
1)在服務端上操做
[root@master ~]# salt-key -a slaver.test.com
[root@master ~]# salt-key -a master.test.com
[root@master ~]# salt-key
說明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可使用salt-key 命令查看到已經簽名的客戶端。此時咱們在客戶端的 /etc/salt/pki/minion 目錄下面會多出一個minion_master.pub 文件。
2)測試驗證
示例1: salt '*'test.ping //檢測通信是否正常,也能夠指定其中一個 'slaver.test.com'
示例2: salt '*' cmd.run 'df -h' //遠程執行命令
說明: 這裏的 * 必須是在 master 上已經被接受過的客戶端,能夠經過 salt-key 查到,一般是咱們已經設定的 id 值。關於這部份內容,它支持通配、列表以及正則。好比兩臺客戶端 web十、web11, 那咱們能夠寫成 salt 'web*' salt 'web1[02]' salt-L 'web10,web11' salt -E 'web(10|11)' 等形式,使用列表,即多個機器用逗號分隔,並且須要加-L,使用正則必需要帶-E選項。 它還支持 grains 和 pillar,分別加-G 和 -I 選項,下面會介紹到。
4、grains 和 pillar
下面來介紹 grains 和pillar
1、grains
grains 是在 minion(客戶端)啓動時收集到的一些信息,好比操做系統類型、網卡ip等。
使用命令:
[root@master ~]# salt 'slaver.test.com' grains.ls //列出全部的 grains 項目名字
[root@master ~]# salt 'slaver.test.com'grains.items //列出全部的 grains 項目名以及值
grains的信息並非動態的,並不會時時變動,它只是在 minion 啓動時收集到的。grains 也能夠作配置管理。
下面咱們來自定義 grains
1)客戶端上配置
[root@slaver ~]# vim /etc/salt/grains //添加以下,注意冒號後有空格
role: nginx env: test myname: tpp |
或者
[root@slaver ~]# vim /etc/salt/minion //在最下面添加或更改
grains: - test myname: - tpp |
重啓minion服務
[root@slaver ~]# /etc/init.d/salt-minionrestart
2)服務端獲取 grains
[root@master ~]# salt 'slaver.test.com'grains.item role env myname //列出多個
[root@master ~]# salt 'slaver.test.com'grains.get myname //列出單個
注意:grains 在遠程執行命令時很方便。咱們能夠按照 grains 的一些指標來操做。好比把全部的 web 服務器的 grains 的role 設置爲 nginx,那這樣咱們就能夠批量對nginx 的服務器進行操做了:
[root@master ~]# salt -G role:nginxcmd.run 'hostname'
[root@master ~]# salt -G os:CentOScmd.run 'hostname'
2、pillar
pillar 和 grains 不同,是在master 上定義的,而且是針對 minion 定義的一些信息。像一些比較重要的數據(密碼)能夠存在 pillar 裏,還能夠定義變量等。
查看指定minion的 pillar 值:
[root@master ~]# salt 'slaver.test.com' pillar.items
1)服務端自定義配置 pillar
[root@master ~]# vim /etc/salt/master //找到以下內容,去掉#號
pillar_roots: |
[root@master ~]# mkdir /srv/pillar
[root@master ~]# vim /srv/pillar/test.sls //自定義配置文件,內容以下
conf: /etc/123.conf myname: tpp |
[root@master ~]# vim /srv/pillar/top.sls //總入口文件,內容以下
base: 'slaver.test.com': - test |
重啓master
[root@master ~]# /etc/init.d/salt-master restart
注意:當更改完 pillar 配置文件後,咱們能夠經過刷新 pillar配置來獲取新的 pillar 狀態:
[root@master ~]# salt '*' saltutil.refresh_pillar
2)驗證:
[root@master ~]# salt 'slaver.test.com' pillar.items
[root@master ~]# salt 'slaver.test.com'pillar.item conf
[root@master ~]# salt 'slaver.test.com'pillar.item myname
pillar 一樣能夠用來做爲 salt 的匹配對象。好比:
[root@master ~]# salt -I'conf:/etc/123.conf' test.ping
[root@master ~]# salt -I'conf:/etc/123.conf' cmd.run 'w'
5、配置管理安裝Apache
下面進行的演示是遠程經過 yum 方式安裝 Apache。步驟以下:
1、配置
[root@master ~]# vim /etc/salt/master //打開以下內容的註釋
file_roots: base: - /srv/salt |
注意:環境: base、dev(開發環境)、test(測試環境)、prod(生產環境)。
[root@master ~]# mkdir /srv/salt
[root@master ~]# vim /srv/salt/top.sls
base: 'slaver.test.com': - apache |
注意:若換成 '*',則表示在全部的客戶端執行 apache 模塊。
[root@master ~]# vim/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 表示開機啓動。
2、重啓服務
[root@master ~]# /etc/init.d/salt-masterrestart
3、執行命令
[root@master ~]# salt 'slaver.test.com'state.highstate //執行時間比較長,由於要安裝httpd
如上圖所示,說明 Apache 遠程安裝已成功。
6、文件目錄管理
1、文件管理
1)服務端配置
接着編輯以前的 top.sls 文件
[root@master ~]# vim /srv/salt/top.sls //修改成以下
base: 'slaver.test.com': - filetest |
新建 filetest.sls 文件
[root@master ~]# vim/srv/salt/filetest.sls
file-test: file.managed: - name: /tmp/filetest.txt - source: salt://test/123/1.txt - user: root - group: root - mode: 644 |
注意:第一行的 file-test 爲自定的名字,表示該配置段的名字,能夠在別的配置段中引用它;source指定文件從哪裏拷貝,這裏的 test 目錄至關因而 /srv/salt/test 目錄;name指定遠程客戶端要生成的文件。
新建所要測試的源文件
[root@master ~]# mkdir -p/srv/salt/test/123/
[root@master ~]# vim/srv/salt/test/123/1.txt
msiyuetian.blog.51cto.com |
執行命令:
[root@master ~]# salt 'slaver.test.com'state.highstate
2)客戶端驗證
2、目錄管理
1)服務端配置
接着編輯以前的 top.sls 文件
[root@master ~]# vim /srv/salt/top.sls //修改成以下
base: 'slaver.test.com': - filedir |
新建 filedir.sls 文件
[root@master ~]# vim/srv/salt/filedir.sls
file-dir: file.recurse: - name: /tmp/testdir - source: salt://test1/234 - user: root - file_mode: 644 - dir_mode: 755 - mkdir: True - clean: True |
注意:clean: True 源刪除文件或目錄,目標也會跟着刪除,不然不會刪除。能夠默認設置爲 False。
新建所要測試的源目錄
[root@master ~]# mkdir -p/srv/salt/test1/234
[root@master ~]# vim/srv/salt/test1/234/2.txt
msiyuetian.blog.51cto.com |
執行命令:
[root@master ~]# salt 'slaver.test.com'state.highstate
2)客戶端驗證
3)測試增刪功能
在服務端新建 mydir 目錄以及 testdir.add 文件,刪除 2.txt 文件:
[root@master ~]# mkdir/srv/salt/test1/234/mydir
[root@master ~]# touch/srv/salt/test1/234/mydir/111.txt
[root@master ~]# touch /srv/salt/test1/234/testdir.add
[root@master ~]# rm -rf/srv/salt/test1/234/2.txt
執行命令:
[root@master ~]# salt 'slaver.test.com'state.highstate
客戶端驗證
注意:由上圖可知,成功在客戶端 /tmp/testdir/ 目錄下建立了 mydir 目錄以及 testdir.add 文件,並刪除 2.txt 文件。這裏值得注意的是要成功建立 mydir 目錄,前提是 mydir 目錄下要有文件,如這裏的111.txt 文件,如若沒有,客戶端是不會建立 mydir 目錄的。
7、遠程執行
前面提到遠程執行命令 test.ping,cmd.run,點前面的是模塊,點後面的是函數;這樣總歸是不太規範化,下面詳細介紹怎麼遠程執行命令和腳本。
1、遠程執行命令
1)服務端配置
接着編輯以前的 top.sls 文件
[root@master ~]# vim /srv/salt/top.sls //修改成以下
base: 'slaver.test.com': - cmdtest |
新建 cmdtest.sls 文件
[root@master ~]# vim/srv/salt/cmdtest.sls
cmd-test: cmd.run: - onlyif: test -f /tmp/123.txt - names: - touch /tmp/cmdtest.txt - mkdir /tmp/cmdtest - user: root |
注意:條件 onlyif 表示若 /tmp/123.txt 文件存在,則執行後面的命令;可使用 unless,二者正好相反。
執行命令:
[root@master ~]# salt 'slaver.test.com'state.highstate
2)客戶端驗證
2、遠程執行腳本
1)服務端配置
接着編輯以前的 top.sls 文件
[root@master ~]# vim /srv/salt/top.sls //修改成以下
base: 'slaver.test.com': - shelltest |
新建 shelltest.sls 文件
[root@master ~]# vim/srv/salt/shelltest.sls
shell-test: cmd.script: - source: salt://test/1.sh - user: root |
新建 1.sh 腳本文件
[root@master ~]# vim /srv/salt/test/1.sh
#!/bin/bash touch /tmp/shelltest.txt if [ -d /tmp/shelltest ] then rm -rf /tmp/shelltest else mkdir /tmp/shelltest fi |
執行命令:
[root@master ~]# salt 'slaver.test.com'state.highstate
2)客戶端驗證
注意:經過上面的例子,咱們實現了遠程執行腳本;若是咱們想一鍵遠程安裝 LAMP 或者 LNMP,那麼只需把本例中的 1.sh 腳本替換成 一鍵安裝的腳本就行。
8、管理任務計劃
1、創建 cron
1)服務端配置
編輯 top.sls 文件
[root@master ~]# vim /srv/salt/top.sls //修改成以下
base: 'slaver.test.com': - crontest |
編輯 crontest.sls 文件
[root@master ~]# vim/srv/salt/crontest.sls
cron-test: cron.present: - name: /bin/touch /tmp/111.txt - user: root - minute: '*' - hour: 20 - daymonth: 1-10 - month: '3,5' - dayweek: '*' |
注意,*須要用單引號引發來。固然咱們還可使用 file.managed 模塊來管理 cron,由於系統的 cron都是以配置文件的形式存在的。
執行命令:
[root@master ~]# salt 'slaver.test.com'state.highstate
2)客戶端驗證
2、刪除 cron
1)服務端配置
咱們只需修改 crontest.sls 文件
[root@master ~]# vim/srv/salt/crontest.sls
把 cron.present: 改爲 cron.absent: |
注意:二者不能共存,要想刪除一個 cron,那以前的 present 就得替換掉或者刪除掉。
執行命令:
[root@master ~]# salt 'slaver.test.com'state.highstate
2)客戶端驗證
[root@slaver ~]# crontab -l //可查看到該任務計劃已刪除
9、Saltstack 經常使用命令
1、拷貝文件到客戶端
[root@master ~]# salt 'slaver.test.com'cp.get_file salt://apache.sls /tmp/cp.txt
slaver.test.com: /tmp/cp.txt |
2、拷貝目錄到客戶端
[root@master ~]# salt 'slaver.test.com'cp.get_dir salt://test /tmp
slaver.test.com: - /tmp/test/1.sh - /tmp/test/123/1.txt |
3、顯示存活的客戶端
[root@master ~]# salt-run manage.up
4、命令下執行服務端的腳本
[root@master ~]# vim/srv/salt/test/shell.sh
#! /bin/bash echo "msiyuetian.blog.51cto.com" > /tmp/shell.txt |
[root@master ~]# salt 'slaver.test.com'cmd.script salt://test/shell.sh
客戶端查看