好詳細啊saltsatck超全配置

一、簡介

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 上

[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:                                 [確定]

 

三、配置認證

1)在服務端上操作

[root@master ~]# salt-key -a slaver.test.com

[root@master ~]# salt-key -a master.test.com

[root@master ~]# salt-key

                            spacer.gif

說明:-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'

spacer.gif

 

示例2:  salt '*' cmd.run  'df -h'        //遠程執行命令

spacer.gif

說明: 這裏的 * 必須是在 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等。

使用命令:
[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:
   role:
     - nginx
   env:
 
 

- test

myname:

- tpp

重啓minion服務

[root@slaver ~]# /etc/init.d/salt-minionrestart

 

2)服務端獲取 grains

[root@master ~]# salt 'slaver.test.com'grains.item role env myname       //列出多個

spacer.gif

[root@master ~]# salt 'slaver.test.com'grains.get myname                   //列出單個

spacer.gif

注意:grains 在遠程執行命令時很方便。我們可以按照 grains 的一些指標來操作。比如把所有的 web 服務器的 grains 的role 設置爲 nginx,那這樣我們就可以批量對nginx 的服務器進行操作了:

[root@master ~]# salt -G role:nginxcmd.run 'hostname'

[root@master ~]# salt -G os:CentOScmd.run 'hostname'

spacer.gif

 

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:
   base:
     - /srv/pillar

[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

spacer.gif

[root@master ~]# salt 'slaver.test.com'pillar.item conf

[root@master ~]# salt 'slaver.test.com'pillar.item myname

spacer.gif

pillar 同樣可以用來作爲 salt 的匹配對象。比如:

[root@master ~]# salt -I'conf:/etc/123.conf' test.ping

[root@master ~]# salt -I'conf:/etc/123.conf' cmd.run 'w'

spacer.gif

 

 

五、配置管理安裝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

spacer.gif

spacer.gif

spacer.gif

如上圖所示,說明 Apache 遠程安裝已成功。

 

六、文件目錄管理

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

spacer.gif

 

2)客戶端驗證

spacer.gif

 

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

spacer.gif

 

2)客戶端驗證

spacer.gif

 

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

客戶端驗證

spacer.gif

注意:由上圖可知,成功在客戶端 /tmp/testdir/ 目錄下創建了 mydir 目錄以及 testdir.add 文件,並刪除 2.txt 文件。這裏值得注意的是要成功創建 mydir 目錄,前提是 mydir 目錄下要有文件,如這裏的111.txt 文件,如若沒有,客戶端是不會創建 mydir 目錄的。

 

七、遠程執行

前面提到遠程執行命令 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)客戶端驗證

spacer.gif

 

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)客戶端驗證

spacer.gif

注意:通過上面的例子,我們實現了遠程執行腳本;如果我們想一鍵遠程安裝 LAMP 或者 LNMP,那麼只需把本例中的 1.sh 腳本替換成 一鍵安裝的腳本就行。

 

八、管理任務計劃

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)客戶端驗證

spacer.gif

 

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

spacer.gif

2)客戶端驗證

[root@slaver ~]# crontab -l          //可查看到該任務計劃已刪除

 

九、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

spacer.gif

3、顯示存活的客戶端

[root@master ~]# salt-run manage.up

spacer.gif

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

客戶端查看

spacer.gif

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章