一、簡介
Saltstack 比 Puppet 出來晚幾年饱苟,是基于Python 開發(fā)的炊邦,也是基于 C/S 架構(gòu)编矾,服務(wù)端 master 和客戶端 minions ;Saltstack 和 Puppet 很像馁害,可以說 Saltstatck 整合了 Puppet 和 Chef 的功能窄俏,更加強(qiáng)大,更適合大規(guī)模批量管理服務(wù)器碘菜,并且它比 Puppet 更容易配置裆操。
三大功能: 遠(yuǎn)程命令執(zhí)行,配置管理(服務(wù)炉媒,文件踪区,cron,用戶吊骤,組)缎岗,云管理。
支持系統(tǒng):大多數(shù)都支持白粉,windows 上不支持安裝 master传泊。
二、安裝配置
1鸭巴、準(zhǔn)備工作
準(zhǔn)備兩臺機(jī)器眷细,這兩臺機(jī)器都關(guān)閉 selinux,清空 iptables 規(guī)則并保存鹃祖。
master:192.168.0.109
slaver:192.168.0.110
2溪椎、編輯 hosts 文件
兩臺都設(shè)置,若機(jī)器太多,可以通過搭建 DNS校读,則不用在每臺機(jī)器上設(shè)置這個
# vim /etc/hosts192.168.0.109? master.test.com192.168.0.110slaver.test.com
3沼侣、設(shè)置 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)服務(wù)端安裝
[iyunv@master ~]#yuminstall-y epel-release
[iyunv@master ~]#yuminstall-y salt-master salt-minion
2)客戶端安裝
[iyunv@slaver ~]#yuminstall-y epel-release
[iyunv@slaver ~]#yuminstall-y salt-minion
5歉秫、配置
服務(wù)端和客戶端都要配置 master
# vim /etc/salt/minion?????????????????? //在第16行添加蛾洛,冒號后有一個空格
master: 192.168.0.109
6、啟動服務(wù)
1)服務(wù)端
[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:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
三雁芙、配置認(rèn)證
1)在服務(wù)端上操作
[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 命令查看到已經(jīng)簽名的客戶端裂明。此時我們在客戶端的 /etc/salt/pki/minion 目錄下面會多出一個minion_master.pub 文件椿浓。
2)測試驗(yàn)證
示例1: salt '*' test.ping? ?? ?? ?? ?? ?? ?//檢測通訊是否正常,也可以指定其中一個 'slaver.test.com'
示例2:??salt '*' cmd.run? ?'df -h'? ?? ???//遠(yuǎn)程執(zhí)行命令
說明: 這里的 * 必須是在 master 上已經(jīng)被接受過的客戶端闽晦,可以通過 salt-key 查到扳碍,通常是我們已經(jīng)設(shè)定的 id 值。關(guān)于這部分內(nèi)容仙蛉,它支持通配笋敞、列表以及正則。 比如兩臺客戶端 web10荠瘪、web11夯巷, 那我們可以寫成??salt 'web*'? ? salt 'web1[02]'??salt -L 'web10,web11'? ?salt -E 'web(10|11)' 等形式,使用列表哀墓,即多個機(jī)器用逗號分隔趁餐,而且需要加-L,使用正則必須要帶-E選項(xiàng)篮绰。 它還支持 grains 和 pillar后雷,分別加 -G 和 -I 選項(xiàng),下面會介紹到吠各。
四臀突、grains 和 pillar
下面來介紹 grains 和 pillar
1、grains
grains 是在 minion(客戶端)啟動時收集到的一些信息贾漏,比如操作系統(tǒng)類型候学、網(wǎng)卡ip等辑畦。
使用命令:
[iyunv@master ~]# salt'slaver.test.com'grains.ls//列出所有的 grains 項(xiàng)目名字[iyunv@master ~]# salt'slaver.test.com'grains.items//列出所有的 grains 項(xiàng)目名以及值
grains的信息并不是動態(tài)的傅事,并不會時時變更眷唉,它只是在 minion 啟動時收集到的暗赶。grains 也可以做配置管理陨收。
下面我們來自定義 grains
1)客戶端上配置
[iyunv@slaver ~]# vim /etc/salt/grains//添加如下笼蛛,注意冒號后有空格role: nginxenv: test
myname: tpp
或者
[iyunv@slaver ~]# vim /etc/salt/minion//在最下面添加或更改grains:
? role:
? ? - nginx
? env:
? ? - test
? myname:
? ? - tpp
重啟minion服務(wù)
[iyunv@slaver ~]# /etc/init.d/salt-minion restart
2)服務(wù)端獲取 grains
[iyunv@master ~]# salt'slaver.test.com'grains.item roleenvmyname//列出多個
[iyunv@master ~]# salt'slaver.test.com'grains.get myname//列出單個
注意:grains 在遠(yuǎn)程執(zhí)行命令時很方便奴艾。我們可以按照 grains 的一些指標(biāo)來操作橄妆。比如把所有的 web 服務(wù)器的 grains 的 role 設(shè)置為 nginx硕盹,那這樣我們就可以批量對 nginx 的服務(wù)器進(jìn)行操作了:
[iyunv@master ~]# salt -G role:nginx cmd.run'hostname'[iyunv@master ~]# salt -G os:CentOS cmd.run'hostname'
2符匾、pillar
pillar 和 grains 不一樣,是在 master 上定義的瘩例,并且是針對 minion 定義的一些信息啊胶。像一些比較重要的數(shù)據(jù)(密碼)可以存在 pillar 里,還可以定義變量等垛贤。
查看指定minion的 pillar 值:
[iyunv@master ~]# salt'slaver.test.com'pillar.items
1)服務(wù)端自定義配置 pillar
[iyunv@master ~]# vim /etc/salt/master//找到如下內(nèi)容焰坪,去掉#號pillar_roots:
? base:
? ? - /srv/pillar
[iyunv@master ~]#mkdir/srv/pillar
[iyunv@master ~]# vim /srv/pillar/test.sls//自定義配置文件,內(nèi)容如下conf: /etc/123.conf
myname: tpp
[iyunv@master ~]# vim /srv/pillar/top.sls//總?cè)肟谖募傅耄瑑?nèi)容如下base:
? 'slaver.test.com':
? ? - test
重啟master
[iyunv@master ~]# /etc/init.d/salt-master restart
注意:當(dāng)更改完 pillar 配置文件后某饰,我們可以通過刷新 pillar 配置來獲取新的 pillar 狀態(tài):
[iyunv@master ~]# salt'*'saltutil.refresh_pillar
2)驗(yàn)證:
[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
下面進(jìn)行的演示是遠(yuǎn)程通過 yum 方式安裝 Apache黔漂。步驟如下:
1、配置
[iyunv@master ~]# vim /etc/salt/master//打開如下內(nèi)容的注釋file_roots:
? base:
? ? - /srv/salt
注意:環(huán)境: base禀酱、dev(開發(fā)環(huán)境)炬守、test(測試環(huán)境)、prod(生產(chǎn)環(huán)境)剂跟。
[iyunv@master ~]#mkdir/srv/salt
[iyunv@master ~]# vim /srv/salt/top.sls
base:
? 'slaver.test.com':
? ? - apache
注意:若換成 '*'减途,則表示在所有的客戶端執(zhí)行 apache 模塊。
[iyunv@master ~]# vim /srv/salt/apache.sls
apache-service:
? pkg.installed:
? ? - names://如果只有一個服務(wù)曹洽,那么就可以寫成 –name: httpd 不用再換一行- httpd
? ? ? - httpd-devel
? service.running:
? ? - name: httpd
? ? - enable: True
注意:apache-service 是自定義的 id 名鳍置。pkg.installed 為包安裝函數(shù),下面是要安裝的包的名字送淆。service.running 也是一個函數(shù)墓捻,來保證指定的服務(wù)啟動,enable 表示開機(jī)啟動坊夫。
2砖第、重啟服務(wù)
[iyunv@master ~]# /etc/init.d/salt-master restart
3、執(zhí)行命令
[iyunv@master ~]# salt'slaver.test.com'state.highstate//執(zhí)行時間比較長环凿,因?yàn)橐惭bhttpd
如上圖所示梧兼,說明 Apache 遠(yuǎn)程安裝已成功。
六智听、文件目錄管理
1羽杰、文件管理
1)服務(wù)端配置
接著編輯之前的 top.sls 文件
[iyunv@master ~]# vim /srv/salt/top.sls//修改為如下base:
? 'slaver.test.com':
? ? - filetest
新建 filetest.sls 文件
[iyunv@master ~]# vim /srv/salt/filetest.slsfile-test:
? file.managed:
? ? - name: /tmp/filetest.txt
? ? - source: salt://test/123/1.txt- user: root
? ? - group: root
? ? - mode:644
注意:第一行的 file-test 為自定的名字渡紫,表示該配置段的名字,可以在別的配置段中引用它考赛;source指定文件從哪里拷貝惕澎,這里的 test 目錄相當(dāng)于是 /srv/salt/test 目錄;name指定遠(yuǎn)程客戶端要生成的文件颜骤。
新建所要測試的源文件
[iyunv@master ~]#mkdir-p /srv/salt/test/123/[iyunv@master ~]# vim /srv/salt/test/123/1.txt
msiyuetian.blog.iyunv.com
執(zhí)行命令:
[iyunv@master ~]# salt'slaver.test.com'state.highstate
2)客戶端驗(yàn)證
2唧喉、目錄管理
1)服務(wù)端配置
接著編輯之前的 top.sls 文件
[iyunv@master ~]# vim /srv/salt/top.sls//修改為如下base:
? 'slaver.test.com':
? ? - filedir
新建 filedir.sls 文件
[iyunv@master ~]# vim /srv/salt/filedir.slsfile-dir:
? file.recurse:
? ? - name: /tmp/testdir
? ? - source: salt://test1/234- user: root
? ? - file_mode:644- dir_mode:755-mkdir: True
? ? - clean: True
注意:clean: True 源刪除文件或目錄,目標(biāo)也會跟著刪除忍抽,否則不會刪除八孝。可以默認(rèn)設(shè)置為 False鸠项。
新建所要測試的源目錄
[iyunv@master ~]#mkdir-p /srv/salt/test1/234[iyunv@master ~]# vim /srv/salt/test1/234/2.txt
msiyuetian.blog.iyunv.com
執(zhí)行命令:
[iyunv@master ~]# salt'slaver.test.com'state.highstate
2)客戶端驗(yàn)證
3)測試增刪功能
在服務(wù)端新建 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
執(zhí)行命令:
[iyunv@master ~]# salt'slaver.test.com'state.highstate
客戶端驗(yàn)證
注意:由上圖可知,成功在客戶端 /tmp/testdir/ 目錄下創(chuàng)建了 mydir 目錄以及 testdir.add 文件祟绊,并刪除 2.txt 文件楼入。這里值得注意的是要成功創(chuàng)建 mydir 目錄,前提是 mydir 目錄下要有文件牧抽,如這里的111.txt 文件浅辙,如若沒有,客戶端是不會創(chuàng)建 mydir 目錄的阎姥。
七记舆、遠(yuǎn)程執(zhí)行
前面提到遠(yuǎn)程執(zhí)行命令 test.ping,cmd.run呼巴,點(diǎn)前面的是模塊泽腮,點(diǎn)后面的是函數(shù);這樣總歸是不太規(guī)范化衣赶,下面詳細(xì)介紹怎么遠(yuǎn)程執(zhí)行命令和腳本府瞄。
1秆撮、遠(yuǎn)程執(zhí)行命令
1)服務(wù)端配置
接著編輯之前的 top.sls 文件
[iyunv@master ~]# vim /srv/salt/top.sls//修改為如下base:
? 'slaver.test.com':
? ? - cmdtest
新建 cmdtest.sls 文件
[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
注意:條件 onlyif 表示若 /tmp/123.txt 文件存在,則執(zhí)行后面的命令;可以使用 unless黎侈,兩者正好相反休吠。
執(zhí)行命令:
[iyunv@master ~]# salt'slaver.test.com'state.highstate
2)客戶端驗(yàn)證
2巷燥、遠(yuǎn)程執(zhí)行腳本
1)服務(wù)端配置
接著編輯之前的 top.sls 文件
[iyunv@master ~]# vim /srv/salt/top.sls//修改為如下base:
? 'slaver.test.com':
? ? - shelltest
新建 shelltest.sls 文件
[iyunv@master ~]# vim /srv/salt/shelltest.sls
shell-test:
? cmd.script:
? ? - source: salt://test/1.sh- user: root
新建 1.sh 腳本文件
[iyunv@master ~]# vim /srv/salt/test/1.sh#!/bin/bashtouch/tmp/shelltest.txtif[ -d /tmp/shelltest ]thenrm-rf /tmp/shelltestelsemkdir/tmp/shelltestfi
執(zhí)行命令:
[iyunv@master ~]# salt'slaver.test.com'state.highstate
2)客戶端驗(yàn)證
注意:通過上面的例子僵驰,我們實(shí)現(xiàn)了遠(yuǎn)程執(zhí)行腳本喷斋;如果我們想一鍵遠(yuǎn)程安裝 LAMP 或者 LNMP唁毒,那么只需把本例中的 1.sh 腳本替換成 一鍵安裝的腳本就行。
八星爪、管理任務(wù)計(jì)劃
1浆西、建立 cron
1)服務(wù)端配置
編輯 top.sls 文件
[iyunv@master ~]# vim /srv/salt/top.sls//修改為如下base:
? 'slaver.test.com':
? ? - crontest
編輯 crontest.sls 文件
[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:'*'
注意,*需要用單引號引起來顽腾。當(dāng)然我們還可以使用 file.managed 模塊來管理 cron近零,因?yàn)橄到y(tǒng)的 cron都是以配置文件的形式存在的。
執(zhí)行命令:
[iyunv@master ~]# salt'slaver.test.com'state.highstate
2)客戶端驗(yàn)證
2抄肖、刪除 cron
1)服務(wù)端配置
我們只需修改 crontest.sls 文件
[iyunv@master ~]# vim /srv/salt/crontest.sls
把 cron.present: 改成 cron.absent:
注意:兩者不能共存久信,要想刪除一個 cron,那之前的 present 就得替換掉或者刪除掉漓摩。
執(zhí)行命令:
[iyunv@master ~]# salt'slaver.test.com'state.highstate
2)客戶端驗(yàn)證
[iyunv@slaver ~]# crontab -l//可查看到該任務(wù)計(jì)劃已刪除
九裙士、Saltstack 常用命令
1、拷貝文件到客戶端
[iyunv@master ~]# salt'slaver.test.com'cp.get_file salt://apache.sls /tmp/cp.txtslaver.test.com:
? ? /tmp/cp.txt
2管毙、拷貝目錄到客戶端
[iyunv@master ~]# salt'slaver.test.com'cp.get_dir salt://test /tmpslaver.test.com:
? ? - /tmp/test/1.sh- /tmp/test/123/1.txt
3腿椎、顯示存活的客戶端
[iyunv@master ~]# salt-run manage.up
4、命令下執(zhí)行服務(wù)端的腳本
[iyunv@master ~]# vim /srv/salt/test/shell.sh#! /bin/bashecho"msiyuetian.blog.iyunv.com"> /tmp/shell.txt
[iyunv@master ~]# salt'slaver.test.com'cmd.script salt://test/shell.sh
客戶端查看