在运行中的tarantool实例上重写配置

请问在课程中,是否可以在运行中的实例上覆盖单个box.cfg的参数。例如,添加一个副本。几天来,我一直在尝试通过docker服务栈在三个主机上部署三个副本。当我在每个服务器上运行时,一切正常,但是通过部署,它们互相看不到并且失败。我已经尝试了各种方法,挂起目标节点上的终端点,在请求时,它会给出容器升起的机器的IP地址,如果IP与SEED中指定的其中一个匹配,则替换容器的内部IP(否则它无法连接到自身)。 理论上,这一切都像我描述的那样工作,但是有一些怀疑,一切可能并不是完全相同,我认为问题在于在声明box.cfg之前,实例不会保留地址。遗憾的是我无法进入容器,因为它无法升起。我想到如果所有三个节点都以最小设置声明,并且在升起后监听子网,只要节点找到另一个,它就会将其写入复制并覆盖box.cfg。请告诉我有经验的人纠正我。

点赞
用户13626536
用户13626536

一些 box.cfg 参数是动态的,例如 box.cfg{listen=}。您可以根据需要从 Lua 代码中设置此参数。在您的情况下,如果容器稍后获取其 IP 地址,则仅需在 listen 中指定端口即可。这样,Tarantool 将在所有可能接口上监听。

replication_source 有点棘手。您可以动态设置它,但是您对 box.cfg 的第一次(初始化)调用应该是使用 replication_source。这是因为所有没有此参数初始化的实例都会创建自己的复制集,这将使它们无法加入到另一个复制集中。

您可以在此处阅读更多关于 Tarantool 复制架构的内容:https://www.tarantool.io/en/doc/latest/book/replication/repl_architecture/

2020-09-29 07:47:30