開頭還是介紹一下群,如果感興趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有問題,有需求都可以加群群內有各大數據庫行業大咖,CTO,可以解決你的問題。加群請聯系 liuaustin3 ,(共1730人左右 1 + 2 + 3 + 4 +5) 4群(230+),另歡迎 OpenGauss 的技術人員加入。
基于alexander 的俄國口音,部分內容未能完全翻譯。
大家好我叫亞歷山大.庫是金,今天我給大家介紹的是patroni 3.0的一些新的規劃和功能,主要有以下的一些議題,功能介紹,問題的修復,以及新的功能。
Patrnoi 本身支持多種部署,包含最小化部署,支持多種的分布式組件,主要是ETCD ,通過分布式服務,來自動發現節點的狀態情況,并將狀態進行匯總,通過leader key 來標識當前的primary point 節點,同時這里狀態會根據TTL 進行狀態在獲取,key 是有租約的,所以這些key會在租約到期失效后,進行key 的更新。
當主庫出現故障,無法進行KEY 的狀態更新,相關的主鍵的信息就會被抹去,這里的故障的起因,有網絡的原因或者主機的原因,數據庫服務的原因等等。當超過最大的等待時間后,剩余的兩個節點 B C 開始進行選主的競爭,因為他們都發現A 節點不存在了。
在確認A 節點不存在無法進行連接的情況下, B C 會開始申請主節點,經過分布式選主,最終成功申請到leader的KEY 的節點將成為新的主節點。
在之前的版本的PATRIONI 中有一個問題關于 DCS 導致的誤切換的問題,DCS(Distributed configuration store) ,之前的版本的patroni 主要依賴DCS 來解決LEADER 的選舉和檢測網絡分區的工作,這里primary 節點必須在DCS 中更新數據,才能持續的成為主節點,但如果更新失敗,則無法成為主節點,PG 會將主節點降級,為解決這個問題,我們引入了一個新的選項,failsafe_mode 他通過在DCS/config 中的全局動態配置進行啟用,這里如果主節點可以通過patroni rest api訪問到集群中的其他成員,那么這個主節點即使無法更新數據,那么也會持續保留主節點的狀態,不會隨意降級。
另一個更新主要是在生產系統中,有使用邏輯復制槽的情況,在進行主從切換的過程中,復制槽會丟失的問題,在之前我們不允許在Patroni 的系統中,重建邏輯復制槽,現在我們可以通過函數pg_replication_slot_advance 來重建復制槽。
同時在3.0?針對支持多個同步方式的從庫,切換是基于replication lag 的,切換中會更傾向于安全切換。
支持PostgreS 13版本中PG_REWIND 中的?--restore-target-wal 的功能,通過但這里不包括在Debain/Ubuntu 中部署的PG13 14 版本。
在配置文件中,也進行了更新,比如針對與配置的參數預先發現其中的錯誤的問題。
另外還有一些軟件方面的改進和增強,我們徹底不在支持低于3.6一下的PYTHON ,?并且要使用psycopg3 ,這里我們也會在操作pg_ctl promote 命令前來通過預先的一個腳本,我們認為是一個鉤子,來進行一些安全性的判斷和切換前的預先的工作。通過也在關閉節點命令前會通過腳步來做一些準備工作,必然把pgboucer先暫停了的工作等等。
之前一些鏈接在判斷的時候,是長連接,在這樣的方式下會等待很長時間來完成準備的工作,這邊進行改善,通過TTL 秒的方式將連接進行關閉。
另外在判斷PG 是否存活中,也需要去檢測PGDATA 變量, 之前是通過os.listdir()函數來進行判斷,但是這里反映的速度很慢,這里我們改變方式通過pg_control文件來獲得第一次的數據。
在之前的版本,patroni 在更新狀態前會等待postgres 被關閉,但基于PG的關閉在某些情況比較慢,而現在patroni 判斷一個節點的關閉是通過pg_controldata 中打印出shut down即可,判斷節點關閉。
今天是星期六,外面的陽光真好,我沒有那么多的時間說,(這不是杜撰這是他的原話),5年前PG10 添加的功能,關于同步復制節點的設置,我們看下面的例子 ANY2(node1 node2)? ANY2(node1,node2,node3),如果要切換我應該切換那個,誰能告訴我怎么辦??
當節點M4加入后,怎么修改相關的配置選擇項,怎么能保證修改的選擇項是正確的。
另外我們也準備在patroni 中整合關于復制槽failover的部分,雖然patroni我們有了自己的解決方案,但是我們有一些問題沒有解決,所以我們在后面要整合新的解決方案,來彌補我們自己的解決方案的問題。
除此以外,我們還將添加對于citus的支持的部分,對于read scaling 的改造是簡單的。
基于我們之前的一些問題,我們建議老的版本盡快升級到3.0?.