私はSaltをテストしています。 3つのVirtualBoxVMの簡単なテストセットアップがあります。1つのマシンでsalt-masterが実行され、他の2つのVMでsalt-minionsが実行されています。
ソルトミニオンVMのいずれかを起動すると、マスターに接続してコマンドを受信します。両方のミニオンVMを起動すると、両方が短時間接続され、その後、一方がドロップして、マスターから接続されていないものとして表示されます。
実際には、複数のVMクライアントをアクティブにする必要はありません。1VMクライアントと1 VM = salt-minion、切断されます。
ソルトミニオンを再起動すると、マスターに再接続してコマンドを再度受信します...少なくとも数分間は。最終的には、マスター上で切断されたものとして表示されます。デバッグでsalt-minionを実行しても、マスターで切断されていると表示される理由を説明するものは何も表示されません。
何が原因でしょうか?
編集:
私が使用しているOSはUbuntu14.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
接続の問題は通常、ZMQライブラリ(4.X.X未満)および/またはsaltバージョンが原因で発生します。使用しているバージョンを確認するために、マスターでsalt --versions-report
を実行し、salt-call --versions-report
を実行してください。実行する必要があります:
Salt: 2015.5.3
...
ZMQ: 4.0.5
単純なvagrant-saltデモ で問題を再現することも試みてください。 vagrantファイルのsaltバージョンを「2015.5.3」に変更する必要があることに注意してください
使用しているOSまたは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 %}
もう1つの「ハック」は、1分ごとにマシンにpingを実行することです。これを、salt-masterminion構成に追加するだけです。
"salt '*' test.ping > /dev/null":
cron.present:
- user: root
- minute: '*/1'
ミニオン構成ファイルで master_alive_interval
オプションを設定することにより、ミニオンからマスターにpingを実行することもできます。