Pemodelan Cluster Failover dengan PostgreSQL dan Pacemaker

pengantar



Beberapa waktu yang lalu, saya ditugaskan untuk mengembangkan cluster failover untuk PostgreSQL , beroperasi di beberapa pusat data yang terhubung oleh serat optik di kota yang sama, dan mampu menahan kegagalan (misalnya, pemadaman listrik) dari satu pusat data. Saya memilih Pacemaker sebagai perangkat lunak yang bertanggung jawab atas toleransi kesalahan, karena ini adalah solusi resmi dari RedHat untuk membuat cluster failover. Kabar baiknya adalah RedHat menyediakan dukungan untuk itu, dan ini adalah solusi universal (modular). Dengan bantuannya, dimungkinkan untuk memberikan toleransi kesalahan tidak hanya untuk PostgreSQL, tetapi juga untuk layanan lain, baik menggunakan modul standar, atau membuatnya untuk kebutuhan khusus.



Sebuah pertanyaan yang masuk akal muncul untuk keputusan ini: seberapa toleran kesalahan cluster failover? Untuk menyelidiki ini, saya mengembangkan bangku tes yang mensimulasikan berbagai kegagalan pada node cluster, menunggu pemulihan, memulihkan node yang gagal dan melanjutkan pengujian dalam satu lingkaran. Awalnya proyek ini bernama hapgsql, namun lama kelamaan saya bosan dengan namanya yang hanya memiliki satu huruf vokal. Oleh karena itu, saya mulai menyebut database yang toleran terhadap kesalahan (dan IP float yang menunjuk ke sana) krogan (karakter dari game komputer, di mana semua organ penting digandakan), dan node, cluster, dan proyek itu sendiri - tuchanka (planet tempat krogan tinggal).



open source- MIT. README ( , Pacemaker PostgreSQL), README () .



Krogan di tuchanka



VirtualBox. 12 ( 36GiB), 4 ( ). PostgreSQL, -, witness c quorum device ( -), 50%/50%, . -: , , quorum device. PostgreSQL, -: , , witness c quorum device. -. , , .



ntpd , ntpd (orphan mode). witness NTP-, , . witness , ( ). HTTP proxy witness, Yum-. , , , witness .





v0. CentOS 7 PostgreSQL 11 VirtualBox 6.1.





-, -. split-brain Pacemaker, STONITH (Shoot The Other Node In The Head) fencing. : , - , , ยซยป , , IPMI UPS. , IPMI UPS . , ( ) -. stonith- (IPMI, UPS ..) .



. , , . ยซ+1ยป . , , , .. split-brain. , , , watchdog, , IPMI.



( -), 50%/50% (-), . quorum device โ€” , -. ( ), 50%/50%. , quorum device, witness ( repmgr, ).



, , , . , ( ?), IP (float IP). IP, Pacemaker ( ). () , , ( ).



Tuchanka1 ( )





Tuchanka 1



, , slave- hot standby read only- ( ).



- . PostgreSQL ( PostgreSQL , ( ), Pacemaker). , ( float IP). -, . ฬ’ ( ) (), ( shared_buffers ..), , ( ) -. ( read only-) , .



, .



witness



saksi kegagalan



witness (quorum device) Tuchanka1, . witness , , . 2 3, . .



Tuchanka1



kegagalan Tuchanka1



- Tuchanka1. witness -. , float IP.



Tuchanka2 ()





Tuchanka2



. , . ( read only), float IP: krogan2 โ€” , krogan2s1 โ€” . , .



, .



Tuchanka2



kegagalan Tuchanka2



- witness . - , float IP: . , , ( connection ..) float IP. .



Tuchanka4 ( )





Tuchanka4



. , read-only ( ). Tuchanka4 โ€” , , . . ( ) - , PostgreSQL.



, . , , , -, -, . float IP. , - sql proxy, , . sql proxy, , . , (connection pool), .. ( SQL proxy , ).



Tuchanka4



kegagalan Tuchanka4



- (.. ) witness . - : , float IP ( read-write ); , float IP ( read only-).



, : float IP , . , sql proxy float IP; sql proxy , float IP URL . libpq IP, . , , , JDBC, sql proxy. , float IP , , .



: - . , - , , , ( ).



Tuchanka3 (3 -)





Tuchanka3



, -, . quorum device . - , โ€” . , ANY (slave1, slave2), , , . float IP . Tuchanka4 float IP . read-only SQL- sql proxy ( ), float IP, โ€” .



Tuchanka3



kegagalan Tuchanka3



- . float IP , โ€” float IP ( , float IP). . ( ) - ( ).



. , README. .





. test/failure. , . , :



test/failure 2 3


. , . , tmux. Tmux tmux , - default tmux, tmux. . setup.



tangkapan layar dari `tes / kegagalan`



, ( ) . Tuchanka2. :



  1. . :

    • failure โ€” ( ), .
    • reaction โ€” , . , , , . , , ( (Tuchanka3 Tuchanka4)), , , .
    • deviation โ€” () reaction ยซ ยป.
    • count โ€” .
  2. , . (), ฬ’ . (> 5 ) - .
  3. heart () โ€” . float IP . .
  4. beat () โ€” ยซ ยป, heart , float IP. . Tuchanka1 float IP ( , ), (), beat, heart .
  5. pcs mon. , .
  6. . โ€” . CPU Load ( ), , System Load ( Load Average, 5, 10 15 ), .
  7. , . โ€” โ€” .


. , , . , . ( ) - (> 5 , ) , - .



:



  1. , .
  2. Ready? โ€” ( ).
  3. (reaction).
  4. Fix โ€” ยซยป. .


, :



  • ForkBomb: "Out of memory" -.
  • OutOfSpace: . , , , , , PostgreSQL .
  • Postgres-KILL: PostgreSQL killall -KILL postgres.
  • Postgres-STOP: PostgreSQL killall -STOP postgres.
  • PowerOff: ยซยป VBoxManage controlvm "" poweroff.
  • Reset: VBoxManage controlvm "" reset.
  • SBD-STOP: SBD killall -STOP sbd.
  • ShutDown: SSH systemctl poweroff, .
  • UnLink: , VBoxManage controlvm "" setlinkstate1 off.


tmux "kill-window" Ctrl-b &, "detach-client" Ctrl-b d: , tmux , .





  • watchdog sbd , . , , , Corosync Pacemaker, sbd. Corosync PR#83 ( GitHub sbd), master. ( PR#83), Pacemaker - , , RedHat 8 . ยซยป , , , killall -STOP corosync, .



  • Pacemaker CentOS 7 sync_timeout quorum device, , . sync_timeout quorum device ( setup/setup1). Pacemaker, ( ), .



  • , LC_MESSAGES ( ) , , ru_RU.UTF-8, postgres , locale UTF-8, , ( pacemaker+pgsqlms(paf) postgres), UTF-8 . PostgreSQL , . , LC_MESSAGES=en_US.UTF-8 () .



  • wal_receiver_timeout ( 60s), PostgreSQL-STOP tuchanka3 tuchanka4 . , , . wal_receiver_timeout=0 PostgreSQL.



  • PostgreSQL ForkBomb ( ). ForkBomb . tuchanka3 tuchanka4, - , , . , - ( ). , . , , .





Deviant Art c :



Izin Noosborn




All Articles