報錯信息:
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。
不知道我的方法是否合適,求教更好的方法,謝謝!