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 () .

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 ( )

, , slave- hot standby read only- ( ).
- . PostgreSQL ( PostgreSQL , ( ), Pacemaker). , ( float IP). -, . ฬ ( ) (), ( shared_buffers ..), , ( ) -. ( read only-) , .
, .
witness

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

- Tuchanka1. witness -. , float IP.
Tuchanka2 ()

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

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

. , read-only ( ). Tuchanka4 โ , , . . ( ) - , PostgreSQL.
, . , , , -, -, . float IP. , - sql proxy, , . sql proxy, , . , (connection pool), .. ( SQL proxy , ).
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 -)

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

- . float IP , โ float IP ( , float IP). . ( ) - ( ).
. , README. .
. test/failure. , . , :
test/failure 2 3
. , . , tmux. Tmux tmux , - default tmux, tmux. . setup.

, ( ) . Tuchanka2. :
- . :
- failure โ ( ), .
- reaction โ , . , , , . , , ( (Tuchanka3 Tuchanka4)), , , .
- deviation โ () reaction ยซ ยป.
- count โ .
- , . (), ฬ . (> 5 ) - .
- heart () โ . float IP . .
- beat () โ ยซ ยป, heart , float IP. . Tuchanka1 float IP ( , ), (), beat, heart .
-
pcs mon. , . - . โ . CPU Load ( ), , System Load ( Load Average, 5, 10 15 ), .
- , . โ โ .
. , , . , . ( ) - (> 5 , ) , - .
:
- , .
- Ready? โ ( ).
- (reaction).
- 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 :
