下面這篇文章主要介紹另外一個運維自動化工具 Saltstack 。
一、簡介
Saltstack 比 Puppet 出來晚幾年,是基於Python 開發的,也是基於 C/S 架構,服務端 master 和客戶端 minions ;Saltstack 和 Puppet 很像,可以說 Saltstatck 整合了 Puppet 和 Chef 的功能,更加強大,更適合大規模批量管理服務器,並且它比 Puppet 更容易配置。
三大功能: 遠程命令執行,配置管理(服務,文件,cron,用戶,組),雲管理。
支持系統:大多數都支持,windows 上不支持安裝 master。
二、安裝配置
1、准備工作
准備兩台機器,這兩台機器都關閉 selinux,清空 iptables 規則並保存。
master:192.168.0.109
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 上
[iyunv@master ~]# vim /etc/sysconfig/network
HOSTNAME=master.test.com
在 slaver 上
[iyunv@slaver ~]# vim /etc/sysconfig/network
HOSTNAME=slaver.test.com
4、安裝
1)服務端安裝
[iyunv@master ~]# yum install -y epel-release [iyunv@master ~]# yum install -y salt-master salt-minion
2)客戶端安裝
[iyunv@slaver ~]# yum install -y epel-release [iyunv@slaver ~]# yum install -y salt-minion
5、配置
服務端和客戶端都要配置 master
# vim /etc/salt/minion //在第16行添加,冒號后有一個空格 master: 192.168.0.109
6、啟動服務
1)服務端
[iyunv@master ~]# /etc/init.d/salt-master start Starting salt-master daemon: [確定] [iyunv@master ~]# /etc/init.d/salt-minion start Starting salt-minion daemon: [確定]
2)客戶端
[iyunv@slaver ~]# /etc/init.d/salt-minion start
Starting salt-minion daemon: [確定]
三、配置認證
1)在服務端上操作
[iyunv@master ~]# salt-key -a slaver.test.com [iyunv@master ~]# salt-key -a master.test.com [iyunv@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 值。關於這部分內容,它支持通配、列表以及正則。 比如兩台客戶端 web10、web11, 那我們可以寫成 salt 'web*' salt 'web1[02]' salt -L 'web10,web11' salt -E 'web(10|11)' 等形式,使用列表,即多個機器用逗號分隔,而且需要加-L,使用正則必須要帶-E選項。 它還支持 grains 和 pillar,分別加 -G 和 -I 選項,下面會介紹到。
四、grains 和 pillar
下面來介紹 grains 和 pillar
1、grains
grains 是在 minion(客戶端)啟動時收集到的一些信息,比如操作系統類型、網卡ip等。
使用命令:
[iyunv@master ~]# salt 'slaver.test.com' grains.ls //列出所有的 grains 項目名字 [iyunv@master ~]# salt 'slaver.test.com' grains.items //列出所有的 grains 項目名以及值
grains的信息並不是動態的,並不會時時變更,它只是在 minion 啟動時收集到的。grains 也可以做配置管理。
下面我們來自定義 grains
1)客戶端上配置
[iyunv@slaver ~]# vim /etc/salt/grains //添加如下,注意冒號后有空格 role: nginx env: test myname: tpp
或者
[iyunv@slaver ~]# vim /etc/salt/minion //在最下面添加或更改 grains: role: - nginx env: - test myname: - tpp
重啟minion服務
[iyunv@slaver ~]# /etc/init.d/salt-minion restart
2)服務端獲取 grains
[iyunv@master ~]# salt 'slaver.test.com' grains.item role env myname //列出多個
[iyunv@master ~]# salt 'slaver.test.com' grains.get myname //列出單個
注意:grains 在遠程執行命令時很方便。我們可以按照 grains 的一些指標來操作。比如把所有的 web 服務器的 grains 的 role 設置為 nginx,那這樣我們就可以批量對 nginx 的服務器進行操作了:
[iyunv@master ~]# salt -G role:nginx cmd.run 'hostname' [iyunv@master ~]# salt -G os:CentOS cmd.run 'hostname'
2、pillar
pillar 和 grains 不一樣,是在 master 上定義的,並且是針對 minion 定義的一些信息。像一些比較重要的數據(密碼)可以存在 pillar 里,還可以定義變量等。
查看指定minion的 pillar 值:
[iyunv@master ~]# salt 'slaver.test.com' pillar.items
1)服務端自定義配置 pillar
[iyunv@master ~]# vim /etc/salt/master //找到如下內容,去掉#號 pillar_roots: base: - /srv/pillar [iyunv@master ~]# mkdir /srv/pillar [iyunv@master ~]# vim /srv/pillar/test.sls //自定義配置文件,內容如下 conf: /etc/123.conf myname: tpp [iyunv@master ~]# vim /srv/pillar/top.sls //總入口文件,內容如下 base: 'slaver.test.com': - test
重啟master
[iyunv@master ~]# /etc/init.d/salt-master restart
注意:當更改完 pillar 配置文件后,我們可以通過刷新 pillar 配置來獲取新的 pillar 狀態:
[iyunv@master ~]# salt '*' saltutil.refresh_pillar
2)驗證:
[iyunv@master ~]# salt 'slaver.test.com' pillar.items
[iyunv@master ~]# salt 'slaver.test.com' pillar.item conf [iyunv@master ~]# salt 'slaver.test.com' pillar.item myname
pillar 同樣可以用來作為 salt 的匹配對象。比如:
[iyunv@master ~]# salt -I 'conf:/etc/123.conf' test.ping [iyunv@master ~]# salt -I 'conf:/etc/123.conf' cmd.run 'w'
五、配置管理安裝Apache
下面進行的演示是遠程通過 yum 方式安裝 Apache。步驟如下:
1、配置
[iyunv@master ~]# vim /etc/salt/master //打開如下內容的注釋 file_roots: base: - /srv/salt
[iyunv@master ~]# mkdir /srv/salt [iyunv@master ~]# vim /srv/salt/top.sls base: 'slaver.test.com': - apache
[iyunv@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、重啟服務
[iyunv@master ~]# /etc/init.d/salt-master restart
[iyunv@master ~]# salt 'slaver.test.com' state.highstate //執行時間比較長,因為要安裝httpd

如上圖所示,說明 Apache 遠程安裝已成功。
六、文件目錄管理
1、文件管理
1)服務端配置
接着編輯之前的 top.sls 文件
[iyunv@master ~]# vim /srv/salt/top.sls //修改為如下 base: 'slaver.test.com': - filetest
新建 filetest.sls 文件
[iyunv@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指定遠程客戶端要生成的文件。
新建所要測試的源文件
[iyunv@master ~]# mkdir -p /srv/salt/test/123/ [iyunv@master ~]# vim /srv/salt/test/123/1.txt msiyuetian.blog.iyunv.com
執行命令:
[iyunv@master ~]# salt 'slaver.test.com' state.highstate
2)客戶端驗證
2、目錄管理
1)服務端配置
[iyunv@master ~]# vim /srv/salt/top.sls //修改為如下 base: 'slaver.test.com': - filedir
[iyunv@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
新建所要測試的源目錄
[iyunv@master ~]# mkdir -p /srv/salt/test1/234 [iyunv@master ~]# vim /srv/salt/test1/234/2.txt msiyuetian.blog.iyunv.com
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

2)客戶端驗證
3)測試增刪功能
在服務端新建 mydir 目錄以及 testdir.add 文件,刪除 2.txt 文件:
[iyunv@master ~]# mkdir /srv/salt/test1/234/mydir [iyunv@master ~]# touch /srv/salt/test1/234/mydir/111.txt [iyunv@master ~]# touch /srv/salt/test1/234/testdir.add [iyunv@master ~]# rm -rf /srv/salt/test1/234/2.txt
[iyunv@master ~]# salt 'slaver.test.com' state.highstate
客戶端驗證
注意:由上圖可知,成功在客戶端 /tmp/testdir/ 目錄下創建了 mydir 目錄以及 testdir.add 文件,並刪除 2.txt 文件。這里值得注意的是要成功創建 mydir 目錄,前提是 mydir 目錄下要有文件,如這里的111.txt 文件,如若沒有,客戶端是不會創建 mydir 目錄的。
七、遠程執行
前面提到遠程執行命令 test.ping,cmd.run,點前面的是模塊,點后面的是函數;這樣總歸是不太規范化,下面詳細介紹怎么遠程執行命令和腳本。
[iyunv@master ~]# vim /srv/salt/top.sls //修改為如下 base: 'slaver.test.com': - cmdtest
[iyunv@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
執行命令:
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

2、遠程執行腳本
1)服務端配置
[iyunv@master ~]# vim /srv/salt/top.sls //修改為如下 base: 'slaver.test.com': - shelltest
[iyunv@master ~]# vim /srv/salt/shelltest.sls shell-test: cmd.script: - source: salt://test/1.sh - user: root
[iyunv@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
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

注意:通過上面的例子,我們實現了遠程執行腳本;如果我們想一鍵遠程安裝 LAMP 或者 LNMP,那么只需把本例中的 1.sh 腳本替換成 一鍵安裝的腳本就行。
八、管理任務計划
1、建立 cron
1)服務端配置
編輯 top.sls 文件
[iyunv@master ~]# vim /srv/salt/top.sls //修改為如下 base: 'slaver.test.com': - crontest
[iyunv@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: '*'
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

1)服務端配置
我們只需修改 crontest.sls 文件
[iyunv@master ~]# vim /srv/salt/crontest.sls
把 cron.present: 改成 cron.absent:
注意:兩者不能共存,要想刪除一個 cron,那之前的 present 就得替換掉或者刪除掉。
執行命令:
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

[iyunv@slaver ~]# crontab -l //可查看到該任務計划已刪除
九、Saltstack 常用命令
1、拷貝文件到客戶端
[iyunv@master ~]# salt 'slaver.test.com' cp.get_file salt://apache.sls /tmp/cp.txt slaver.test.com: /tmp/cp.txt
2、拷貝目錄到客戶端
[iyunv@master ~]# salt 'slaver.test.com' cp.get_dir salt://test /tmp slaver.test.com: - /tmp/test/1.sh - /tmp/test/123/1.txt
3、顯示存活的客戶端
[iyunv@master ~]# salt-run manage.up
4、命令下執行服務端的腳本
[iyunv@master ~]# vim /srv/salt/test/shell.sh #! /bin/bash echo "msiyuetian.blog.iyunv.com" > /tmp/shell.txt [iyunv@master ~]# salt 'slaver.test.com' cmd.script salt://test/shell.sh

版權聲明:本文為博主原創文章,未經博主允許不得轉載
本文轉自:http://www.cnblogs.com/lgeng/p/6567424.html