迁移服务器后IEx无法连接远程shell问题排查求助
问题背景
我们将生产环境的推送服务器迁移至新环境,通过安装新服务器并复制内容完成操作,怀疑部分复制内容需修改但无法定位。
使用版本
推测为Elixir 1.10.1。
操作步骤
- 通过
push_server start_iex脚本启动IEx,执行命令:
/var/www/push_server/releases/0.6.2/iex --cookie 3NEQTAUBMGBZPSFEWWTGFUNUKWVKBAS5VD3TBC3HZYXI7CIMNJRA==== --sname push_server --erl '-mode embedded' --erl-config /var/www/push_server/tmp/push_server-0.6.2-20230630162707-579c.runtime --boot /var/www/push_server/releases/0.6.2/start --boot-var RELEASE_LIB /var/www/push_server/lib --vm-args /var/www/push_server/releases/0.6.2/vm.args --werl
- 尝试通过
push_server remote启动远程会话,执行命令:
/var/www/push_server/releases/0.6.2/iex --cookie 3NEQTAUBMGBZPSFEWWTGFUNUKWVKBAS5VD3T3HZYXI7CIMNJRA==== --sname rem-c8cc-push_server --remsh push_server --boot /var/www/push_server/releases/0.6.2/start_clean --boot-var RELEASE_LIB /var/www/push_server/lib
错误信息
Erlang/OTP 23 [erts-11.0.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [hipe] Could not contact remote node push_server@emtpush, reason: :nodedown. Aborting...
已做排查
- 两个命令使用相同cookie;在第一个会话执行
node得到的节点名与第二个会话提示已下线的节点一致;原生产服务器可正常执行远程命令。 - 尝试指定
remsh为push_server@emtpush、push_server@127.0.0.1、push_server@localhost,IP方式提示未启用全限定主机名,其余方式仍报错。
求助问题
- 是否存在明显错误?
- 还可分析哪些数据来定位问题?
解答
1. 明显错误排查
- Cookie不一致:对比两个命令的cookie发现,远程命令的cookie少了
BC字符(原启动命令cookie是3NEQTAUBMGBZPSFEWWTGFUNUKWVKBAS5VD3TBC3HZYXI7CIMNJRA====,远程命令里是3NEQTAUBMGBZPSFEWWTGFUNUKWVKBAS5VD3T3HZYXI7CIMNJRA====)。Erlang节点间通信要求cookie完全一致,差一个字符都会导致节点无法连通,直接触发:nodedown错误。 - 主机名解析隐患:新环境下
emtpush主机名可能存在解析异常,若/etc/hosts未配置该主机名指向127.0.0.1,Erlang节点无法正确解析对方节点的主机名部分,也会导致连通失败。
2. 后续定位分析方向
- 验证节点连通性:
- 在启动的IEx会话中执行
Node.list(),查看是否能发现远程节点(先启动远程会话再执行); - 使用Erlang命令
net_adm:ping(push_server@emtpush).在本地节点测试连通性,返回:pong表示正常,:pang表示不通。
- 在启动的IEx会话中执行
- 检查vm.args配置:查看
/var/www/push_server/releases/0.6.2/vm.args中的-name或-sname配置,确认节点名称是否与实际启动的一致;同时检查是否有-setcookie配置,若存在会覆盖命令行传入的cookie,导致冲突。 - 排查网络与端口:确保新环境下4369端口(epmd服务端口)未被防火墙拦截,执行
epmd -names查看已注册的节点,确认epmd服务正常运行。 - 确认主机名配置:执行
hostname命令检查服务器主机名是否为emtpush,若不一致,修改主机名或在/etc/hosts中添加127.0.0.1 emtpush映射。 - 查看运行日志:检查推送服务器的日志文件(通常在
/var/www/push_server/logs目录下),查找节点启动失败、cookie不匹配或网络相关的错误信息。
内容的提问来源于stack exchange,提问作者Sinc
相关产品推荐
相关产品推荐

