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?
sumber
crm_mon
ketika cluster Anda dalam kondisi gagal?Jawaban:
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 corosync
pada simpul aktif akan dilakukan. Cara lain adalahcrm node fence
ataustonith_admin -F
.Dari uraian kluster Anda yang tidak lengkap (di mana output
crm configure show
dancat /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 sepertinode1
ke 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.
node1
lakukanssh root@node2 "shutdown -h now"
dannode2
lakukanssh 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 fence
ataustonith_admin -F
sebagai gantinya. Memotong komunikasi kluster hanya akan menghasilkan skenario otak terpisah, yang dapat dan akan menyebabkan korupsi data.sumber
Anda dapat mencoba menambahkan
auto_tie_breaker: 1
ke bagian kuorum dari /etc/corosync/corosync.confsumber
Coba baca bab Kuorum dan klaster dua simpul dari dokumentasi Alat Pacu Jantung.
sumber
crm_mon
ditunjukkan?crm_mon -1
.Periksa ini untuk HA cluster menggunakan Pacemaker: http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Clusters_from_Scratch/index.html
sumber