ค้นหาเว็บไซต์

Keepalived: การกำหนดค่า High Availability ด้วย IP Failover บน CentOS/RHEL


ในบทความนี้ เราจะพิจารณาการกำหนดค่าเฟลโอเวอร์แบบ High-Available ของพร็อกซีเซิร์ฟเวอร์ Squid (Linux) สองตัวเพื่อเข้าถึงอินเทอร์เน็ตจาก LAN ขององค์กร ในการสร้างการกำหนดค่าเฟลโอเวอร์ เราจะสร้างคลัสเตอร์ HA โดยใช้ keepalived
คลัสเตอร์ HA คือกลุ่มของเซิร์ฟเวอร์ที่มีความซ้ำซ้อนในตัวเพื่อลดเวลาหยุดทำงานของแอปในกรณีที่ฮาร์ดแวร์หรือซอฟต์แวร์มีปัญหา ของเซิร์ฟเวอร์ใด ๆ ในกลุ่ม ตามคำจำกัดความนี้ ต้องดำเนินการต่อไปนี้เพื่อการดำเนินการที่ถูกต้องของคลัสเตอร์ HA:

  • ตรวจสอบสถานะเซิร์ฟเวอร์

  • การสลับทรัพยากรโดยอัตโนมัติในกรณีที่เซิร์ฟเวอร์ล้มเหลว

