Saltstack是一个新的基础设施管理工具。目前处于快速发展阶段,可以看做是pssh+弱化的Puppet的组合。间接的反映出了saltstack的两大功能:远程执行和配置管理。
Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具。由Master和Minion构成,通过ZeroMQ进行通信。
Saltstack的master端监听4505与4506端口,4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口;salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,master通过这条TCP连接对客户端控制,如果连接断开,master对客户端就无能为力了。当然,客户端若检查到断开后会定期的一直连接master端的。
1. saltstack安装
centos/redhatserver端安装
#导入EPEL YUM源 rpm -Uvh http://mirror.pnl.gov/epel/5/i386/epel-release-5-4.noarch.rpm #服务器master的安装 yum -y install salt-master
centos/redhat客户端minion安装
#导入EPEL YUM源 rpm -Uvh http://mirror.pnl.gov/epel/5/i386/epel-release-5-4.noarch.rpm yum -y install salt-minion
ubuntu/debian server端和client端安装
wget -q -O - "http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key"| apt-key add - echo "deb http://debian.saltstack.com/debianwheezy-saltstack main" /etc/apt/sources.list echo "debhttp://debian.saltstack.com/debian wheezy-saltstack main" |tee/etc/apt/sources.list apt-get update apt-get installsalt-master # On the salt-master apt-get installsalt-minion # On each salt-minion apt-get install salt-syndic
2. saltstacks配置文件修改
master端配置文件修改
vi /etc/salt/master interface: 115.28.2.1 #此处是server端监听的地址。 auto_accept: True #此处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能。
启动master
/etc/salt/master -d #后台启动 /etc/salt/master #前台启动,方便调试
minion端配置文件修改:
#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
启动minion:
/etc/salt/minion -d #后台启动 /etc/salt/minion #前台启动,方便调试 注:minion启动后,自动会生成公钥私钥,并把公钥发送到master端。minion不监听端口,全靠和master保持长连接,可通过netstat -an|grep ES来查看是否有连接。
3. salt-key证书管理
master端证书存放路径:/etc/salt/pki/master/minions
salt-key -L #查询所有接收到的证书 salt-key -a <证书名> #接收单个证书 salt-key -A #接受所有证书 salt-key -d <证书名> #删除单个证书 salt-key -D #删除所有证书
4. salt实时批量操作
语法:
salt [选项] ‘<target>‘ <function> [arguments]
常用命令举例:
salt ‘*‘ test.ping #*为匹配所有主机,test.ping为salt一个函数,注:*号是正则,若分了多个组,可以类似于web*,只匹配web服务器 salt ‘*‘ cmd.run ‘df -h‘ #查看所有主机的磁盘信息,cmd.run执行单个命令 salt ‘*‘ cmd.script salt://hello.sh salt ‘*‘ cmd.script salt://scripts/runme.sh ‘arg1 arg2 "arg 3"‘ #cmd.script执行一个脚本,即把本地脚本拷贝到远程主机上执行,hello.sh要放在指定的文件存放路径,默认是/srv/salt/ salt ‘*‘ state.highstate #向客户端推送master端配置。 salt ‘*‘ cmd.run ‘df -h ‘ -t 5 #超时控制
5. salt分组管理
在配置文件/etc/salt/master中加入如下内容:
[[email protected] salt]# vimaster.d/group.conf nodegroups: group1: ‘[email protected],DG-Server-28‘ group2: ‘[email protected]‘ #分组格式可在/etc/salt/master中搜索group看示例
分组执行:
salt -N group1 cmd.run‘hostname‘
6. salt-ssh远程主机批量自动登陆
salt-ssh批量密码认证登陆,参考峰云大神的博文
http://rfyiamcool.blog.51cto.com/1030776/1305710
7. salt-run检查客户端up状态
注:该处状态检查salt使用的是test.ping,如果服务器禁ping,则该处不准。
salt-run manage.status #查看所有客户端up/down状态 salt-run manage.up #只显示up状态的客户端 salt-run manage.down #只显示down状态的客户端
8. salt-cp批量拷贝文件
在master端执行:
语法: salt-cp [options] ‘<target>‘SOURCE DEST 示例: salt-cp ‘*‘ /etc/hosts /etc/hosts #把master上的hosts文件分发到所有主机。
9. saltstack定时同步
可以把salt-call state.highstate命令放在minion端的定时任务中,来进行自动请求同步。
也可以把salt ‘*‘ state.highstate放在master端的定时任务中,来进行自动推送到所有机器。
也可以在/etc/salt/minion配置文件中加入如下内容,如下是每隔5分钟同步,效果一样。
schedule: highstate: function:state.highstate seconds:300
10. saltstack自动分发目录
指定同步的目录后,以后文件只需放到该目录下就会自动同步到minion端。
[[email protected] salt]# cat /srv/salt/top.sls base: "DG-Server*": - ssh_key.key - zabbix.zabbix #在top.sls文件中指定哪些主机访问哪些目录 [[email protected] 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来设置文件和目录的权限
11. saltstack自动分发文件
如下配置,当文件出现变更时,匹配DG-Server开头的主机,同步文件到这些minion上,并设置为对应的文件权限。
[[email protected] salt]# cat /srv/salt/top.sls base: "DG-Server*": - ssh_key.key - zabbix.zabbix [[email protected] 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
12. saltstack进程状态管理
例:如httpd的配置文件进行更改时,自动重新加载配置文件。(该图取于网上,说明见图上)
13. saltstack自定义模块
当有需要使用一些statstack没有的方法时,可以自己增加模块。
参考峰云大神的文章吧。
http://rfyiamcool.blog.51cto.com/1030776/1262537
saltstack常用功能也就批量执行命令或脚本,批量分发文件,自动同步目录与文件,整体来说很简单实用。但salt有一个缺点,zeromq虽性能很高,但稳定性略差,经常出现minion与master连接断开的情况,导致有些服务器会执行命令失败,这个请大家要注意。