วิธีการตั้งค่า STONITH ใน 2-node active / passive linux HA pacemaker คลัสเตอร์


12

ฉันกำลังพยายามตั้งค่าคลัสเตอร์ Linux-HA ที่ใช้งาน / passive (2 nodes) พร้อมด้วย corosync และเครื่องกระตุ้นการเต้นของหัวใจเพื่อเก็บฐานข้อมูล PostgreSQL- และทำงาน มันทำงานผ่าน DRBD และ service-ip หาก node1 ล้มเหลว node2 ควรใช้เวลามากกว่า เช่นเดียวกันถ้า PG รันบน node2 และล้มเหลว ทุกอย่างทำงานได้ดียกเว้นสิ่งที่สโตนนิช

ระหว่างโหนดเป็นการเชื่อมต่อ HA โดยเฉพาะ (10.10.10.X) ดังนั้นฉันจึงมีการกำหนดค่าอินเทอร์เฟซดังต่อไปนี้:

eth0            eth1            host
10.10.10.251    172.10.10.1     node1
10.10.10.252    172.10.10.2     node2

เปิดใช้งาน Stonith แล้วและฉันกำลังทดสอบกับ ssh-agent เพื่อฆ่าโหนด

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 แสดงให้เห็นว่า:

============
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 ]

ปัญหาคือเมื่อผมตัดการเชื่อมต่อระหว่าง eth0-อินเตอร์เฟซที่มันฆ่าทั้งสองโหนด ฉันคิดว่ามันเป็นปัญหาของโควรัมเพราะมีแค่ 2 โหนด แต่ฉันไม่ต้องการเพิ่มโหนดที่ 3 เพียงเพื่อคำนวณโควรัมที่ถูกต้อง

มีแนวคิดใดที่จะแก้ปัญหานี้หรือไม่?


ผลลัพธ์ของcrm_monลักษณะอย่างไรเมื่อคลัสเตอร์ของคุณอยู่ในสถานะล้มเหลว?
larsks

1
ตอนนี้ฉันกำลังใช้อุปกรณ์ stonith หนึ่งตัวซึ่งไม่ได้ทำงานบนโหนดเดียวกันเช่น postgres งานนี้เป็นไปตามคาด!
MMore

คำตอบ:


21

นี่เป็นคำถามที่เก่ากว่าเล็กน้อย แต่ปัญหาที่นำเสนอในที่นี้ขึ้นอยู่กับการเข้าใจผิดว่าอย่างไรและเมื่อเกิดความล้มเหลวในคลัสเตอร์โดยเฉพาะอย่างยิ่งคลัสเตอร์สองโหนดทำงานอย่างไร

ส่วนสำคัญคือ: คุณไม่สามารถทำการทดสอบการเฟลโอเวอร์ได้โดยปิดการสื่อสารระหว่างสองโหนด การทำเช่นนั้นจะส่งผลให้สิ่งที่คุณเห็นเป็นสถานการณ์ที่แยกออกจากกันด้วยสโทนิทร่วมกันเพิ่มเติม หากคุณต้องการทดสอบความสามารถในการฟันดาบก็จะสามารถทำได้ง่ายkillall -9 corosyncบนโหนดที่ใช้งานอยู่ วิธีอื่นคือcrm node fenceหรือstonith_admin -F.

จากคำอธิบายที่ไม่สมบูรณ์ของคลัสเตอร์ของคุณ (ซึ่งเป็นผลลัพธ์crm configure showและcat /etc/corosync/corosync.conf?) ดูเหมือนว่าคุณกำลังใช้ที่อยู่ 10.10.10.xx สำหรับการส่งข้อความเช่นการสื่อสาร Corosync / คลัสเตอร์ ที่อยู่ 172.10.10.xx เป็นที่อยู่เครือข่ายปกติ / บริการของคุณและคุณจะเข้าถึงโหนดที่กำหนดตัวอย่างเช่นการใช้ SSH โดยที่อยู่ 172.10.10.xx DNS ก็ดูเหมือนว่าจะแก้ไขชื่อโฮสต์โหนดเช่นnode1172.10.10.1

คุณกำหนดค่าสโตนนิชให้ใช้ SSH ซึ่งไม่ใช่ความคิดที่ดีมากในตัวของมันเอง แต่คุณอาจทดสอบ ฉันไม่ได้ใช้ด้วยตัวเอง แต่ฉันคิดว่าเอเจนต์ SSH STONITH ล็อกอินเข้าสู่โหนดอื่นและออกคำสั่ง shutdown เช่นssh root@node2 "shutdown -h now"หรือบางสิ่งที่เทียบเท่า

