المقدمة
منذ بعض الوقت ، تم تكليفي بتطوير مجموعة تجاوز الفشل لـ PostgreSQL التي تعمل في العديد من مراكز البيانات ، متحدة بواسطة الألياف داخل نفس المدينة ، ويمكنها تحمل عطل (على سبيل المثال ، انقطاع التيار الكهربائي) لمركز بيانات واحد. لقد اخترت جهاز تنظيم ضربات القلب باعتباره البرنامج المسؤول عن التسامح مع الخطأ ، لأن هذا هو الحل الرسمي من RedHat لإنشاء مجموعات تجاوز الفشل. النبأ السار هو أن RedHat يوفر الدعم لها ، وأن هذا الحل عالمي (معياري). بمساعدتها ، سيكون من الممكن توفير التسامح مع الخطأ ليس فقط لـ PostgreSQL ، ولكن أيضًا للخدمات الأخرى ، إما باستخدام الوحدات القياسية أو إنشائها لتلبية احتياجات محددة.
نشأ سؤال معقول لهذا القرار: إلى أي مدى ستتسامح مجموعة تجاوز الفشل؟ وللتحقق من ذلك ، قمت بتطوير منصة اختبار تحاكي حالات الفشل المختلفة في العقد العنقودية ، وتنتظر الاسترداد ، وتعيد بناء العقدة الفاشلة ، وتستمر في الاختبار في حلقة. في البداية كان يسمى هذا المشروع hapgsql ، ولكن بمرور الوقت شعرت بالملل من الاسم الذي يحتوي على حرف علة واحد فقط. لذلك ، بدأت في استدعاء قواعد البيانات المتسامحة مع الأخطاء ( وعناوين IP العائمة التي تشير إليها) krogan (شخصية من لعبة كمبيوتر ، يتم فيها تكرار جميع الأعضاء المهمة) ، والعقد ، والمجموعات ، والمشروع نفسه - tuchanka (الكوكب الذي يعيش فيه krogan).
الآن سمحت الإدارة بفتح المشروع لمجتمع المصدر المفتوح بموجب ترخيص MIT . سيتم قريبًا ترجمة README إلى اللغة الإنجليزية (لأنه من المتوقع أن يكون مطورو منظم ضربات القلب و 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 :
