起因
mha做check时无法获得node的版本
问题判断
分析下源码
执行的代码实际是
ssh $MHA::ManagerConst::SSH_OPT_ALIVE $ssh_user_host -p $ssh_port apply_diff_relay_logs --version
这里附一下ssh用的const
SSH_OPT_ALIVE
"-o ServerAliveInterval=60 -o ServerAliveCountMax=20 -o StrictHostKeyChecking=no -o ConnectionAttempts=5 -o PasswordAuthentication=no -o BatchMode=yes";
SSH_OPT_CHECK
"-o StrictHostKeyChecking=no -o PasswordAuthentication=no -o BatchMode=yes -o ConnectTimeout=VAR_CONNECT_TIMEOUT";
我们这里简化一下进行测试
ssh node1 apply_diff_relay_logs --version
复现出错误
分析
已经可以确认是环境变量的问题。但是有以下现象
1、ssh登录上去时命令调用正常
2、ssh node1 env无法看到apply_diff_relay_logs的环境变量
解法1
使用ln -s制作软连接,将apply_diff_relay_logs等mha命令软连接到可用的bin下。测试ssh node1 date可以用,就在目标机which date,使用对应bin
解法2
通过查资料,得知这种无交互的ssh读取的变量是/etc/environment
那就修改其值,验证得到解决
附例
cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
学习原理,积累工具。孵化思路,下笔有道。