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
我设计了一个包含 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