《基于Patroni的Citus高可用方案實現-Oracle遷移專場(28頁).pdf》由會員分享,可在線閱讀,更多相關《基于Patroni的Citus高可用方案實現-Oracle遷移專場(28頁).pdf(28頁珍藏版)》請在三個皮匠報告上搜索。
1、嘉賓:賴偉嘉賓:賴偉公司:神州飛象(北京)數據科技有限公司公司:神州飛象(北京)數據科技有限公司郵箱:郵箱:目錄/Contents01020304Patroni簡單回顧Citus高可用需求分析高可用功能設計其他注意點01 Patroni簡單回顧基于Python的開源軟件(MIT協議)使用Dcs管理支持虛擬化技術集中式文件配置支持復制槽、pg_rewind可自定義外部callback腳本https:/ 可使用Etcd、Zookeeper或consul作為Dcs支持k8s、docker等容器化搭建及管理單節點部署只需配置一個ymal文件,無需另外配置數據庫文件可按照實際情況配置配置是否使用pg _
2、rewind快速恢復可配置on_role_change、on_start、on_stop、on_restart及on_reload等情況的callback scriptpatroni 一般由2n+1個節點組成,正常節點數不少于n+1可提供服務Zk1Zk2Zk3node Anode Bnode CDcsDcs:etcd Consul Zookeeper02 Citus高可用需求分析非非MX節點類型節點類型數據庫動作數據庫動作元數據更新元數據更新cnwork(主)(備)(備)(主)cn(主)元數據MX節點類型節點類型數據庫動作數據庫動作元數據更新元數據更新cnwork(主)(備)(備)(主)CN(
3、主)元數據所有MXwork(主)節點故障,無需元數據更新,Patroni可達要求。2.work節點故障,Patroni只能切換數據庫實際角色,無法更新元數據。1.主cn節點的元數據更新a.可考慮利用Patroni的callback功能。b.編寫其他進程。2.MX架構中的所有MX work節點元數據更新。a.可使用Citus9.0版本(master_node_update加入了異步更新元數據功能)。b.修改源碼(如我司加入了fdd_failover函數)。Patroni原生功能,可在on_role_change、on_start、on_stop、on_restart及on_reload等情況下執
4、行指定腳本。優點:Patroni原生功能觸發,開發成本較低。缺點:所有節點都需要部署callback腳本,不易管理。patroniwork1 備Zookeeperpromotescriptcallback主cn元數據可在Patroni的上層編寫一個程序,用于實時檢查元數據信息和集群內部主從真實角色是否對應,從而觸發子進程處理。優點:部署和配置方式靈活可調。缺點:1.相對開發成本較高。2.需要保證該程序的可靠性。patroni主cnZookeeperfddswfddsw元數據獲取集群狀態1.當work節點主備變化后,及時更新主cn節點上元數據信息。2.監控并跟進故障節點,發出告警。3.記錄fai
5、lover及switchover時更新節點的步驟,可重入執行。4.需考慮進程本身高可用問題。03高可用功能設計1.只在主cn節點上運行。2.復用Patroni的yml文件。3.靈活擴展,增加可靠性。1.MX與非MX架構在更新元數據時步驟一致。2.整理switchover與failover流程邏輯,封裝函數。1.通過Citus中的元數據表與Dcs中的真實角色做比對。(不可?。?.Zookeeper中watch每個scope中的leader鍵。(有缺陷)3.采用新舊leader比對的方式。1.為什么要做區分?switchover是計劃內的,failover突發的。switchover需要一些前置步
6、驟來保障數據不丟失,降低切換風險。2.怎么區分?可在switchover時對Dcs中某個特定的鍵設置標志值區分。1.某個步驟偶然性執行失敗,告警且再次執行。2.fddsw執行中崩潰,新激活的fddsw可從中斷處繼續執行。12234崩潰激活等待激活1.節點故障、恢復的決策依據。2.判斷節點類型依據。cn_nodes:cn_scope:-node_192_168_120_130 -node_192_168_120_131wk_nodes:wk_scope:-node_192_168_120_133 -node_192_168_120_134 wk2_scope:-node_192_168_120_
7、135 -node_192_168_120_1361.具有原生patronictl功能。2.區分cn與work,只在為work節點時執行前置步驟。3.進度及結果回饋。1.保留patronictl管理工具。2.以patronictl為藍本,在post請求前后加入邏輯。3.設置告警及超時時間。WK2masterpatroni WK1CN1fddswreplicapatroni WK2secondaryWK2replicapatroni WK1CN1fddswmasterpatroni WK1unavailablesecondaryZookeeperZookeeperleader=old_leade
8、rleader!=old_leader執行執行元元數據修數據修改流程改流程WK2secondaryprimaryWK2replicapatroni WK1CN1fddswmasterpatroni WK1secondaryZookeeperWK2primary更改更改old_leaderWK2replicapatroni WK1CN1fddswmasterpatroni WK1 secondaryZookeeperWK2primary執行執行switchover 1fddswctl1設置切換標志設置切換標志 執行前置步驟執行前置步驟WK1primary unavailabledemote promotefddswctl清除切換標志清除切換標志leader=old_leaderleader=old_leader2342304 其他注意點1.安裝Patroni 建議用virtualenv打包。2.多節點做數據庫備份盡量錯開時段,以免對Dcs造成影響。盡量將Dsc節點放置在cn節點。3.ttl、loop_wait、retry_timeout 不要設置過短