PostgreSQL DBA(120) - pgAdmin(HA with Patroni)
本節簡單介紹了PostgreSQL HA with Patroni的架構,並對DCS等做了簡單的描述。
PostgreSQL HA with Patroni的架構比較好理解,大體由以下三部分組成:
1.PostgreSQL例項,包括主節點、從節點等;
2.Patroni,與PG部署在一起,作為PG與DCS的溝通媒介;
3.DCS分散式配置儲存,用於儲存公共的配置資訊。
Bot Design Pattern
由於PostgreSQL無法直接與DCS進行通訊,因此Patroni與PostgreSQL例項使用了Bot Design Pattern,Patroni的作用在於:
1.管理PostgreSQL例項;
2.與DCS通訊GET/SET DCS的相關資訊;
3.確定PostgreSQL例項的升級和降級。
Bot Design Pattern的架構圖如下所示:
Patroni使用Python實現了Bot Design Pattern。
DCS
在目前的實現中,DCS一般使用etcd等分散式K/V儲存器,但從更抽象的層次來看,這一部分可以理解為中心資料儲存。因此,從技術角度來看可以完全使用檔案亦或是普通的資料庫,而之所以要用etcd這類分散式K/V儲存是因為要保證DCS的HA,否則DCS會成為整個PostgreSQL HA架構中的“單機”故障點。理論上來說,所有具備HA特性的儲存均可作為DCS,而不僅限於etcd、zk、consul等這類用於分散式共享配置和服務發現的K/V儲存管理器。
選主
DCS的選主由DCS自行處理,比如etcd使用raft演算法選主,zk使用ZAB演算法選主;PostgreSQL的選主需要依賴Bot(也就是Patroni),WAL位置最新的優先,在WAL位置一樣的情況下,競爭性的獲取DCS的分散式“鎖”,先到先成為主節點,如下圖所示:
HA with Patroni的架構簡單易懂,有興趣可通過官方提供的Docker映象來體驗。
參考資料
Managing High Availability in PostgreSQL – Part III: Patroni
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-2662551/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL DBA(121) - pgAdmin(HA:PAF vs repmgr vs Patroni)SQL
- PostgreSQL DBA(168) - pgAdmin(config:checkpoint)SQL
- PostgreSQL DBA(164) - pgAdmin(Drop column)SQL
- PostgreSQL DBA(156) - pgAdmin(Rollback setting)SQL
- PostgreSQL DBA(101) - pgAdmin(statement timeout)SQL
- PostgreSQL DBA(160) - pgAdmin(prepare transaction)SQL
- PostgreSQL DBA(147) - pgAdmin(Scripts for freeze)SQL
- PostgreSQL DBA(173) - pgAdmin(Network latency)SQL
- PostgreSQL DBA(161) - pgAdmin(synchronous_commit)SQLMIT
- PostgreSQL DBA(128) - pgAdmin(Load balance with HAProxy)SQL
- PostgreSQL DBA(106) - pgAdmin(Don't do this:NOT IN)SQL
- PostgreSQL DBA(102) - pgAdmin(Row Level Security)SQL
- PostgreSQL DBA(170) - pgAdmin(Queries For Index Maintenance)SQLIndexAINaN
- PostgreSQL DBA(166) - pgAdmin(Parallelism, what next?)SQLParallel
- PostgreSQL DBA(143) - pgAdmin(Monitoring PostgreSQL VACUUM processes#2)SQL
- PostgreSQL DBA(167) - pgAdmin(config:work_mem)SQL
- PostgreSQL DBA(132) - pgAdmin(unix_socket_directories)SQL
- PostgreSQL DBA(104) - pgAdmin(Don't do this:Rule)SQL
- PostgreSQL DBA(103) - pgAdmin(Don't do this:Encoding)SQLEncoding
- PostgreSQL DBA(165) - pgAdmin(Create Function選項)SQLFunction
- PostgreSQL DBA(148) - pgAdmin(Show script for psql command)SQL
- PostgreSQL DBA(107) - pgAdmin(Don't do this:NOT IN vs NOT EXISTS)SQL
- PostgreSQL DBA(144) - pgAdmin(AUTOVACUUM:引數解析#2)SQL
- PostgreSQL DBA(145) - pgAdmin(AUTOVACUUM:引數解析#3)SQL
- PostgreSQL DBA(154) - pgAdmin(bool轉換為smallint)SQL
- PostgreSQL DBA(152) - pgAdmin(log_XXX parameter:when)SQL
- PostgreSQL DBA(153) - pgAdmin(log_XXX parameter:what)SQL
- PostgreSQL DBA(151) - pgAdmin(log_XXX parameter:where)SQL
- PostgreSQL DBA(159) - pgAdmin(Allow vacuum command to process indexes in paralleSQLIndex
- PostgreSQL DBA(157) - pgAdmin(OOM & max_locks_per_transaction )SQLOOM
- PostgreSQL DBA(105) - pgAdmin(Don't do this:psql&inheritance)SQL
- PostgreSQL DBA(109) - pgAdmin(Don't do this:Don't use BETWEEN)SQL
- PostgreSQL DBA(119) - pgAdmin(LIMIT:Index Scan vs Bitmap Index Scan)SQLMITIndex
- PostgreSQL DBA(117) - pgAdmin(Don't do this: Don't use serial)SQL
- PostgreSQL DBA(146) - pgAdmin(pg_dumpall vs pg_dump)SQL
- PostgreSQL DBA(32) - HA#1(pg_rewind切換)SQL
- PostgreSQL DBA(108) - pgAdmin(Don't do this:Don't use upper names)SQL
- PostgreSQL DBA(112) - pgAdmin(Don't do this:Don't use timestamptz(0))SQL