报错信息:
ExecutionError: 'non-zero rc: 255' occured. Details: 'ssh -o 'StrictHostKeyChecking no' sdw2 ". /usr/local/greenplum-db/./greenplum_path.sh; $GPHOME/sbin/gpoperation.py"' cmd had rc=255 completed=True halted=False
stdout=''
stderr='ssh: connect to host sdw2 port 22: No route to host
原因分析:
任意segment宕机(网络不通状态)后,不能执行命令gpstart(也包括gpstop -r)。已segment_name=sdw2为例,因为在执行gpstart时,数据库需要执行"ssh -o 'StrictHostKeyChecking no' sdw2",此命令执行时报错“ssh: connect to host sdw2 port 22: No route to host”。
由此展开,当任意segment处于无法访问状态时,数据库不能执行启动或重启动作,因为根本启动不了。要启动的前提的,必须有原数量的segment在线,即使没安装数据库程序。
再展开,当master与segment同时宕机,此时无论是master或者standbymaster都无法再次启动,原因同上。唯一例外 是,master是网络故障,在不停机的情况下恢复网络连接,数据库仍可正常工作,但也不能执行gpstart,直到segment上线。
解决方法:
极端情况下,segment可能需要很长时间才能恢复到位。此时,为了不影响数据库使用,必须找一个机器,让它充当segment的位置,即使不安装GP服务。
我的方法是,直接修改master上面的host文件,将故障节点的IP改为127.0.0.1,此时数据库可恢复工作(mirror替代primary),在不影响工作的情况下,恢复segment上线,再执行gprecoverseg。
不知道我的方法是否合适,求教更好的方法,谢谢!