Bagaimana men-setup STONITH dalam 2-node linux pacemaker cluster aktif / pasif?

12

Saya mencoba untuk mengatur cluster Linux-HA aktif / pasif (2 node) dengan corosync dan alat pacu jantung untuk memegang dan menjalankan PostgreSQL-Database. Ini bekerja melalui DRBD dan layanan-ip. Jika simpul1 gagal, simpul2 harus mengambil alih. Sama jika PG berjalan pada node2 dan gagal. Semuanya berfungsi dengan baik kecuali hal STONITH.

Antara node adalah koneksi-HA khusus (10.10.10.X), jadi saya memiliki konfigurasi antarmuka berikut:

eth0            eth1            host
10.10.10.251    172.10.10.1     node1
10.10.10.252    172.10.10.2     node2

Stonith diaktifkan dan saya menguji dengan ssh-agent untuk membunuh node.

crm configure property stonith-enabled=true
crm configure property stonith-action=poweroff
crm configure rsc_defaults resource-stickiness=100
crm configure property no-quorum-policy=ignore

crm configure primitive stonith_postgres stonith:external/ssh \
                params hostlist="node1 node2"
crm configure clone fencing_postgres stonith_postgres

crm_mon -1 menunjukkan:

============
Last updated: Mon Mar 19 15:21:11 2012
Stack: openais
Current DC: node2 - partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
2 Nodes configured, 2 expected votes
4 Resources configured.
============

Online: [ node2 node1 ]

Full list of resources:

 Master/Slave Set: ms_drbd_postgres
     Masters: [ node1 ]
     Slaves: [ node2 ]
 Resource Group: postgres
     fs_postgres        (ocf::heartbeat:Filesystem):    Started node1
     virtual_ip_postgres        (ocf::heartbeat:IPaddr2):       Started node1
     postgresql (ocf::heartbeat:pgsql): Started node1
 Clone Set: fencing_postgres
     Started: [ node2 node1 ]

Masalahnya adalah: ketika saya memutuskan koneksi antara eth0-interface, itu membunuh kedua node . Saya pikir ini masalah dengan kuorum, karena hanya ada 2 simpul. Tetapi saya tidak ingin menambahkan simpul ke-3 hanya untuk perhitungan kuorum yang tepat.

Apakah ada ide untuk menyelesaikan masalah ini?

Lebih lagi
sumber
Seperti apa tampilan output crm_monketika cluster Anda dalam kondisi gagal?
larsks
1
Sekarang saya menggunakan satu perangkat batu yang tidak berjalan pada simpul yang sama seperti postgres. Pekerjaan ini seperti yang diharapkan!
MMore

Jawaban:

21

Ini adalah pertanyaan yang sedikit lebih tua tetapi masalah yang disajikan di sini didasarkan pada kesalahpahaman tentang bagaimana dan kapan failover dalam cluster, terutama cluster dua node, berfungsi.

Intinya adalah: Anda tidak dapat melakukan pengujian failover dengan menonaktifkan komunikasi antara kedua node. Melakukan hal itu akan menghasilkan apa yang Anda lihat, sebuah skenario otak-terpisah dengan STONITH yang saling melengkapi. Jika Anda ingin menguji kemampuan pagar, simpel killall -9 corosyncpada simpul aktif akan dilakukan. Cara lain adalah crm node fenceatau stonith_admin -F.

Dari uraian kluster Anda yang tidak lengkap (di mana output crm configure showdan cat /etc/corosync/corosync.conf?) Tampaknya Anda menggunakan alamat 10.10.10.xx untuk olahpesan, yaitu komunikasi Corosync / cluster. Alamat 172.10.10.xx adalah alamat jaringan biasa / layanan Anda dan Anda akan mengakses node yang diberikan, misalnya menggunakan SSH, dengan alamat 172.10.10.xx. DNS juga tampaknya mengatasi nama host simpul seperti node1ke 172.10.10.1.