ตอนนี้จะเกิดอะไรขึ้นเมื่อคุณตัดการสื่อสารของคลัสเตอร์ระหว่างโหนด โหนดไม่เห็นแต่ละโหนดว่ามีชีวิตอยู่และดีขึ้นอีกต่อไปเนื่องจากไม่มีการสื่อสารระหว่างกันอีกต่อไป ดังนั้นแต่ละโหนดจะถือว่าเป็นเพียงผู้รอดชีวิตจากเหตุการณ์ที่โชคร้ายบางอย่างและพยายามที่จะกลายเป็น (หรือยังคงอยู่) โหนดที่ใช้งานหรือหลัก นี่คือความคลาสสิกและหวั่นสถานการณ์แยกสมอง

ส่วนหนึ่งของสิ่งนี้คือการทำให้แน่ใจว่าโหนดอื่น ๆ ที่เห็นได้ชัดและน่าล้มเหลวนั้นล้มเหลวสำหรับสิ่งที่ดีซึ่งเป็นที่ซึ่ง STONITH เข้ามาโปรดทราบว่าตอนนี้ทั้งสองโหนดกำลังเล่นเกมเดียวกัน: พยายามที่จะกลายเป็น เหนือทรัพยากรคลัสเตอร์ทั้งหมดรวมถึงการถ่ายภาพโหนดอื่น ๆ ในส่วนหัว

คุณอาจเดาได้ว่าเกิดอะไรขึ้นตอนนี้ node1ไม่ssh root@node2 "shutdown -h now"และไม่node2 ssh root@node1 "shutdown -h now"สิ่งนี้ไม่ได้ใช้เครือข่ายการสื่อสารของคลัสเตอร์ 10.10.10.xx แต่เป็นเครือข่ายบริการ 172.10.10.xx เนื่องจากทั้งสองโหนดยังมีชีวิตอยู่และดีดังนั้นจึงไม่มีปัญหาในการออกคำสั่งหรือรับการเชื่อมต่อ SSH ดังนั้นทั้งสองโหนดจึงยิงกันในเวลาเดียวกัน สิ่งนี้จะฆ่าทั้งสองโหนด

หากคุณไม่ได้ใช้สโตนนิทแล้วสมองซีกอาจมีผลกระทบที่เลวร้ายยิ่งขึ้นโดยเฉพาะอย่างยิ่งในกรณีของ DRBD ซึ่งคุณสามารถจบลงด้วยการที่โหนดทั้งสองกลายเป็นประถมศึกษา ข้อมูลเสียหายมีแนวโน้มที่จะเกิดขึ้นและสมองซีกจะต้องได้รับการแก้ไขด้วยตนเอง

ฉันขอแนะนำให้อ่านเนื้อหาบนhttp://www.hastexo.com/resources/hints-and-kinksซึ่งเขียนและดูแลโดยพวกที่สนับสนุน (และยังคงมีส่วนร่วม) ก้อนใหญ่ของสิ่งที่เราเรียกในวันนี้ "Linux HA ซ้อนกัน".

TL; DR : ถ้าคุณมีการตัดการสื่อสารระหว่างโหนดคลัสเตอร์ของคุณเพื่อทดสอบการติดตั้งรั้วของคุณที่คุณกำลังทำมันผิด ใช้killall -9 corosync, crm node fenceหรือstonith_admin -Fแทน การตัดการสื่อสารของคลัสเตอร์จะส่งผลให้เกิดสถานการณ์สมองแตกซึ่งสามารถและจะนำไปสู่ความเสียหายของข้อมูล


2

คุณสามารถลองเพิ่มauto_tie_breaker: 1ลงในส่วนควอรัมของ /etc/corosync/corosync.conf

เมื่อเปิดใช้งาน ATB คลัสเตอร์สามารถได้รับมากถึง 50% ของโหนดที่ล้มเหลวในเวลาเดียวกันในลักษณะที่กำหนดขึ้น พาร์ติชันคลัสเตอร์หรือชุดของโหนดที่ยังคงติดต่อกับโหนดที่มี nodeid ต่ำสุดจะยังคงทำงานอยู่ โหนดอื่น ๆ จะได้รับการสอบถาม


0

ลองอ่านบทQuorum และ Two-node Clustersของเอกสาร Pacemaker


คิดว่าคุณหมายถึงสิ่ง 'no-quorum-policy = ละเว้น' ฉันได้ตั้งไว้แล้ว (แก้ไขโพสต์แรกของฉันด้วย) ไม่ช่วยฉันที่นี่ คุณช่วยชี้ให้ดีขึ้นได้ไหม?
MMore

เอกสารแนะนำว่าเครื่องกระตุ้นหัวใจจะบันทึกข้อความเฉพาะบางอย่างถ้ามีปัญหาควอรัมกับคลัสเตอร์ คุณเห็นสิ่งนั้นในบันทึกของคุณหรือไม่ อะไรcrm_monแสดง
larsks

ฉันหาสฏไม่เจอ น่าสนใจในบันทึก crm_mon -1ฉันแก้ไขโพสต์ครั้งแรกของฉันที่มีข้อมูลของ
MMore

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.