升級典型問題 官網升級操作指引 離線升級,一般線上操作之前需要照著做一遍,但是由於數據量少、monit進程在測試環境沒有啟動等原因,一些操作、配置問題在測試過程中不會暴露,在生成操作的時候才暴露,下麵3項是比較常見的容易遺漏的: 1、monit進程沒停止引起升級失敗 monit進程是什麼 monit ...
升級典型問題
官網升級操作指引 離線升級,一般線上操作之前需要照著做一遍,但是由於數據量少、monit進程在測試環境沒有啟動等原因,一些操作、配置問題在測試過程中不會暴露,在生成操作的時候才暴露,下麵3項是比較常見的容易遺漏的:
1、monit進程沒停止引起升級失敗
monit進程是什麼
monit進程會對yasdb/yasagent/yasom3個進程做監控,如果出現異常重新拉起(註意不止yasdb,yasagent、yasom進程也會被拉起,如下演示殺死yasom、yasagent被重新拉起)。
monit進程沒有停止的後果
monit進程沒有停止的後果
如果升級過程沒有停止monit進程,在停止老的yasdb進程的時候會被自動拉起,升級程式識別到db在OPEN狀態,中止升級。
關鍵日誌:
處理方式
停止monit進程,重新執行yasdb升級命令。
停止方式
■ 使用yasboot(yasboot monit stop --cluster debug)
■ 使用kill -9
2、升級前沒預留足夠的空間做備份
為什麼需要備份空間
升級前需要整庫做backup,作為升級過程的終極回退手段。處理需要預留backup的空間外,升級過程還會做數據轉換,還需要預留下麵的空間:
離線升級中會創建一個臨時目錄(${舊版本的安裝目錄}/upgrade_tmp/backup)作為備份目錄,備份當前資料庫ctrl/system/undo/redo等文件的備份(主備環境中各節點分別備份至本機),需要確保擁有足夠的存儲空間。
官網說明:
沒有預留空間的後果
空間不足後果
升級過程,由於空間不足,資料庫會變為readonly狀態,導致升級中斷。
案例:22.2.4.1版本升級到22.2.8.105版本由於空間不足,導致升級失敗。
關鍵日誌:
處理方式
清理空間,保證空間足夠,執行rollback,rollback成功之後重新升級。
3、配置文件目錄錯誤
哪些目錄容易錯
集群托管toml文件註意使用舊版本的$YASDB_HOME、$YASDB_DATA,需要特別註意:
配置錯誤的後果
路徑配置錯誤後果
升級過程,會自動對monit進程做停止,但是如果路徑配置錯誤,會使得兜底的停止動作沒執行成功,進而引發上述monit進程沒停止的問題。
案例:在22.2.11.100升級到22.2.14.100的時候,錯誤將yasdb_home目錄設置為新的目錄,導致自動停止monit進程失敗。
關鍵日誌:
處理方式
檢查升級結果,如果出現already started and status is OPEN, not nomount的錯誤, 執行下麵步驟:
■ 確認yasdb進程沒有升級, 還是老版本的
■ 停止monit進程
■ 執行yasdb升級
升級失敗應急處理
根據日誌快速定位根因
shell命令yasboot的命令,會通過調用yasom,再通過yasom調用各個節點yasagent(主備、集群、分散式每個節點上都有yasagent),最終轉換成各個節點內部各個介面的調用。
因此,如果需要查看升級失敗的日誌,需要查看yasagent.log,路徑是$YASDB_HOME/om/{cluster-name}/log/yasagent.log(每天一個日誌文件,如果需要查看歷史日誌可以根據需要查找)
在yasagent.log查找錯誤日誌,如上述典型問題的關鍵日誌,yasagent.log可查找到。
根據錯誤原因判斷執行rollback
崖山DB的升級,實際是分為獨立的兩步:
■ 托管的升級(即yasom/yasagent)
■ 資料庫的升級(即yasdb)
官網上提供的升級rollback是針對資料庫升級的rollback,對升級過程中存在的數據轉換使用備份的數據做回退(ctrl/redo/undo),前提是資料庫升級之前的操作都沒有問題。因此我們遇到失敗的情況,有時候直接回退是沒有用的,如上面空間不足、路徑錯誤問題,直接rollback會有其他錯誤產生。
使用備份數據做restore
升級之後可能yasagent/yasom/yasdb都已經換了版本,在不能使用yasboot rollback的情況下,需要逐一做回退,使用備份數據做恢復。以下使用22.2.11.100升級到22.2.13.100(集群名稱為debug)為例,展示如何回退。
停止yasom/yasagent/yasdb
修改yasboot環境變數
yasboot命令執行的時候,執行的具體路徑配置是在~/.yasboot/{cluster-name}.env里配置的:
修改~/.yasboot/{cluster-name}.env,指到原來目錄
使用yasboot 重啟yasom/yasagent,重啟yasdb到nomount狀態
主要yasdb使用nomount狀態啟動:
使用備份文件恢復
參考命令: