Saltstack远程执行学习笔记:Returners – 21运维
通知: .-...

Saltstack远程执行学习笔记:Returners

saltstack 21运维 2615浏览 0评论

Return组件可以理解为SaltStack系统对执行Minion返回后的数据进行存储或者返回给其他程序,它支持多种存储方式,比如用MySQL、MongoDB、Redis、Memcache等,通过Return我们可以对SaltStack的每次操作进行记录,对以后日志审计提供了数据来源。目前官方已经支持30种Return数据存储与接口,我们可以很方便地配置与使用它。当然也支持自己定义的Return。在选择和配置好要使用的Return后,只需在salt命令后面指定Return即可。下边看下官网的介绍:

Returners
Salt returners allow saving minion responses in various datastores, or to various locations, in addition to displaying the responses at the CLI. Returners can be used to extend Salt to communicate with new, or custom, interfaces and to support new databases.

Full list of returners

Contains: list of returner modules used to store minion responses in Redis, Mongo, Cassandra, SQL, and others.
Writing returners
Contains: instructions for writing returner modules.

        上边是官网的一个关于returners的说明,大概意思是说返回信息可以存放到一些数据库中,比如redis monggo sql等,以供其他第三方软件或接口进行调用。 我们这里以官网的redis做一个学习,其他的请根据自己操作比如官网针对mysql实现介绍的已经很详细了。

1,Minion配置文件。

操作之前,我们需要在我们的minion端安装python的redis模块
  • wget –no-check-certificate https://pypi.python.org/packages/source/r/redis/redis-2.8.0.tar.gz
  • tar -zvxf redis-2.8.0.tar.gz
  • mv redis-2.8.0 python-redis-2.8.0
  • cd python-redis-2.8.0
  • python setup.py install

安装以后客户端执行python -c ‘import redis; print redis.VERSION’ 如果显示(2, 8, 0) 或其他其他版本号, 说明这个组件已经安装,如果显示 ImportError:No module named redis ,则需要按照上述代码进行一次安装。
完成以后,需要在Minion配置文件里面定义Return存储服务器信息。添加Redis服务器信息即可,代码如下:

redis.db: '0'
redis.host: '139.129.17.xx'
redis.port: 6379

具体服务器信息请根据自己情况设置,并注意防火墙开启6379端口。重启服务salt-minion。


2,查看运行结果。
操作之前,我们先到接受数据的redis上打开monitor,便于我们观察数据,比如我们master端执行一个模块cmd.run:

[[email protected] python-redis-2.6.6]# salt '*'  cmd.run  'hostname' --return redis
Master:
    Master
aliserver:
    aliserver
HK-VPN:
    HK-VPN

可以看到我们的redis这边显示结果如下:

[[email protected] ~]# redis-cli monitor
OK
1457682137.672080 [0 139.129.17.95:56127] "SELECT" "0"
1457682137.672320 [0 139.129.17.95:56127] "SET" "Master:20160311154217529879" "{\"fun_args\": [\"hostname\"], \"jid\": \"20160311154217529879\", \"return\": \"Master\", \"retcode\": 0, \"success\": true, \"fun\": \"cmd.run\", \"id\": \"Master\"}"
1457682137.672653 [0 139.129.17.95:56127] "LPUSH" "Master:cmd.run" "20160311154217529879"
1457682137.672810 [0 139.129.17.95:56127] "SADD" "minions" "Master"
1457682137.672932 [0 139.129.17.95:56127] "SADD" "jids" "20160311154217529879"
1457682137.759422 [0 115.29.249.51:39506] "SELECT" "0"
1457682137.784372 [0 115.29.249.51:39506] "SET" "aliserver:20160311154217529879" "{\"fun_args\": [\"hostname\"], \"jid\": \"20160311154217529879\", \"return\": \"aliserver\", \"retcode\": 0, \"success\": true, \"fun\": \"cmd.run\", \"id\": \"aliserver\"}"
1457682137.809483 [0 115.29.249.51:39506] "LPUSH" "aliserver:cmd.run" "20160311154217529879"
1457682137.834607 [0 115.29.249.51:39506] "SADD" "minions" "aliserver"
1457682137.859607 [0 115.29.249.51:39506] "SADD" "jids" "20160311154217529879"
1457682138.385378 [0 43.252.228.170:37942] "SELECT" "0"
1457682138.536959 [0 43.252.228.170:37942] "SET" "HK-VPN:20160311154217529879" "{\"fun_args\": [\"hostname\"], \"jid\": \"20160311154217529879\", \"return\": \"HK-VPN\", \"retcode\": 0, \"success\": true, \"fun\": \"cmd.run\", \"id\": \"HK-VPN\"}"
1457682138.687801 [0 43.252.228.170:37942] "LPUSH" "HK-VPN:cmd.run" "20160311154217529879"
1457682138.838358 [0 43.252.228.170:37942] "SADD" "minions" "HK-VPN"
1457682138.988801 [0 43.252.228.170:37942] "SADD" "jids" "20160311154217529879"

关于这个JSON串这里就不解释了,很容易理解。关于官网的其他例子这里就不一一演示了。通过这个例子大家能理解Return流程就行,配置方面官网都有很详细的说明。关于Return这里多说一点,大家如果了解上面的流程之后发现是每台minion跟存储服务器连接后发送返回数据。在大规模的Minion环境下并不适合企业级应用。

转载请注明:21运维 » Saltstack远程执行学习笔记:Returners

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 您好,文章末尾讲到,这种return的模式不适合大规模的minion集群,那return的数据通过master来进行存储会更好一点吗? return的ret信息通过MQ传送到master端,master端再进行统一处理,这样子对master的性能要求又会更高一些,总之都会又麻烦。 我这里有一个需求,将minion的ret信息存储在master的文件里,现有的return模块存储文件都是存储在minion端,是可以通过其他的方法将文件汇总到master端,但我觉得应该是有更简单的方法,不知道您有没有思路?谢谢
    葡萄2017-03-10 15:07 回复