Keepalived เปิดใช้งานทั้งสองอย่างนี้ Keepalived เป็นดีมอนระบบในระบบ Linux ที่เปิดใช้งานบริการเฟลโอเวอร์และโหลดบาลานซ์ ความล้มเหลวมีให้โดยที่อยู่ IP แบบลอยที่เปลี่ยนไปใช้เซิร์ฟเวอร์อื่นหากที่อยู่หลักล้มเหลว ในการสลับที่อยู่ IP ระหว่างเซิร์ฟเวอร์โดยอัตโนมัติ Keepalived กำลังใช้ VRRP (Virtual Router Redundancy Protocol - https://www.ietf.org/rfc/rfc2338.txt)

หลักการของ VRRP

ก่อนอื่น เรามาพิจารณาทฤษฎีและคำจำกัดความหลักของ VRRP กันก่อน

VIP

— IP เสมือน ที่อยู่ IP เสมือนที่สามารถสลับระหว่างเซิร์ฟเวอร์โดยอัตโนมัติในกรณีที่เกิดความล้มเหลว

Master

— เซิร์ฟเวอร์ที่ VIP เปิดใช้งานอยู่

Backup

— เซิร์ฟเวอร์ที่ VIP จะเปลี่ยนไปใช้ในกรณีที่มาสเตอร์ล้มเหลว

VRID

— รหัสเราเตอร์เสมือน เซิร์ฟเวอร์ที่ใช้ IP เสมือน (VIP) ร่วมกันในรูปแบบที่เรียกว่าเราเตอร์เสมือน และตัวระบุเฉพาะของมันอาจมีค่าระหว่าง 1 ถึง 255 เซิร์ฟเวอร์อาจเป็นของ VRID หลายตัวพร้อมกัน แต่ทุก VRID จะต้อง มีที่อยู่ IP เสมือนเฉพาะ

อัลกอริธึมการทำงานพื้นฐาน:

  • ในช่วงเวลาที่กำหนด เซิร์ฟเวอร์หลักจะส่งแพ็กเก็ต VRRP (heartbeats) ไปยังที่อยู่มัลติคาสติ้งเฉพาะ 224.0.0.18 และเซิร์ฟเวอร์สเลฟทั้งหมดจะรับฟังที่อยู่นี้ มัลติคาสติ้งหมายความว่ามีผู้ส่งหนึ่งคนและผู้รับหลายคน

    คำใบ้ ในการทำให้เซิร์ฟเวอร์ทำงานในโหมดมัลติคาสต์ อุปกรณ์เครือข่ายของคุณต้องรองรับการรับส่งข้อมูลแบบหลายผู้รับ

  • หากเซิร์ฟเวอร์ Slave ไม่ได้รับแพ็กเก็ตฮาร์ทบีท ระบบจะเริ่มขั้นตอนการเลือกมาสเตอร์ หากเซิร์ฟเวอร์กลายเป็นมาสเตอร์ตามลำดับความสำคัญ เซิร์ฟเวอร์จะเปิดใช้งาน VIP และส่ง ARP ฟรี ARP ฟรีเป็นการตอบสนอง ARP ประเภทพิเศษที่อัปเดตตาราง MAC บนสวิตช์เครือข่ายเพื่อแจ้งเกี่ยวกับการเปลี่ยนแปลงเจ้าของที่อยู่ IP เสมือนและที่อยู่ MAC เพื่อเปลี่ยนเส้นทางการรับส่งข้อมูล

ติดตั้งและกำหนดค่า Keepalive บน CentOS

เราจะติดตั้งและกำหนดค่า Keepalive บนเซิร์ฟเวอร์ Linux สองตัว (proxy-serv01 และ proxy-serv02) ที่ใช้ CentOS 7 ที่ติดตั้ง Squid ในรูปแบบของเรา เราจะใช้วิธีที่ง่ายที่สุดในการจัดสรรภาระงาน — Round Robin DNS วิธีนี้แสดงให้เห็นว่าชื่อ DNS เดียวมีที่อยู่ IP ที่ลงทะเบียนหลายรายการ และไคลเอนต์จะได้รับที่อยู่เหล่านี้ทีละรายการ ดังนั้นเราต้องการที่อยู่ IP เสมือนสองแห่งที่ลงทะเบียนสำหรับชื่อ DNS เดียว (พร็อกซีเซิร์ฟเวอร์) นี่คือไดอะแกรมเครือข่าย:

เซิร์ฟเวอร์ Linux แต่ละตัวมีอินเทอร์เฟซเครือข่ายทางกายภาพสองอินเทอร์เฟซ: eth1 พร้อมที่อยู่ IP สาธารณะ (สีขาว) และ eth0 ในเครือข่ายท้องถิ่น

ที่อยู่ IP ของเซิร์ฟเวอร์ต่อไปนี้ใช้เป็นที่อยู่จริง:

192.168.2.251 — for proxy-server01
192.168.2.252 — for proxy-server02

ที่อยู่ IP ต่อไปนี้จะถูกใช้เป็นที่อยู่เสมือนที่สลับระหว่างเซิร์ฟเวอร์โดยอัตโนมัติในกรณีที่เกิดความล้มเหลว:

192.168.2.101
192.168.2.102

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

คุณสามารถติดตั้ง Keepalive บนเซิร์ฟเวอร์ทั้งสองได้โดยใช้ yum package manager (หรือ

dnf

บน CentOS 8):

# yum install keepalived

หลังจากการติดตั้งบนเซิร์ฟเวอร์ทั้งสองเสร็จสิ้น ให้เปลี่ยนไฟล์คอนฟิกูเรชัน Keepalived บนเซิร์ฟเวอร์ทั้งสอง:

# nano /etc/keepalived/keepalived.conf

มีการเน้นบรรทัดที่มีพารามิเตอร์ต่างกัน:

พร็อกซี-serv01

พร็อกซี-serv02

มาอธิบายตัวเลือกโดยละเอียดเพิ่มเติม:

vrrp_instance <name>

— เป็นส่วนที่กำหนดอินสแตนซ์ VRRP

state <MASTER|BACKUP>

— เป็นสถานะโหนดเริ่มต้นเมื่อเริ่มต้น

interface <interface name>

— อินเทอร์เฟซ VRRP ทำงานอยู่หรือไม่

virtual_router_id <number from 0 to 255>

— เป็นตัวระบุอินสแตนซ์ VRRP เฉพาะ ซึ่งจะต้องเหมือนกันในทุกเซิร์ฟเวอร์

priority <number from 0 to 255>

— กำหนดลำดับความสำคัญของเซิร์ฟเวอร์ เซิร์ฟเวอร์ที่มีลำดับความสำคัญสูงกว่าจะกลายเป็น MASTER

virtual_ipaddress

— เป็นบล็อกของที่อยู่ IP เสมือนที่ใช้งานอยู่บนเซิร์ฟเวอร์ในสถานะ MASTER จะต้องเหมือนกันในทุกเซิร์ฟเวอร์ภายในอินสแตนซ์ VRRP

หมายเหตุ คุณจะพบตัวอย่างมากมายเมื่อใช้ตัวเลือก การตรวจสอบสิทธิ์ ในการกำหนดค่า VRRP อย่างไรก็ตาม เอกสาร keepalived ระบุว่าการตรวจสอบสิทธิ์ถูกลบออกจาก VRRPv2 ในข้อกำหนด RFC3768 (https://tools.ietf.org/html/rfc3768) ในปี 2004 เนื่องจากไม่ได้ให้ความปลอดภัยที่แท้จริง ไม่แนะนำให้ใช้ตัวเลือกการกำหนดค่านี้

หากการกำหนดค่าเครือข่ายปัจจุบันไม่อนุญาตให้ใช้มัลติคาสต์ Keepalived จะมีตัวเลือกยูนิคาสต์ เช่น อี แพ็คเก็ตการเต้นของหัวใจ VRRP จะถูกส่งไปยังเซิร์ฟเวอร์โดยตรงตามรายการ หากต้องการใช้ Unicast คุณจะต้องมีตัวเลือกต่อไปนี้:

unicast_src_ip

— เป็นที่อยู่ต้นทางสำหรับแพ็กเก็ต VRRP

unicast_peer

— คือบล็อกที่อยู่ IP ของเซิร์ฟเวอร์ ซึ่งแพ็กเก็ต VRRP จะถูกส่งไป

ดังนั้น การกำหนดค่าของเราจึงกำหนดอินสแตนซ์ VRRP สองรายการ ได้แก่ proxy_ip1 และ proxy_ip2 ในการดำเนินการปกติ proxy-serv01 จะเป็น MASTER สำหรับ IP เสมือน 192.168.2.101 และ BACKUP สำหรับ 192.168.2.102 และในทางกลับกัน proxy-serv02 จะเป็น MASTER สำหรับ IP เสมือน 192.168.2.102 และ BACKUP สำหรับ 192.168.2.101.

หากเปิดใช้งานไฟร์วอลล์บนเซิร์ฟเวอร์ คุณจะต้องเพิ่มกฎการอนุญาตสำหรับการรับส่งข้อมูลแบบหลายผู้รับและ VRRP โดยใช้ iptables:

# iptables -A INPUT -i eth0 -d 224.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p vrrp -i eth0 -j ACCEPT

เปิดใช้งานบริการ Keepalive สำหรับการเริ่มต้นอัตโนมัติเมื่อบูตระบบและเรียกใช้บนเซิร์ฟเวอร์ทั้งสอง

# systemctl enable keepalived
# systemctl start keepalived

หลังจาก Keepalived เริ่มทำงาน ที่อยู่ IP เสมือนจะถูกกำหนดให้กับอินเทอร์เฟซจากไฟล์การกำหนดค่าของคุณ มาดูที่อยู่ IP eth0 ปัจจุบันของเซิร์ฟเวอร์กัน:

# ip a show eth0

บน proxy-serv01:

บน proxy-serv02:

จะทำการตรวจสอบความสมบูรณ์ของแอพหรือส่วนต่อประสานกับ Keepalive ได้อย่างไร

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

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

  • ความล้มเหลวในการเข้าถึงอินเทอร์เน็ตของอินเทอร์เฟซที่สอง — ไคลเอนต์ที่เข้าถึงที่อยู่เสมือนของเซิร์ฟเวอร์จะได้รับข้อความแสดงข้อผิดพลาดในเบราว์เซอร์ว่าไม่สามารถสร้างการเชื่อมต่อได้

เพื่อจัดการกับสถานการณ์ที่อธิบายข้างต้น ให้ใช้ตัวเลือกต่อไปนี้:

track_interface

— ตรวจสอบสถานะอินเทอร์เฟซ และตั้งค่าสถานะข้อผิดพลาดสำหรับอินสแตนซ์ VRRP หากอินเทอร์เฟซใดรายการหนึ่งอยู่ในรายการ DOWN

track_script

— ทำการตรวจสอบความสมบูรณ์ของแอป HA ของคุณโดยใช้สคริปต์ที่ส่งคืน 0 หากการตรวจสอบสำเร็จ หรือ 1 หากการตรวจสอบล้มเหลว

อัปเดตการกำหนดค่าโดยเพิ่มการตรวจสอบอินเทอร์เฟซ eth1 (ตามค่าเริ่มต้น อินสแตนซ์ VRRP จะตรวจสอบอินเทอร์เฟซที่เชื่อมโยงกับ: เป็น eth0 ในการกำหนดค่าปัจจุบัน)

track_interface {
  eth1
}

คำสั่ง track_script รันสคริปต์ด้วยพารามิเตอร์ที่กำหนดโดยบล็อก vrrp_script ในรูปแบบต่อไปนี้:

vrrp_script <name> {
 script <"path to the executable file">
 interval <number, seconds> - the periodicity of running the script, 1 second by default
 fall <number> - the number of times when the script has returned a value different from zero to switch to the FAULT state
 rise <number> - the number of times when the script has returned a zero value to get out of the FAULT state (failback)
 timeout <number> - the time to wait till the script returns the result ( if time is up, the script returns a non-zero value_
 weight <number> - the value, by which the server priority will be decreased in case it gets the FAULT state. The default value is 0, which means that the server gets the FAULT state after the script has failed for a number of times set in the fall parameter
}

พารามิเตอร์ของบล็อก vrrp_script:

script

พาธไปยังไฟล์ปฏิบัติการ

interval <number, seconds>

- ช่วงเวลาของการเรียกใช้สคริปต์ 1 วินาทีโดยค่าเริ่มต้น

fall <number>

- จำนวนครั้งที่สคริปต์ส่งคืนค่าที่แตกต่างจากศูนย์เพื่อเปลี่ยนเป็นสถานะ FAULT

rise <number>

- จำนวนครั้งที่สคริปต์ส่งคืนค่าศูนย์เพื่อออกจากสถานะ FAULT (ล้มเหลว)

timeout <number>

- เวลาที่ต้องรอจนกว่าสคริปต์จะส่งคืนผลลัพธ์ (หากหมดเวลา สคริปต์จะส่งคืนค่าที่ไม่ใช่ศูนย์_

weight <number>

- ค่าที่ลำดับความสำคัญของเซิร์ฟเวอร์จะลดลงในกรณีที่ได้รับสถานะ FAULT ค่าเริ่มต้นคือ 0 ซึ่งหมายความว่าเซิร์ฟเวอร์ได้รับสถานะ FAULT หลังจากสคริปต์ล้มเหลวเป็นจำนวนครั้งที่ตั้งค่าไว้ในพารามิเตอร์ fall

มากำหนดค่าการตรวจสอบความสมบูรณ์ของพร็อกซี Squid เมื่อใช้คำสั่งนี้ คุณสามารถตรวจสอบว่ากระบวนการ Squid ทำงานอยู่หรือไม่:

# squid -k check

สร้าง vrrp_script ที่ทำงานทุกๆ 3 วินาที บล็อกนี้ถูกกำหนดภายนอกบล็อก vrrp_instance

vrrp_script chk_squid_service {
 script "/usr/sbin/squid -k check"
 interval 3
}

เพิ่มสคริปต์นี้ในการมอนิเตอร์ลงในบล็อก vrrp_instance ทั้งสอง:

track_script {
 chk_squid_service
}

หาก Squid ล้มเหลว ที่อยู่ IP เสมือนจะถูกเปลี่ยนไปยังเซิร์ฟเวอร์อื่น

คุณสามารถระบุ การดำเนินการเพิ่มเติม ที่ต้องทำหากสถานะเซิร์ฟเวอร์เปลี่ยนไป

หาก Squid ได้รับการกำหนดค่าให้ยอมรับการเชื่อมต่อจากอินเทอร์เฟซใดๆ i. อี

http_port 0.0.0.0:3128

จะไม่มีปัญหาเกิดขึ้นเมื่อเปลี่ยนที่อยู่ IP เสมือน และ Squid จะยอมรับการเชื่อมต่อกับที่อยู่ใหม่ อย่างไรก็ตาม หากมีการกำหนดค่าที่อยู่ IP เฉพาะ e. ช.:

http_port 192.168.2.101:3128
http_port 192.168.2.102:3128

Squid จะไม่ทราบว่ามีที่อยู่ใหม่ปรากฏขึ้นในระบบเพื่อรับฟังคำขอของลูกค้า เพื่อจัดการกับสถานการณ์ที่จำเป็นต้องดำเนินการเพิ่มเติมบางอย่างเมื่อมีการเปลี่ยนที่อยู่ IP เสมือน Keepalived อนุญาตให้เรียกใช้สคริปต์หากสถานะเซิร์ฟเวอร์เปลี่ยนแปลง เช่น จาก MASTER เป็นสำรอง หรือในทางกลับกัน มีการใช้งานโดยใช้ตัวเลือกนี้:

notify "path to the executable file"

การทดสอบ Keepalive Failover ในกรณีที่เกิดความล้มเหลว

หลังจากที่คุณกำหนดค่า IP เสมือนแล้ว ตรวจสอบให้แน่ใจว่ามีการจัดการความล้มเหลวอย่างถูกต้อง การตรวจสอบครั้งแรกเป็นการจำลองความล้มเหลวของเซิร์ฟเวอร์ ปิดใช้งาน eth0 บน proxy-serv01 และจะหยุดส่งแพ็กเก็ต VRRP heartbeat proxy-serv02 ต้องเปิดใช้งานที่อยู่ IP เสมือน 192.168.2.101 ตรวจสอบด้วยคำสั่งนี้:

# ip a show eth0

บน proxy-serv01:

บน proxy-serv02:

ตามที่คาดไว้ proxy-serv02 เปิดใช้งานที่อยู่ IP เสมือน 192.168.2.101 มาดูกันว่ามีอะไรเขียนในบันทึกโดยใช้คำสั่งต่อไปนี้:

cat /var/log/messages | grep -i keepalived

บน proxy-serv01:

Keepalived_vrrp[xxxxx]:

Kernel is reporting: interface eth0 DOWN
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Entering FAULT STATE
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) removing protocol VIPs.
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Now in FAULT state

Keepalived รับสัญญาณว่า eth0 อยู่ในสถานะ DOWN และตั้งค่าสถานะ FAULT สำหรับอินสแตนซ์ proxy_ip1 VRRP ซึ่งจะทำให้ที่อยู่ IP เสมือนว่าง

บน proxy-serv02:

Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Transition to MASTER STATE

Keepalived ตั้งค่าสถานะ MASTER สำหรับอินสแตนซ์ proxy_ip1 VRRP เปิดใช้งานที่อยู่ IP 192.168.2.101 บน eth0 และส่ง ARP ฟรี

และตรวจสอบให้แน่ใจว่าเมื่อคุณเปิดใช้งาน eth0 บน proxy-serv01 อีกครั้ง ที่อยู่ IP เสมือน 192.168.2.101 จะถูกเปลี่ยนกลับ

บน proxy-serv01:

Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) forcing a new MASTER election
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Transition to MASTER STATE
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Entering MASTER STATE
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) setting protocol VIPs.
Keepalived_vrrp[xxxxx]:
Sending gratuitous ARP on eth0 for 192.168.2.101

Keepalived ได้รับสัญญาณว่า eth0 กลับมาแล้วและเริ่มเลือก MASTER สำหรับอินสแตนซ์ proxy_ip1 VRRP หลังจากได้รับสถานะ MASTER เซิร์ฟเวอร์จะเปิดใช้งานที่อยู่ IP 192.168.2.101 ใน eth0 และส่ง ARP ที่ไม่มีค่าใช้จ่าย

บน proxy-serv02:

Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Received advert with higher priority 255, ours 100
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Entering BACKUP STATE
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) removing protocol VIPs.

