ฉันใช้ Keepalived เพื่อมอบความพร้อมใช้งานระหว่างเซิร์ฟเวอร์ Alma 8 Nginx สองเครื่อง (โฮสต์บน VMWare หากมีความเกี่ยวข้องใดๆ) เมื่อเปิดใช้งาน firewalld แม้ว่าจะมีการตั้งค่ากฎมากมายสำหรับ VRRP เมื่อฉันเปิด firewalld ทั้งสองโฮสต์จะเริ่มตอบสนองบน IP เสมือน:
root@dca-nfs01:~# arping 172.31.5.233
60 ไบต์จาก 00:50:56:84:ac:d0 (172.31.5.233): index=39 เวลา=1.960 usec
60 ไบต์จาก 00:50:56:84:ac:d0 (172.31.5.233): index=40 เวลา=20.660 usec
60 ไบต์จาก 00:50:56:84:52:ed (172.31.5.233): index=41 เวลา=24.930 usec
60 ไบต์จาก 00:50:56:84:ac:d0 (172.31.5.233): index=42 เวลา=534.616 msec
60 ไบต์จาก 00:50:56:84:52:ed (172.31.5.233): index=43 เวลา=534.646 msec
การกำหนดค่า Keepalive ของฉันนำมาจากเทมเพลตการสอนมาตรฐานและมีลักษณะดังนี้:
[root@dca-ngx01-al ~]# แมว /etc/keepalived/keepalived.conf
global_defs {
# ตัวระบุกระบวนการ Keepalived
router_id nginx
}
# สคริปต์เพื่อตรวจสอบว่า Nginx ทำงานหรือไม่
vrrp_script check_nginx {
สคริปต์ "/sbin/pidof nginx"
ช่วงที่ 2
น้ำหนัก 50
}
# อินเทอร์เฟซเสมือน - ลำดับความสำคัญระบุลำดับที่อินเทอร์เฟซที่กำหนดให้รับช่วงต่อเมื่อเกิดข้อผิดพลาด
vrrp_instance VI_01 {
รัฐ MASTER
อินเทอร์เฟซ ens192
virtual_router_id 151
ลำดับความสำคัญ 110
# ที่อยู่ IP เสมือนที่ใช้ร่วมกันระหว่างสองเว็บเซิร์ฟเวอร์ NGINX ซึ่งจะลอย
virtual_ipaddress {
172.31.5.233
}
track_script {
check_nginx
}
การรับรองความถูกต้อง {
auth_type AH
ความลับ auth_pass
}
}
ทั้งสองกล่องมีไฟร์วอลล์หนึ่งโซนที่เรียบง่าย และฉันได้เพิ่มกฎที่สมบูรณ์เพื่ออนุญาตการสื่อสาร VRRP ระหว่างสองโฮสต์:
[root@dca-ngx01-al ~]# firewall-cmd --list-all
สาธารณะ (ใช้งานอยู่)
เป้าหมาย: ค่าเริ่มต้น
icmp-block-inversion: ไม่
อินเทอร์เฟซ: ens192
แหล่งที่มา:
บริการ: dhcpv6-client http https ssh
พอร์ต: 10050/tcp
โปรโตคอล:
ไปข้างหน้า: ไม่
สวมหน้ากาก: ไม่
พอร์ตไปข้างหน้า:
พอร์ตต้นทาง:
icmp บล็อก:
กฎมากมาย:
ค่าโปรโตคอลกฎ = "vrrp" ยอมรับ
ฉันได้ตั้งด้วย net.ipv4.ip_forward = 1
ใน /etc/sysctl.conf
.
เมื่อไฟร์วอลล์หยุดทำงานบนกล่องทั้งสอง Keepalived จะทำงานอย่างถูกต้อง แต่เมื่อเปิดใช้งานดูเหมือนว่าทั้งสองฝ่ายขาดการติดต่อกัน และส่งแพ็กเก็ต ARP เปล่าๆ ซ้ำๆ ออกไป:
â keepalived.service - LVS และ VRRP High Availability Monitor
โหลดแล้ว: โหลดแล้ว (/usr/lib/systemd/system/keepalived.service; เปิดใช้งาน; การตั้งค่าล่วงหน้าของผู้ขาย: ปิดใช้งาน)
ใช้งานอยู่: เปิดใช้งาน (ทำงาน) ตั้งแต่วันศุกร์ 2022-03-25 12:48:25 GMT; 2 ชั่วโมง 35 นาทีที่แล้ว
กระบวนการ: 7140 ExecReload=/bin/kill -HUP $MAINPID (รหัส=ออก, สถานะ=0/สำเร็จ)
กระบวนการ: 12966 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (รหัส=ออกแล้ว สถานะ=0/สำเร็จ)
PID หลัก: 12967 (เก็บไว้)
งาน: 2 (จำกัด: 11406)
หน่วยความจำ: 1.8M
CGroup: /system.slice/keepalived.service
ââ12967 /usr/sbin/keepalived -D
ââ12968 /usr/sbin/keepalived -D
25 มีนาคม 15:08:15 น. dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: กำลังส่ง ARP ฟรีบน ens192 สำหรับ 172.31.5.233
25 มีนาคม 15:08:15 น. dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: กำลังส่ง ARP ฟรีบน ens192 สำหรับ 172.31.5.233
25 มีนาคม 15:08:15 น. dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: กำลังส่ง ARP ฟรีบน ens192 สำหรับ 172.31.5.233
25 มีนาคม 15:08:15 น. dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: กำลังส่ง ARP ฟรีบน ens192 สำหรับ 172.31.5.233
25 มี.ค. 15:08:18 น. dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: (VI_01) กำลังส่ง/จัดคิว ARP ฟรีบน ens192 เป็นเวลา 1>
25 มีนาคม 15:08:18 น. dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: กำลังส่ง ARP ฟรีบน ens192 สำหรับ 172.31.5.233
25 มีนาคม 15:08:18 น. dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: กำลังส่ง ARP ฟรีบน ens192 สำหรับ 172.31.5.233
25 มีนาคม 15:08:18 น. dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: กำลังส่ง ARP ฟรีบน ens192 สำหรับ 172.31.5.233
25 มีนาคม 15:08:18 น. dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: กำลังส่ง ARP ฟรีบน ens192 สำหรับ 172.31.5.233
25 มีนาคม 15:08:18 น. dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: กำลังส่ง ARP ฟรีบน ens192 สำหรับ 172.31.5.233
อย่างไรก็ตาม ฉันเห็นได้จากการใช้ TCPDump ว่าแพ็กเก็ต VRRP ปกติจากโฮสต์อื่นอย่างน้อยจะชนกับอินเทอร์เฟซเครือข่ายเมื่อไฟร์วอลล์ทำงาน:
tcpdump: เอาต์พุต verbose ถูกระงับ ใช้ -v หรือ -vv สำหรับการถอดรหัสโปรโตคอลแบบเต็ม
กำลังฟัง ens192, ประเภทลิงก์ EN10MB (Ethernet), ขนาดการจับภาพ 262144 ไบต์
15:25:21.532300 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3160): VRRPv2, โฆษณา, vrid 151, prio 150, authtype ah, intvl 1s, ความยาว 20
15:25:22.532419 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3161): VRRPv2, โฆษณา, vrid 151, prio 150, authtype ah, intvl 1s, ความยาว 20
15:25:23.532476 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3162): VRRPv2, โฆษณา, vrid 151, prio 150, authtype ah, intvl 1s, ความยาว 20
15:25:24.532544 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3163): VRRPv2, โฆษณา, vrid 151, prio 150, authtype ah, intvl 1s, ความยาว 20
ไม่มีใครมีความคิดใด ๆ เกี่ยวกับวิธีที่ฉันจะแก้ไขปัญหานี้เพิ่มเติมได้อย่างไร
ขอบคุณล่วงหน้า.