SaltStack 采用 zeromq 消息队列进行通信,和 Puppet/Chef 比起来,SaltStack 速度快得多。还有一点我们喜欢 SaltStack 的地方是它是 Python 写的,比 Puppet/Chef 这些 Ruby 工具更接近我们的能力圈
saltstack安装:
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
epel中关于salt的包:
salt-api.noarch : A web api for to access salt the parallel remote execution system
salt-master.noarch : Management component for salt, a parallel remote execution system
salt-minion.noarch : Client component for salt, a parallel remote execution system
salt.noarch : A parallel remote execution system
salt-cloud.noarch : Generic cloud provisioning tool
1:服务端
1:安装
yum install salt-master -y
2:配置文件
/etc/salt/master
配置文件选项介绍: http://docs.saltstack.com/ref/configuration/master.html
最基本字段:
interface: 服务端监听IP
3:运行
调试模式:
salt-master -l debug
后台运行:
salt-master -d
作为CentOS管理员,我选择:
/etc/init.d/salt-master start
4:注意事项:
1:监听端口
4505(publish_port):salt的消息发布系统
4506(ret_port):salt客户端与服务端通信的端口,主要用来接受消息
所以确保客户端能跟服务端的这2个端口通信
2:客户端
1:安装
yum install salt-minion -y
2:配置文件
/etc/salt/minion
配置文件选项介绍: http://docs.saltstack.com/ref/configuration/minion.html
最基本字段:
master: 服务端主机名
id: 客户端主机名(在服务端看到的客户端的名字)
3:运行
调试模式:
salt-minion -l debug
后台运行:
salt-minion -d
作为CentOS管理员,我选择:
/etc/init.d/salt-minion start
4:注意事项:
1:minion默认和主机名为salt的主机通信
2:关于配置文件
salt的配置文件均为yaml风格
$key: $value #注意冒号后有一个空格
3:基础知识
1:salt minion和master的认证过程:
(1) minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成minion.pem(private key), minion.pub(public key),然后将minion.pub发送给master
(2) master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了
如下:
启动服务端:
/etc/init.d/salt-minion restart
启动客户端:
/etc/init.d/salt-minion restart
服务端查看key:
salt-key
Accepted Keys:
Unaccepted Keys:
minion1
Rejected Keys:
服务端接受key
salt-key -a minion1
测试:
salt 'minion1' test.ping
minion1:
True
附:salt更多命令及手册
salt '*' sys.doc
saltstack的master端监听
4505与
4506端口,4505为salt消息发布系统,4506为salt客户端与
vi
/etc/salt/master
interface: 115.28.2.1
#此处是server端监听的地址。
auto_accept: True
#此处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能
/etc/salt/master
-d
#后台启动
/etc/salt/master
#前台启动,方便调试
#vi /etc/salt/minion
master: 115.28.2.1
#这里改成你的master服务器地址
id
: web01
#建议这里修改成主机名,便于master端分辨
#在配置文件末尾加入下面内容,每隔5分钟自动同步master配置,效果等同于在客户端执行salt-call state.highstate或在server端执行 salt '*'state.highstate
schedule:
highstate:
function
: state.highstate
minutes: 5
/etc/salt/minion
-d
#后台启动
/etc/salt/minion
#前台启动,方便调试
注:minion启动后,自动会生成公钥私钥,并把公钥发送到master端。minion不监听端口,全靠和master保持长连接,可通过
netstat
-an|
grep
ES来查看是否有连接。
salt-key -L
#查询所有接收到的证书
salt-key -a <证书名>
#接收单个证书
salt-key -A
#接受所有证书
salt-key -d <证书名>
#删除单个证书
salt-key -D
#删除所有证书
salt-run manage.status
#查看所有客户端up/down状态
salt-run manage.up
#只显示up状态的客户端
salt-run manage.down
#只显示down状态的客户端
语法:
salt-
cp
[options]
'<target>'
SOURCE DEST
示例:
salt-
cp
'*'
/etc/hosts
/etc/hosts
#把master上的hosts文件分发到所有主机。
可以把salt-call state.highstate命令放在minion端的定时任务中,来进行自动请求同步。
也可以把salt '*' state.highstate放在master端的定时任务中,来进行自动推送到所有机器。
也可以在/etc/salt/minion配置文件中加入如下内容,如下是每隔5分钟同步,效果一样
schedule:
highstate:
function
:state.highstate
seconds:300
[root@yang salt]
# cat /srv/salt/top.sls
base:
"DG-Server*"
:
- ssh_key.key
- zabbix.zabbix
#在top.sls文件中指定哪些主机访问哪些目录
[root@yang salt]
# cat /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/scripts
:
#指定minion端同步后生成的目录
file
.recurse:
-
source
: salt:
//zabbix/zabbix_scripts
#指定要master端同步的原始目录,以后只要把想要分发的文件放在这个目录中,就会自动同步了。
- dir_mode: 755
- file_mode: 744
#用dir_mode和file_mode来设置文件和目录的权限
|
[root@yang salt]
# cat /srv/salt/top.sls
base:
"DG-Server*"
:
- ssh_key.key
- zabbix.zabbix
[root@yang zabbix]
# cat /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/etc/zabbix_agentd
.conf.d
/UserParameter
.conf:
#指定在minion端生成的文件名
file
.managed:
-
source
: salt:
//zabbix/UserParameter
.conf
#指定在master同步的原始文件
- backup: minion
#当文件发生变化时,都会把原文件备份,备份文件目录:/var/cache/salt/minion/file_backup/
- mode: 744
- user: root
- group: root
|
saltstack常用功能也就批量执行命令或脚本,批量分发文件,自动同步目录与文件,整体来说很简单实用。但salt有一个缺点,zeromq虽性能很高,但稳定性略差,经常出现minion与master连接断开的情况,导致有些服务器会执行命令失败,这个请大家要注意。
去 github 下载 salt 的源安装即可
# git clone https://github.com/saltstack/salt.git # python setup.py install