Keepalived รับแพ็กเก็ตที่มีลำดับความสำคัญสูงกว่าสำหรับอินสแตนซ์ proxy_ip1 VRRP สลับ proxy_ip1 เป็นสถานะสำรอง และทำให้ที่อยู่ IP ว่าง

การตรวจสอบครั้งที่สองเป็นการจำลองความล้มเหลวของอินเตอร์เฟสเครือข่ายภายนอก โดยปิดการใช้งานอินเตอร์เฟสเครือข่ายภายนอก eth1 บน proxy-serv01 ดูผลลัพธ์ในบันทึก

บน proxy-serv01:

Keepalived_vrrp[xxxxx]:
Kernel is reporting: interface eth1 DOWN
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Entering FAULT STATE
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) removing protocol VIPs.
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Now in FAULT state

Keepalived รับสัญญาณว่า eth1 หยุดทำงานและตั้งค่าสถานะ FAULT สำหรับอินสแตนซ์ proxy_ip1 VRRP ซึ่งจะทำให้ที่อยู่ IP เสมือนว่าง

บน proxy-serv02:

Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Transition to MASTER STATE
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Entering MASTER STATE
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) setting protocol VIPs.
Keepalived_vrrp[xxxxx]:
Sending gratuitous ARP on eth0 for 192.168.2.101