Anda telah mengkonfigurasi STONITH untuk menggunakan SSH, yang bukan ide yang sangat bagus, tetapi Anda mungkin hanya menguji. Saya belum menggunakannya sendiri tetapi saya menganggap agen SSH STONITH log ke node lain dan mengeluarkan perintah shutdown, seperti ssh root@node2 "shutdown -h now"atau sesuatu yang setara.

Sekarang, apa yang terjadi ketika Anda memotong komunikasi cluster antara node? Node tidak lagi melihat setiap node hidup dan sehat, karena tidak ada lagi komunikasi di antara mereka. Dengan demikian setiap node menganggap itu adalah satu-satunya yang selamat dari beberapa peristiwa yang tidak menguntungkan dan mencoba untuk menjadi (atau tetap) node aktif atau primer. Ini adalah skenario otak ganda yang klasik dan menakutkan .

Bagian dari ini adalah untuk memastikan node yang lain, jelas dan mungkin gagal turun untuk selamanya, di situlah STONITH masuk. Perlu diingat bahwa kedua node sekarang memainkan permainan yang sama: mencoba untuk menjadi (atau tetap) aktif dan mengambil atas semua sumber daya klaster, serta memotret simpul lain di kepala.

Anda mungkin dapat menebak apa yang terjadi sekarang. node1lakukan ssh root@node2 "shutdown -h now"dan node2lakukan ssh root@node1 "shutdown -h now". Ini tidak menggunakan jaringan komunikasi cluster 10.10.10.xx tetapi jaringan layanan 172.10.10.xx. Karena kedua node pada kenyataannya hidup dan sehat, mereka tidak memiliki masalah mengeluarkan perintah atau menerima koneksi SSH, sehingga kedua node saling menembak secara bersamaan. Ini membunuh kedua node.

Jika Anda tidak menggunakan STONITH maka split-brain dapat memiliki konsekuensi yang lebih buruk, terutama dalam kasus DRBD, di mana Anda bisa berakhir dengan kedua node menjadi Pratama. Korupsi data mungkin terjadi dan otak-terpisah harus diselesaikan secara manual.

Saya sarankan membaca materi di http://www.hastexo.com/resources/hints-and-kinks yang ditulis dan dikelola oleh orang-orang yang berkontribusi (dan masih berkontribusi) sebagian besar dari apa yang sekarang kita sebut "Linux HA tumpukan".

TL; DR : Jika Anda memotong komunikasi cluster antara node Anda untuk menguji pengaturan pagar Anda , Anda salah melakukannya . Gunakan killall -9 corosync, crm node fenceatau stonith_admin -Fsebagai gantinya. Memotong komunikasi kluster hanya akan menghasilkan skenario otak terpisah, yang dapat dan akan menyebabkan korupsi data.

daff
sumber
2

Anda dapat mencoba menambahkan auto_tie_breaker: 1ke bagian kuorum dari /etc/corosync/corosync.conf

Ketika ATB diaktifkan, cluster dapat menderita hingga 50% dari node gagal pada saat yang sama, secara deterministik. Partisi cluster, atau set node yang masih berhubungan dengan node yang memiliki nodeid terendah akan tetap kuorat. Node-node lain akan tidak mencukupi.

1mi
sumber
0

Coba baca bab Kuorum dan klaster dua simpul dari dokumentasi Alat Pacu Jantung.

larsks
sumber
Pikirkan maksud Anda hal 'tanpa kuorum-kebijakan = abaikan'. Saya sudah mengaturnya (diedit juga posting pertama saya). Tidak membantu saya di sini. Bisakah Anda memberikan poin yang lebih baik?
MMore
Yah, dokumentasi menunjukkan bahwa alat pacu jantung akan mencatat beberapa pesan tertentu jika ada masalah kuorum dengan cluster. Apakah Anda melihatnya di log Anda? Apa yang crm_monditunjukkan?
larsks
Saya tidak dapat menemukan sth. menarik di log. Saya mengedit posting pertama saya dengan informasi crm_mon -1.
MMore