introduction
Il y a quelque temps, j'ai été chargé de développer un cluster de basculement pour PostgreSQL , fonctionnant dans plusieurs centres de données connectés par fibre optique dans la même ville, et capable de résister à une panne (par exemple, une panne de courant) d'un centre de données. J'ai choisi Pacemaker comme logiciel responsable de la tolérance aux pannes, car il s'agit de la solution officielle de RedHat pour créer des clusters de basculement. La bonne nouvelle est que RedHat en assure le support et que cette solution est universelle (modulaire). Avec son aide, il sera possible de fournir une tolérance aux pannes non seulement pour PostgreSQL, mais aussi pour d'autres services, soit en utilisant des modules standard, soit en les créant pour des besoins spécifiques.
Une question raisonnable s'est posée à propos de cette décision: dans quelle mesure un cluster de basculement sera-t-il tolérant aux pannes? Pour étudier cela, j'ai développé un banc de test qui simule diverses défaillances sur les nœuds du cluster, attend une récupération, reconstruit le nœud défaillant et continue les tests en boucle. Au départ, ce projet s'appelait hapgsql, mais au fil du temps, je me suis ennuyé avec le nom, qui n'a qu'une voyelle. Par conséquent, j'ai commencé à appeler les bases de données tolérantes aux pannes (et les adresses IP flottantes pointant vers elles) krogan (un personnage d'un jeu informatique, dans lequel tous les organes importants sont dupliqués), et les nœuds, les clusters et le projet lui-même - tuchanka (la planète où vit krogan).
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 :