天天看点

自动化运维工具Saltstack详细介绍

    Saltstack是一个新的基础设施管理工具。目前处于快速发展阶段,可以看做是pssh+弱化的Puppet的组合。间接的反映出了saltstack的两大功能:远程执行和配置管理。

   Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具。由Master和Minion构成,通过ZeroMQ进行通信。

centos/redhatserver端安装

1

2

3

4

<code>#导入EPEL YUM源 </code>

<code>rpm -Uvh http:</code><code>//mirror</code><code>.pnl.gov</code><code>/epel/5/i386/epel-release-5-4</code><code>.noarch.rpm</code>

<code>#服务器master的安装 </code>

<code> </code><code>yum -y </code><code>install</code> <code>salt-master</code>

centos/redhat客户端minion安装

<code>yum -y </code><code>install</code> <code>salt-minion</code>

ubuntu/debian server端和client端安装

5

6

7

<code>wget -q -O - </code><code>"http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key"</code><code>| apt-key add -</code>

<code>echo</code> <code>"deb http://debian.saltstack.com/debianwheezy-saltstack main"</code> <code>/etc/apt/sources</code><code>.list</code>

<code>echo</code> <code>"debhttp://debian.saltstack.com/debian wheezy-saltstack main"</code> <code>|</code><code>tee</code><code>/etc/apt/sources</code><code>.list</code>

<code>apt-get update</code>

<code>apt-get installsalt-master      </code><code># On the salt-master</code>

<code>apt-get installsalt-minion      </code><code># On each salt-minion</code>

<code>apt-get </code><code>install</code> <code>salt-syndic</code>

<code>vi</code> <code>/etc/salt/master</code>

<code>interface: 115.28.2.1  </code><code>#此处是server端监听的地址。</code>

<code>auto_accept: True    </code><code>#此处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能。</code>

启动master

<code>/etc/salt/master</code> <code>-d  </code><code>#后台启动</code>

<code>/etc/salt/master</code>  <code>#前台启动,方便调试</code>

8

9

<code>#vi /etc/salt/minion</code>

<code>master: 115.28.2.1  </code><code>#这里改成你的master服务器地址</code>

<code>id</code><code>: web01   </code><code>#建议这里修改成主机名,便于master端分辨</code>

<code> </code> 

<code>#在配置文件末尾加入下面内容,每隔5分钟自动同步master配置,效果等同于在客户端执行salt-call state.highstate或在server端执行 salt '*'state.highstate</code>

<code>schedule:</code>

<code>  </code><code>highstate:</code>

<code>    </code><code>function</code><code>: state.highstate</code>

<code>    </code><code>minutes: 5</code>

启动minion:

<code>/etc/salt/minion</code> <code>-d </code><code>#后台启动</code>

<code>/etc/salt/minion</code>  <code>#前台启动,方便调试</code>

<code>注:minion启动后,自动会生成公钥私钥,并把公钥发送到master端。minion不监听端口,全靠和master保持长连接,可通过</code><code>netstat</code> <code>-an|</code><code>grep</code> <code>ES来查看是否有连接。</code>

master端证书存放路径:/etc/salt/pki/master/minions

<code>salt-key  -L            </code><code>#查询所有接收到的证书</code>

<code>salt-key  -a &lt;证书名&gt;   </code><code>#接收单个证书</code>

<code>salt-key  -A            </code><code>#接受所有证书</code>

<code>salt-key  -d &lt;证书名&gt;   </code><code>#删除单个证书</code>

<code>salt-key  -D            </code><code>#删除所有证书</code>

语法:

<code>salt [选项]  </code><code>'&lt;target&gt;'</code>   <code>&lt;</code><code>function</code><code>&gt;  [arguments]</code>

常用命令举例:

10

11

<code>salt </code><code>'*'</code>  <code>test</code><code>.</code><code>ping</code>   

<code>#*为匹配所有主机,test.ping为salt一个函数,注:*号是正则,若分了多个组,可以类似于web*,只匹配web服务器</code>

<code>salt </code><code>'*'</code>  <code>cmd.run </code><code>'df -h'</code>  

<code>#查看所有主机的磁盘信息,cmd.run执行单个命令</code>

<code>salt </code><code>'*'</code>  <code>cmd.script salt:</code><code>//hello</code><code>.sh </code>

<code>salt </code><code>'*'</code>  <code>cmd.script  salt:</code><code>//scripts/runme</code><code>.sh </code><code>'arg1 arg2 "arg 3"'</code>

<code>#cmd.script执行一个脚本,即把本地脚本拷贝到远程主机上执行,hello.sh要放在指定的文件存放路径,默认是/srv/salt/</code>

<code>salt </code><code>'*'</code>  <code>state.highstate</code>

<code>       </code><code>#向客户端推送master端配置。</code>

<code>salt </code><code>'*'</code> <code>cmd.run </code><code>'df -h '</code>  <code>-t 5   </code>

<code>    </code><code>#超时控制</code>

在配置文件/etc/salt/master中加入如下内容:

