Saltstack是继 Puppet、Chef 之后新出现的配置管理及远程执行工具, 目前,SaltStack 正得到越来越多的瞩目。与 Puppet 相比,SaltStack 没有那么笨重,较为轻量;不像 Puppet 有一套自己的 DSL用来写配置,SaltStack 使用YAML作为配置文件格式,写起来既简单又容易,同时也便于动态生成;此外,SaltStack 在远程执行命令时的速度非常快,也包含丰富的模块。SaltStack 是开源软件,其源代码托管于GitHub上,安装及使用尽可参考其官方文档,也可以参考灿哥的blog
官方文档:http://docs.saltstack.com/topics/installation/rhel.html
对于集群中的多个节点,当在新加入的节点上直接使用yum安装salt-minion后,默认安装的是最新的版本(2014.1.0);而原来安装的salt-master的版本则是比较旧的0.17.4。安装完成后,更改minion端的配置文件,指定master和id,然后发现minion和master可以正常的通信。使用简单的测试命令,如test.ping,cmd.run 'ls /tmp/'等也可以正常使用。这样以为就安装完成了,打算收工做其他事情了。
后来,由于需要在salt-master端为minion端推送脚本,并在minion端执行,便在master端向新装minion端的节点,推送了脚本,如下所示:
salt '*' cmd.script salt://scripts/testWriteTime.sh
观察来自minion端的返回,发现了如下问题:有的minion可以执行成功,有的不可以。
不可以成功执行的输出信息如下:
可以成功执行的输入信息如下:
观察来自minion端的日志可以看到,命令已经成功的被传递到minion端了,只是在解析的时候发生了问题,如下:
通过分析发现,应该是由于salt的版本更新,里面的解析函数发生了变化,导致master端和minion端不能正常解析的。所以最简单的方法是在新装minion端的节点卸载了salt-minion,并下载0.17.4版本的salt重新安装。
具体操作如下:
yum remove salt-minion -y
cd ~/Downloads/
wget https://codeload.github.com/saltstack/salt/zip/0.17
unzip 0.17 && cd salt-0.17
python setup.py bulid && python setup.py intall
然后更改minion端的配置文件,指定master和id,启动salt-minion即可。