memsql-deploy 叶节点始终失败

memsql-deploy leaf node consistently failed

在与 master 相同的主机上到 memsql-deploy 叶节点总是失败并出现相同的错误。切换到新机器上运行同样失败

部署主角色的步骤如下:

# memsql-ops memsql-deploy -a Af53bfb  -r master -P 3306 --community-edition
2017-03-24 16:15:54: Je5725b [INFO] Deploying MemSQL to 172.17.0.3:3306
2017-03-24 16:15:59: Je5725b [INFO] Installing MemSQL
2017-03-24 16:16:02: Je5725b [INFO] Finishing MemSQL Install
Waiting for MemSQL to start...
MemSQL successfully started

部署主节点后添加叶节点的直接步骤如下:

# memsql-ops memsql-deploy -a Af53bfb  -r leaf -P 3308       
2017-03-24 16:16:43: J32c71f [INFO] Deploying MemSQL to 172.17.0.3:3308
2017-03-24 16:16:43: J32c71f [INFO] Installing MemSQL
2017-03-24 16:16:46: J32c71f [INFO] Finishing MemSQL Install
Waiting for MemSQL to start...
MemSQL failed to start: Failed to start MemSQL:

        set_mempolicy: Operation not permitted
setting membind: Operation not permitted

错误消息背后的可能原因是什么?我可以按照什么方式找出根本原因或修复?

能不能试一下师傅:

memsql-ops start
memsql-ops memsql-deploy --role master -P 3306 --community-edition

关于代理:

memsql-ops start
memsql-ops follow -h <host of primary agent> -P <port of primary agent if configured to use one>
memsql-ops memsql-deploy --role leaf -P 3308 --community-edition  

在Google上搜索了一天,我相信我终于找到了这个错误的根本原因。我觉得奇怪为什么之前没有人问过,因为它应该比我更经常发生。

这个问题的真正原因是我在非 NUMA 机器上按照 MemSQL 的最佳实践建议安装了 numactl 包。这将有效地让第一个节点以外的 memsql 节点尝试 运行 numactl 子命令 set_mempolicy 将各个 MemSQL 节点绑定到 CPU 但是这个命令最终会失败。而从memsql-ops开始的子命令memsql-startmemsql-deploy都将失败。

解决方法非常简单,只需删除numactl。那么一切都会好起来的。此解决方法特别适用于某些基于虚拟化的 memsql 部署,例如 Docker