天天看點

saltstack自動化運維

一、Saltstack架構

Saltstack基于C/S架構,服務端master:192.168.179.128和用戶端minions :192.168.179.129

二、Saltstack的安裝配置

1、master的安裝

rpm -ivhhttp://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

yum install salt-master預設配置檔案位于/etc/salt/master ,預設不需要更改該配置檔案。master端有兩個端口需要在iptables上放行

4505(publish_port):salt的消息釋出系統

4506(ret_port):salt 用戶端與服務端通信的端口

啟動方法:/etc/init.d/salt-master start

2、minion用戶端的安裝

yum install salt-minion用戶端的配置檔案為/etc/salt/minion ,打開該檔案,這裡有兩項是必須配置項。其一、找到如下行

# resolved, thenthe minion will fail to start.

#master: salt

在其下增加master主機的配置

# resolved, then the minion will fail to start.

master: 192.168.179.128

這裡直接配置的是IP位址,也可以配置成主機名,如果配置成主機名的話,需要在/etc/hosts檔案中master主機對應的IP ,如果使用内部DNS的例外,可以在内部DNS上的統一配置。

其二、找到如下段部分

Rejected Keys:在其下增加一行内容

id: host174

[root@localhost ]# salt-key -L

Accepted Keys:

host129

Unaccepted Keys:

這裡是指定目前主機的id号,這在後面master認證和master調用指令執行時顯示的名稱,可以根據實際識别需要填寫。另外需要注意的是,以上兩處配置冒号後面都需要有一個空格,不然會報如下錯誤:

Starting salt-miniondaemon: [ERROR ] Error parsing configuration file: /etc/salt/minion - whilescanning a simple key

in "<string>", line 44, column 1:

id:host172

^

could not found expected ':'

in "<string>", line 46, column 1:

# Append a domain to a hostname ...

^除以上兩個必須配置項外,用戶端還有其他很多可配置項,如user(預設是root)、root_dir(預設是根目錄)等選項,這些配置後可以控制master端的權限。

配置檔案配置完成後,可以通過/etc/init.d/salt-minion start指令啟動minion 。

三、C/S認證

和puppet一樣, salt 的 master 和 minions 是通過證書通信的,故存在證書的信任頒發問題。

在master端:salt-key -L 檢視目前需要接受的keys(master和minions都需要把服務開啟)。

Rejected Keys:這裡可以看到我已經認證過一台id為host129的主機。我再新增一個130的主機:

[root@localhost conf]# salt-key -L

host130

Rejected Keys:

[root@localhost conf]# salt-key -A

The following keys are going to be accepted:

host1130

Proceed? [n/Y] Y

Key for minion host130 accepted.

Rejected Keys:我上面用的-A參數,該參數意思是接受所有認證主機的認證,也可以使用 -a id名隻認證單獨的主機。預設認證完成後會在/etc/salt/pki/master/minions目錄找到以ID名指令的檔案,裡面存放的是密鑰檔案。

如果對用戶端信任,可以讓master自動接受請求,在master端/etc/salt/master配置

auto_accept: True

注:認證這裡zeromq2版本下有一個bug --minion與master的連接配接斷開後,不會自動重連的問題,zeromq3正常,這個主要在centos5下經常遇到。具體可以通過以下方法确認具體的版本:

[root@localhost minions]# salt '*' test.versions_report

host130:

Salt: 2014.1.0

Python: 2.6.6 (r266:84292, Jun 18 2012, 14:18:47)

Jinja2: 2.2.1

M2Crypto: 0.20.2

msgpack-python: 0.1.13

msgpack-pure: Not Installed

pycrypto: 2.0.1

PyYAML: 3.10

PyZMQ: 2.2.0.1

ZMQ: 3.2.4

host129:

Python: 2.6.6 (r266:84292, Feb 22 2013, 00:00:18)

Jinja2: unknown

如果更換版本,可以到這裡下載下傳http://download.opensuse.org/repositories/home:/fengshuo:/zeromq/CentOS_CentOS-5/x86_64/ ,centos6版本的epel源裡有,也可以在這裡找到,隻需把centos-5改成centos-6就行了。

四、指令執行

1、測試master和minion之間的通信是否正常

[root@localhost minions]# salt '*' test.ping

True

True代表正常,*代表所有主機,也可以選擇單台或者按組及正則進行比對等,這個可以參看下官方相關文檔。其預設執行的正則是shell正則,也可以使用其他正則或組等,如下:

salt 'shell正則' 指令

salt -E 'prel 正則'

salt -N $group 指令

salt -L 'server_id1,server_id2,server_id3' 指令

2、執行指令操作

常用的操作類似如下

salt '*' cmd.run"ab -n 10 -c 2 http://www.111cn.net/"

salt '*' grains.ls 檢視grains分類

salt '*' grains.items 檢視grains所有資訊

salt '*' grains.item osrelease 檢視grains某個資訊

salt '*' cmd.run "/App/nginx/sbin/nginx -v"指令執行使用cmd.run參數,由于輸出内容較多,不再一一列出,這裡隻列出一台檢視nginx版本的:

[root@localhost minions]# salt'*' cmd.run "/App/nginx/sbin/nginx -v"

Tengine version: Tengine/1.5.2 (nginx/1.2.9)

Tengine version: Tengine/1.4.6 (nginx/1.2.9)

繼續閱讀