标準 PostgreSQL 異步流複制叢集
預設情況下,Patroni 搭建的流複制叢集中的所有 standy 節點都是異步流複制;主節點挂掉,選舉新主節點時,會綜合考量時間線等資訊,選舉一個最好的節點為新主;
備節點挂掉就挂掉了,不影響主節點的任何操作;
标準 PostgreSQL 同步流複制叢集
給 Patroni 增加如下配置,進而間接給所有的 PostgreSQL 節點的 postgresql.conf 增加如下配置
synchronous_commit: "on"
synchronous_standby_names: "*"
Patroni 自動處理此配置在所有的 replica 節點 的 postgresql.conf 生成對應的 primary_conninfo 和 primary_slot_name 配置,組建一個标準的同步流複制叢集;這種情況下如果 primary and secondary 節點同時挂掉,第三個可能沒有包含全部事務的節點被提升為主;
Patroni 增強版
Patroni 提供了synchronous_mode 配置一個增強版的叢集;主要是為了避免上述沒有包含全部事務的節點被提升為主的情況。synchronous_mode=on 時的表現為主節點挂掉時,不會自動選擇新主節點,挂掉的主節點被修複重新上線之後,自動接着成為主節點。使用者也可以在主節點挂掉時,人工判斷之後,手工幹預手動執行failover,為叢集産生一個新的主節點。
在這種模式下,如果備節點挂掉,Patroni将會快速切換主節點為單機模式(去掉同步流複制配置);以不影響主節點對外提供服務。