<code>[root@yang salt]</code><code># vimaster.d/group.conf</code>

<code>nodegroups:</code>

<code>  </code><code>group1: </code><code>'L@DG-Server-27,DG-Server-28'</code>

<code>  </code><code>group2: </code><code>'L@qsmind'</code>

<code>#分组格式可在/etc/salt/master中搜索group看示例</code>

分组执行:

<code>salt -N group1 cmd.run</code><code>'hostname'</code>

salt-ssh批量密码认证登陆,参考峰云大神的博文

<a href="http://rfyiamcool.blog.51cto.com/1030776/1305710" target="_blank">http://rfyiamcool.blog.51cto.com/1030776/1305710</a>

注:该处状态检查salt使用的是test.ping,如果服务器禁ping,则该处不准。

<code>salt-run manage.status </code><code>#查看所有客户端up/down状态</code>

<code>salt-run manage.up    </code><code>#只显示up状态的客户端</code>

<code>salt-run manage.down  </code><code>#只显示down状态的客户端</code>

在master端执行:

<code>语法:</code>

<code>salt-</code><code>cp</code> <code>[options] </code><code>'&lt;target&gt;'</code><code>SOURCE DEST</code>

<code>   </code> 

<code>示例:</code>

<code> </code><code>salt-</code><code>cp</code> <code>'*'</code>  <code>/etc/hosts</code>   <code>/etc/hosts</code> <code>#把master上的hosts文件分发到所有主机。</code>

可以把salt-call state.highstate命令放在minion端的定时任务中,来进行自动请求同步。

也可以把salt '*' state.highstate放在master端的定时任务中,来进行自动推送到所有机器。

也可以在/etc/salt/minion配置文件中加入如下内容,如下是每隔5分钟同步,效果一样。

<code>          </code><code>schedule:</code>

<code>          </code><code>highstate:</code>

<code>                 </code><code>function</code><code>:state.highstate</code>

<code>                 </code><code>seconds:300</code>

指定同步的目录后,以后文件只需放到该目录下就会自动同步到minion端。

12

13

14

15

<code>[root@yang salt]</code><code># cat /srv/salt/top.sls</code>

<code>base:</code>

<code>  </code><code>"DG-Server*"</code><code>:</code>

<code>    </code><code>- ssh_key.key</code>

<code>- zabbix.zabbix</code>

<code>#在top.sls文件中指定哪些主机访问哪些目录</code>

<code>[root@yang salt]</code><code># cat /srv/salt/zabbix/zabbix.sls</code>

<code>/usr/local/zabbix/scripts</code><code>:     </code><code>#指定minion端同步后生成的目录</code>

<code>  </code><code>file</code><code>.recurse:</code>

<code>- </code><code>source</code><code>: salt:</code><code>//zabbix/zabbix_scripts</code>    <code>#指定要master端同步的原始目录,以后只要把想要分发的文件放在这个目录中,就会自动同步了。</code>

<code>- dir_mode: 755</code>

<code>- file_mode: 744</code>

<code>#用dir_mode和file_mode来设置文件和目录的权限</code>

如下配置,当文件出现变更时,匹配DG-Server开头的主机,同步文件到这些minion上,并设置为对应的文件权限。

<code>[root@yang zabbix]</code><code># cat /srv/salt/zabbix/zabbix.sls</code>

<code>/usr/local/zabbix/etc/zabbix_agentd</code><code>.conf.d</code><code>/UserParameter</code><code>.conf:   </code><code>#指定在minion端生成的文件名</code>

<code>file</code><code>.managed:</code>

<code>  </code><code>- </code><code>source</code><code>: salt:</code><code>//zabbix/UserParameter</code><code>.conf    </code><code>#指定在master同步的原始文件</code>

<code>  </code><code>- backup: minion           </code><code>#当文件发生变化时,都会把原文件备份,备份文件目录:/var/cache/salt/minion/file_backup/</code>

<code>  </code><code>- mode: 744</code>

<code>  </code><code>- user: root</code>

<code>  </code><code>- group: root</code>

 例:如httpd的配置文件进行更改时,自动重新加载配置文件。(该图取于网上,说明见图上)

<a href="http://s3.51cto.com/wyfs02/M02/49/E8/wKioL1QemaGxy1UEAAQB3FWJkRY467.jpg" target="_blank"></a>

当有需要使用一些statstack没有的方法时,可以自己增加模块。

参考峰云大神的文章吧。

<a href="http://rfyiamcool.blog.51cto.com/1030776/1262537" target="_blank">http://rfyiamcool.blog.51cto.com/1030776/1262537</a>

saltstack常用功能也就批量执行命令或脚本,批量分发文件,自动同步目录与文件,整体来说很简单实用。但salt有一个缺点,zeromq虽性能很高,但稳定性略差,经常出现minion与master连接断开的情况,导致有些服务器会执行命令失败,这个请大家要注意。

     本文转自杨云1028 51CTO博客,原文链接:http://blog.51cto.com/yangrong/1556712,如需转载请自行联系原作者

继续阅读