Keepalived ตั้งค่าสถานะ MASTER สำหรับอินสแตนซ์ proxy_ip1 VRRP เปิดใช้งานที่อยู่ IP 192.168.2.101 ใน eth0 และส่ง ARP ฟรี

การตรวจสอบที่สามเป็นการจำลองความล้มเหลวของ Squid ในการดำเนินการ ให้หยุดบริการด้วยตนเองโดยใช้คำสั่งนี้:

# systemctl stop squid

ดูผลลัพธ์ในบันทึก:

บน proxy-serv01:

Keepalived_vrrp[xxxxx]:
VRRP_Script(chk_squid_service) failed
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Entering FAULT STATE
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) removing protocol VIPs.
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Now in FAULT state

สคริปต์ที่ตรวจสอบกิจกรรมของบริการ Squid proxy ส่งกลับข้อผิดพลาด Keepalived ตั้งค่าสถานะ FAULT สำหรับอินสแตนซ์ proxy_ip1 VRRP ซึ่งจะทำให้ที่อยู่ IP เสมือนว่าง

บน proxy-serv02:

Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Transition to MASTER STATE
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) Entering MASTER STATE
Keepalived_vrrp[xxxxx]:
VRRP_Instance(proxy_ip1) setting protocol VIPs.
Keepalived_vrrp[xxxxx]:
Sending gratuitous ARP on eth0 for 192.168.2.101

