背景
因異常斷電后opengauss 5.0.0版本,一主兩備集群啟動失敗。
報錯不是主機,由于當時沒有截圖,查看日志后發現報錯是:
定位過程
Day1
1. 嘗試用另外兩臺機器啟動每臺機器
發現都報錯自己不是主機,像極了唐僧被妖怪抓走后互相帥鍋的猴子哥仨。
2.手動啟動
于是向openGauss交流群里的大佬求助,@半夏提供了一個手動啟動的命令。
gs_ctl start -D /opt/huawei/install/data/dn -M primary
執行的時候提示已經有服務在,建議用restart,于是改為用restart執行。
gs_ctl restart -D /opt/huawei/install/data/dn -M primary
同時在兩臺備機上面執行手動啟動,模式為standby。
gs_ctl restart -D /opt/huawei/install/data/dn -M standby
?繼續:
執行完后查看集群狀態,仍然是不可用。
3.連接上了
嘗試本地連接數據庫,是可以連接上了。
4. 導出數據
于是第一時間用gs_dump命令把數據先導出來了一份,這樣最差的情況也可以卸載重裝來恢復。
5. 改成單機版
但是雖然本地能連上,卻不能創建表,是個只讀事務(read-only transaction),業務還是不可用,期間還想著把業務代碼改成單機版的數據庫連接先應付應用,因為只讀作罷。
6. 業務代碼及datastudio工具也都連接不上。
起初我還以為是配置文件的問題,檢查和確認了postgres.conf及pg_hba.conf的配置。期間還執行過gs_install,以及gs_preinstall,但是install過程提示集群已安裝(因未截圖所以無法得到確切的提示,大意是已安裝)。
Day2
周一和大佬@半夏連線
1. 檢查磁盤空間
首先檢查了磁盤空間,也檢查了互信,互信正常,篇幅起見截圖就只截一個服務器的。
2. 修改為自動切換失敗
cm_ctl switchover -a
3. 強制升主
因為不可讀,于是把123服務器的數據庫又執行了一次強制升主。
cm_ctl set --cmsPromoteMode=PRIMARY_F -I 1
執行后確實改為了Primary,但仍然是不可讀,遠程也無法連接。
4. 斷電后操作
后來求助cm的大佬恩哥,恩哥提供了如下斷電后需要執行的操作
4.1??kill掉cm和om的相關進程:
gs_ssh -c "pkill -9 om_monitor -U omm; pkill -9 cm_agent -U omm; pkill -9 cm_server -U omm; touch $GAUSSHOME/bin/cluster_manual_start"
4.2. rm掉cmserver下的gstor, dcf_data和bin下面的配置文件
cd $GAUSSLOG
cd /opt/huawei/data/cmserver/cm_server
gs_ssh -c "rm /opt/huawei/data/cmserver/gstor /opt/huawei/data/cmserver/dcf_data $GAUSSHOME/bin/cluster_dynamic_config -rf"
4.3 rm掉bin下的集群手動啟動
3. gs_ssh -c "rm $GAUSSHOME/bin/cluster_manual_start"
Day3
1. 執行切換啟動模式為AUTO
cm_ctl set --cmsPromoteMode=AUTO -I 1
2. 于是直接拉恩哥上線
2.1?查看dcc日志:
cd $GAUSSLOG/cm/dcc
vim debug/dcc.dlog
命令截圖:
日志截圖:
?2.2 看到這個日志后,我提出懷疑是防火墻導致的連接建立失敗。
于是在三臺服務器上都執行了關防火墻的操作(生產環境不建議這樣操作,因是測試環境驗證問題,所以關掉防火墻,生產環境開放端口白名單)。
systemctl stop firewalldsystemctl disable firewalld
2.查詢防火墻狀態
systemctl status firewalld
3. 再查詢集群狀態,狀態即為正常:
cm_ctl query -Cvidp
四、成功解決!
緊張焦慮的兩天半,問題終于在兩位大佬的幫助下得到了解決,趁熱打鐵流水賬先記錄下過程,供各位專家同仁指導參考,再次感謝@半夏和恩哥(音)。
五、總?結
影響集群啟動的主要因素:
1. 防火墻是否關閉(或者是否打開端口白名單);
2. 刪除進程和文件的3步命令,至于手動啟動,并不是必須的步驟;
3. 斷電前預先stop集群。
附:一些Linux命令總結:
gs_ssh -c "ps x"
echo $GAUSSHOME
cm_ctl start
cm_ctl stop
cm_ctl query -Cvidp
cd $GAUSSLOG
source .bashrc –加載用戶的bash配置文件
ps ux
歡迎小伙伴們交流~
本文作者:趙鋒