SaltStack Salt Syndic 的 3 级拓扑执行速度非常慢

3-level topology with SaltStack Salt Syndic performs very slowly

我设计了一个包含 3 个虚拟机(testfer-01、testfer-02 和 testfer-03)的 3 级基础架构,并且第 3 个不可能达到第 1 个,因此第 2 个必须充当一个中间人。为此,我在第二层中使用了 salt-syndic 守护进程。更多信息:http://docs.saltstack.com/en/latest/topics/topology/syndic.html

总而言之,这就是每个 VM 上的 运行:

testfer-01: salt-master
testfer-02: salt-master, salt-syndic & salt-minion
testfer-03: salt-minion

我已经设置了以下文件(所有其他选项都是默认设置):

testfer-01:/etc/salt/master:

order_masters: True

testfer-02:/etc/salt/master:

syndic_master: testfer-01

testfer-02:/etc/salt/minion:

master: testfer-01

testfer-03:/etc/salt/minion:

master: testfer-02

然后,一旦密钥被接受,我就"successfully" 测试了来自顶层机器的连接。但是,花费 太多 时间:

[root@testfer-01 ~]# time salt '*' test.ping
testfer-02.local:
    True
testfer-03.local:
    True

real    0m15.412s
user    0m0.716s
sys     0m0.216s

有人知道为什么吗?

编辑:command/module 输出显示(本例中的那些 "True" 字符串)非常快(不超过 2 秒)。但是,如果我跟踪这个过程,这个过程会显示很多 gettimeofday 调用,持续大约 10 秒...

...
poll([{fd=30, events=POLLIN}], 1, 0)    = 0 (Timeout)
gettimeofday({1421223627, 431608}, NULL) = 0
select(0, NULL, NULL, NULL, {0, 10000}) = 0 (Timeout)
poll([{fd=9, events=POLLIN}], 1, 0)     = 0 (Timeout)
gettimeofday({1421223627, 441964}, NULL) = 0
poll([{fd=30, events=POLLIN}], 1, 0)    = 0 (Timeout)
gettimeofday({1421223627, 442102}, NULL) = 0
select(0, NULL, NULL, NULL, {0, 10000}) = 0 (Timeout)
poll([{fd=9, events=POLLIN}], 1, 0)     = 0 (Timeout)
gettimeofday({1421223627, 452523}, NULL) = 0
poll([{fd=30, events=POLLIN}], 1, 0)    = 0 (Timeout)
gettimeofday({1421223627, 452720}, NULL) = 0
...

我们刚刚在 repo.saltstack.com 上发布了 2016.3 版,这对 syndic 有几项非常重要的速度改进和修复。你能测试一下吗?

2016.3版本且无其他单一修改:

[root@testfer-01 ~]# salt-master --version
salt-master 2016.3.1 (Boron)
[root@testfer-01 ~]# time salt '*' test.ping
testfer-02:
    True
testfer-03:
    True

real    0m5.744s
user    0m0.552s
sys     0m0.123s