我正在测试 Salt。我有 3 个 VirtualBox VM 的简单测试设置 - 其中一台机器上运行 salt-master,另外两台 VM 上运行 salt-minions。
我可以启动任一个 salt minion VM,它们将连接到主服务器并接收命令。如果我启动两个 minion VM,它们都会在短时间内连接,然后其中一个会断开连接并显示为未连接到主服务器。
实际上,我甚至不需要激活多个 VM 客户端。使用 1 个 VM 客户端和 1 个 VM salt-minion,它将断开连接。
我可以重新启动 salt-minion,它会重新连接到 master 并再次接收命令……至少需要几分钟。最终,它会在 master 上显示为断开连接。在调试中运行 salt-minion 似乎没有显示任何内容来解释为什么它在 master 上显示为断开连接。
这可能是什么原因造成的?
编辑:
我使用的操作系统是 Ubuntu 14.04。除了 salt-master 包之外,主服务器和从服务器环境相同。--versions-report
在主服务器和从服务器上运行会得到以下版本:
Salt: 2015.5.3
Python: 2.7.6 (default, Mar 22 2014, 22:59:56)
Jinja2: 2.7.2
M2Crypto: 0.21.1
msgpack-python: 0.3.0
msgpack-pure: Not Installed
pycrypto: 2.6.1
libnacl: Not Installed
PyYAML: 3.10
ioflo: Not Installed
PyZMQ: 14.0.1
RAET: Not Installed
ZMQ: 4.0.4
Mako: Not Installed
Tornado: Not Installed
Debian source package: 2015.5.3+ds-1trusty1
答案1
连接问题通常是由 ZMQ 库(低于 4.XX)和/或 salt 版本引起的。请salt --versions-report
在 master 上运行,salt-call --versions-report
以查看您正在使用的版本。您应该运行:
Salt: 2015.5.3
...
ZMQ: 4.0.5
您还应该尝试使用简单的 vagrant-salt 演示。请注意,您需要将 vagrant 文件中的 salt 版本更改为“2015.5.3”
您尚未指定所使用的操作系统或 Salt 版本,但 salt 使用的 zmq 包存在持续问题,导致连接缓慢和掉线。强烈建议升级 zmq 包:(这是基于 redhat 的 sls 文件)
{% if grains['os'] in ('RedHat', 'CentOS', 'Fedora') %}
{% if grains['os'] == 'Fedora' %}
{% set repotype = 'fedora' %}
{% else %}
{% set repotype = 'epel' %}
{% endif %}
saltstack-zeromq4:
pkgrepo.managed:
- humanname: Copr repo for zeromq4 owned by saltstack
- baseurl: http://copr-be.cloud.fedoraproject.org/results/saltstack/zeromq4/{{ repotype }}-$releasever-$basearch/
- gpgcheck: 0
- skip_if_unavailable: True
- enabled: 1
{% endif %}
{% if grains['os'] in ('RedHat', 'CentOS', 'Fedora') %}
update_zmq:
pkg:
- latest
- pkgs:
- zeromq
- python-zmq
- order: last
cmd:
- wait
- name: echo service salt-minion restart | at now + 1 minute
- watch:
- pkg: update_zmq
{% endif %}
另一个“黑客”方法是每隔一分钟左右 ping 一次机器,只需将其添加到 salt-master minion 配置中:
"salt '*' test.ping > /dev/null":
cron.present:
- user: root
- minute: '*/1'
你也可以通过设置master_alive_interval
minion 配置文件中的选项。