天天看點

【DB吐槽大會】第7期 - PG slot 無failover

背景

1、産品的問題點

  • slot不支援failover

2、問題點背後涉及的技術原理

  • PG的邏輯日志解析功能需要slot來記錄解析的WAL日志位點, 下次解析從位點繼續. 除了記錄位點, PG還需要依賴位點來保留未解析的WAL日志, 以及保留用于解析WAL日志的catalog版本(例如表結構資訊). 但是SLOT不支援failover, 使用PG流複制建構的主從HA架構下一旦發生HA, 從庫(切換成主庫)是沒有SLOT資訊的.
  • 使用pg_upgrade進行大版本更新時,slot也會被清理.

3、這個問題将影響哪些行業以及業務場景

  • 使用PG流複制建構的主從HA架構, 并且有邏輯日志訂閱需求的場景(例如跨執行個體共享某些表的資料、将資料庫的增量日志同步到其他系統, 例如mq或者搜尋引擎等. 使用了PG的pub,sub來進行執行個體之間的表級資料同步).

4、會導緻什麼問題?

  • 發生主從切換後, SLOT位點丢失, 需要重建SLOT, 存在丢失增量資料的風險. (例如老的主節點與切換到新的主庫建立的slot位置之間存在WAL GAP.)
  • 大版本更新無法保留slot

5、業務上應該如何避免這個坑

  • 發生HA時, 立即在新的主庫建立同名的slot, 但是wal gap導緻的邏輯增量日志丢失無解.
  • 大版本更新屬于計劃内維護, 可以在更新前消費掉所有的wal日志, 并且在更新後立即建立slot. 保證沒有wal gap導緻的邏輯增量日志問題.

6、業務上避免這個坑犧牲了什麼, 會引入什麼新的問題

  • 增加了管理複雜度

7、資料庫未來産品疊代如何修複這個坑

  • slot failover功能. (RDS PG 已修複, 期待PolarDB PG開源這個功能)