ฉันมีปัญหาเดียวกันอย่างแน่นอน แต่ปัญหาของฉันไม่ได้อยู่ในไฟร์วอลล์หรือในอะแดปเตอร์อีเธอร์เน็ตของฉัน แต่ในการตั้งค่า "น้ำหนัก" ของสคริปต์ตรวจสอบ
นี่คือการกำหนดค่าของฉัน:
MASTER:
vrrp_instance haproxy {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
สำรอง:
vrrp_instance haproxy {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
Check_script:
vrrp_script chk_haproxy {
script "python /root/ha_check.py"
interval 2 # check every 2 seconds
weight 2
rise 2
fall 2
}
เหตุผลที่อาจารย์ปฏิเสธที่จะปล่อยวีไอพีก็เพราะแม้ว่าสคริปต์จะล้มเหลว แต่ต้นแบบก็ยังคงมีหมายเลขลำดับความสำคัญสูงกว่าจากเซิร์ฟเวอร์ BACKUP สิ่งนี้เกิดขึ้นเนื่องจากการตั้งค่า "น้ำหนัก" ใน check_script นั้นไม่เพียงพอที่จะครอบคลุม "GAP" ระหว่างหมายเลขลำดับความสำคัญซึ่งหมายถึงการเพิ่มหมายเลขลำดับความสำคัญของเซิร์ฟเวอร์ BACKUP ที่ใหญ่กว่าหนึ่งในเซิร์ฟเวอร์หลัก ฉันจะอธิบายเพิ่มเติม:
ตามคู่มือการเก็บรักษาไว้ตัวเลขที่เป็นบวกในการตั้งค่า "น้ำหนัก" จะเพิ่มหมายเลขนั้นไปยังลำดับความสำคัญหากการตรวจสอบสำเร็จ
ตัวเลขติดลบจะลบจำนวนนั้นออกจากหมายเลขลำดับความสำคัญหากการตรวจสอบล้มเหลว
ดังนั้นตามการกำหนดค่าของฉัน:
ลำดับความสำคัญของเซิร์ฟเวอร์ความล้มเหลวก่อนหน้าของสคริปต์:
MASTER: 152
BACKUP: 100
Failover_IP: MASTER
ip failover "คว้า" อย่างถูกต้องโดยเซิร์ฟเวอร์หลักเนื่องจาก Master มีลำดับความสำคัญสูงกว่าเมื่อเทียบกับเซิร์ฟเวอร์สำรอง (152> 100)
ลำดับความสำคัญของเซิร์ฟเวอร์หลังจากความล้มเหลวของสคริปต์:
เซิร์ฟเวอร์ MASTER: 148
BACKUP เซิร์ฟเวอร์: 102
Failover_IP: STILL ON MASTER
ip failover ยังคงอยู่บนเซิร์ฟเวอร์หลักเนื่องจาก Master มีลำดับความสำคัญสูงกว่าอีกครั้งเมื่อเทียบกับ BACKUP (148> 102) เซิร์ฟเวอร์ MASTER ปฏิเสธที่จะปล่อย IP และถูกต้องเนื่องจากความสำคัญของเขาสูงกว่าเซิร์ฟเวอร์อื่น
ทางออกสำหรับสถานการณ์ของฉันคือ:
โซลูชัน -1: เปลี่ยนหมายเลขลำดับความสำคัญของเซิร์ฟเวอร์ทั้งสองเพื่อให้มี "GAP" ไม่มาก
ตัวอย่างเช่น:
ลำดับความสำคัญหลัก: 150
ลำดับความสำคัญสำรอง: 149
น้ำหนักที่ตรวจสอบ: ตามที่เป็น (2)
ด้วยการกำหนดค่าข้างต้นเมื่อสคริปต์ประสบความสำเร็จ (หมายถึงทุกอย่างก็โอเค) ลำดับความสำคัญจะเป็น:
Master: 152
Backup: 149
IP_Location: On Master (152> 149)
เมื่อสคริปต์ล้มเหลว:
Master: 150
Backup: 151
IP_Location: On Backup (151> 150)
โซลูชัน - 2: เปลี่ยนหมายเลขน้ำหนักของสคริปต์จาก 2 เป็น -60