Keepalived ตั้งค่าสถานะ MASTER สำหรับอินสแตนซ์ proxy_ip1 VRRP เปิดใช้งานที่อยู่ IP 192.168.2.101 ใน eth0 และส่ง ARP ฟรี

การตรวจสอบทั้งสามรายการผ่านเรียบร้อยแล้ว และ Keepalived ได้รับการกำหนดค่าอย่างถูกต้อง ในภายหลัง เราจะกำหนดค่าคลัสเตอร์ HA โดยใช้ Pacemaker และอธิบายคุณสมบัติของคลัสเตอร์

ไฟล์การกำหนดค่าสุดท้าย /etc/keepalived/keepalived.conf สำหรับ proxy-serv01:

vrrp_script chk_squid_service {
 script "/usr/sbin/squid -k check"
 interval 3
}
 vrrp_instance proxy_ip1 {
 state MASTER
 interface eth0
 virtual_router_id 1
 priority 255
 virtual_ipaddress {
  192.168.2.101/24 dev eth0 label eth0:1
 }
 track_interface {
  eth1
 }
 track_script {
  chk_squid_service
 }
}
vrrp_instance proxy_ip2 {
 state BACKUP
 interface eth0
 virtual_router_id 2
 priority 100
 virtual_ipaddress {
  192.168.2.102/24 dev eth0 label eth0:2
 }
 track_interface {
  eth1
 }
 track_script {
  chk_squid_service
 }
}

ไฟล์การกำหนดค่าสุดท้าย /etc/keepalived/keepalived.conf สำหรับ proxy-serv02:

vrrp_script chk_squid_service {
 script "/usr/sbin/squid -k check"
 interval 3
}
vrrp_instance proxy_ip1 {
 state BACKUP
 interface eth0
 virtual_router_id 1
 priority 100
 virtual_ipaddress {
  192.168.2.101/24 dev eth0 label eth0:1
 }
 track_interface {
  eth1
 }
 track_script {
  chk_squid_service
 }
}
vrrp_instance proxy_ip2 {
 state MASTER
 interface eth0
 virtual_router_id 2
 priority 255
 virtual_ipaddress {
  192.168.2.102/24 dev eth0 label eth0:2
}
 track_interface {
  eth1
 }
 track_script {
  chk_squid_service
 }
}

บทความที่เกี่ยวข้อง