NGINX HA by Keepalived
Date | 18-7-2022 |
---|---|
Author | Thanakorn P. |
เนื่องจากได้ยินมาบ่อยๆ ว่า NGINX ทำ HA ไม่ได้ ต้องใช้งานเป็น NGINX+ เลยเกิดความสงสัย มันจะไม่ได้เลยจริงๆ หรอ ผมเลยได้ทำการ research และก็พบว่ามีวิธีทำได้ โดยใช้ keepalived มาช่วย โดยหลักการทำงานของ keepalived จะมาช่วยทำ IP ที่เป็น VIP ให้กับ NGINX ทั้ง 2 เครื่อง ทำให้ เกิดการ HA ได้ วันนี้เลยจะมาลองทำกันดูครับ โดยมีรูปแบบการทำงานตาม Diagram ด้านล่างนี้
และ Lab ที่จะใช้กันในวันนี้จะมี spec ดังนี้ครับ
Nginx and Keepalived server spec | |
---|---|
OS | Rocky Linux 8.6 (minimal install) |
CPU | 1 core |
Memory | 2 GB |
Disk | 20 GB |
และมี fix ip address ดังนี้
IP Address | |
---|---|
VIP IP | 192.168.48.100 |
NGINX A | 192.168.48.101 |
NGINX B | 192.168.48.102 |
เริ่มแรก เราจะทำการ install package ที่จำเป็นสำหรับ Lab นี้ ลงไปที่ server NGINX ทั้ง 2 เครื่อง โดยใช้ command ดังนี้
dnf install net-tools epel-release vim nginx keepalived -y
ทำการสร้างหน้า web ให้กับ NGINX ด้วยคำสั่ง (ในคำสั่งจะเป็นของเครื่อง A ถ้าทำเครื่อง B ก็ให้ เปลี่ยนจาก A เป็น B นะครับ จะได้สังเกตุได้ง่ายตอนทดสอบ HA)
echo "<h1>NginX HA by Keepalived A</h1>" > /usr/share/nginx/html/index.html
ทำการ start service nginx และ allow firewall ให้สามารถเข้าดู web ของ NGINX ได้
systemctl enable nginx
systemctl start nginx
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
ลองเข้า web ทดสอบ ด้วย url http://192.168.48.101 ดู ก็จะได้หน้าตาประมาณนี้
ทำการ backup config เดิมของ keepalived
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.org
สร้าง config ให้กับ keepalived ใหม่
vim /etc/keepalived/keepalived.conf
และใส่ config ด้านล่างนี้เข้าไป สำหรับเครื่องที่เป็น MASTER (เปลี่ยนตรง virtual_ipaddress เป็น ip ที่จะใช้เป็น VIP)
vrrp_script chk_nginx {
script "pidof nginx"
interval 2
}
vrrp_instance VI_1 {
interface ens160
state MASTER
priority 200
virtual_router_id 33
virtual_ipaddress {
192.168.48.100/24
}
authentication {
auth_type AH
auth_pass password
}
track_script {
chk_nginx
}
}
และใส่ config ด้านล่างนี้เข้าไป สำหรับเครื่องที่เป็น BACKUP (เปลี่ยนตรง virtual_ipaddress เป็น ip ที่จะใช้เป็น VIP)
vrrp_script chk_nginx {
script "pidof nginx"
interval 2
}
vrrp_instance VI_1 {
interface ens160
state BACKUP
priority 100
virtual_router_id 33
virtual_ipaddress {
192.168.48.100/24
}
authentication {
auth_type AH
auth_pass password
}
track_script {
chk_nginx
}
}
ทำการ allow firewall และ start service ให้ keepalived
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
firewall-cmd --reload
systemctl enable keepalived
systemctl start keepalived
จากนั้นทำการ ทดสอบเข้าหน้า web ผ่าน VIP จะเห็นว่าตอนนี้ชี้ไปยังเครื่อง NGINX A
ทดสอบการ HA ด้วยการ หยุดการทำงานของ NGINX ที่เครื่อง NGINX A
systemctl stop nginx
จะพบว่า VIP ได้ชี้ไปยัง NGINX B