Nginx

Nginx HA กับ Keepalived Configuration: การตั้งค่า High Availability สำหรับเว็บเซิร์ฟเวอร์

ในยุคที่ความต้องการจากผู้ใช้งานสูงขึ้น การให้บริการเว็บไซต์และแอปพลิเคชันที่มีความพร้อมใช้งานสูง (High Availability) กลายเป็นสิ่งจำเป็นสำหรับธุรกิจในสมัยนี้ Nginx Keepalived เป็นวิธีการที่ได้รับความนิยมอย่างมากในการสร้าง High Availability architecture สำหรับเซิร์ฟเวอร์เว็บ ผ่านการใช้งาน Virtual IP (VIP) และการแลกเปลี่ยนภาพบทบาท (failover) โดยอัตโนมัติ

บทความนี้จะอธิบายโดยละเอียดเกี่ยวกับการติดตั้ง Nginx Keepalived การตั้งค่าพื้นฐาน การสร้าง Health Check ระบบและการทดสอบ failover ซึ่งจะช่วยให้คุณสามารถสร้างระบบ High Availability ที่มั่นคงและเชื่อถือได้สำหรับธุรกิจของคุณ

Keepalived คืออะไร และเหตุใดจึงจำเป็น

Keepalived เป็นซอฟต์แวร์ที่ออกแบบมาเพื่อให้ความพร้อมใช้งานสูงสำหรับบริการต่าง ๆ โดยทำงานร่วมกับโปรโตคอล VRRP (Virtual Router Redundancy Protocol) ซึ่งเป็นเครื่องมือที่ทรงพลังในการสร้าง Nginx Keepalived ระบบ High Availability สำหรับเซิร์ฟเวอร์

ลักษณะหลักของ Keepalived

  • Virtual IP (VIP) Management: ระบบสามารถจัดการ Virtual IP Address ที่ถูกแบ่งปันระหว่าง Master และ Slave servers
  • Automatic Failover: เมื่อ Nginx Keepalived Master server ดาวน์ ระบบจะสลับเป็น Slave โดยอัตโนมัติภายในเวลาไม่กี่วินาที
  • Health Checking: ระบบตรวจสอบสุขภาพของเซิร์ฟเวอร์อย่างต่อเนื่อง
  • Configuration Management: สามารถเรียกใช้งาน script เมื่อเกิด failover
  • Multiple VIP Support: สามารถจัดการหลาย Virtual IP address ในเวลาเดียวกัน

เหตุใดจึงต้องใช้ Nginx Keepalived

ในสภาวะการแข่งขันในยุคดิจิทัล ธุรกิจต้องการความอยู่ได้ของเซิร์ฟเวอร์อย่างต่อเนื่อง หากเซิร์ฟเวอร์หลักมีความเสี่ยงต่อการดาวน์ ผู้ใช้จำนวนมากจะไม่สามารถเข้าถึงบริการได้ ดังนั้นการมี failover mechanism อัตโนมัติจึงเป็นสิ่งที่ต้องมี Nginx Keepalived ช่วยให้:

  • ลดเวลาหยุดให้บริการ (Downtime) ลงอย่างมาก
  • รักษาความสามารถในการทำงานของระบบอย่างต่อเนื่อง
  • เพิ่มความเชื่อมั่นและคุณภาพของบริการ
  • ป้องกันการสูญเสียข้อมูลและการขัดข้องของระบบ

สภาวะแวดล้อมและข้อกำหนดเบื้องต้น

ก่อนเริ่มการติดตั้ง Nginx Keepalived ให้แน่ใจว่าคุณมีสิ่งต่อไปนี้:

  • เซิร์ฟเวอร์ 2 เครื่องขึ้นไป (ใช้ Linux Distribution เช่น Ubuntu, CentOS)
  • Nginx ติดตั้งบน เซิร์ฟเวอร์ทั้งสอง
  • Keepalived package สำหรับทั้งสองเซิร์ฟเวอร์
  • Virtual IP (VIP) ที่จะใช้งานร่วมกันระหว่าง Master และ Slave
  • Network connectivity ระหว่างเซิร์ฟเวอร์ทั้งสอง
  • Root access หรือ sudo privileges บนเซิร์ฟเวอร์

ขั้นตอนการติดตั้ง Nginx และ Keepalived

ตอนนี้ ลองเริ่มการติดตั้ง Nginx Keepalived บนเซิร์ฟเวอร์ทั้งสอง

ขั้นตอนที่ 1: อัพเดต System Package

ก่อนอื่น ให้อัพเดตระบบปฏิบัติการบนเซิร์ฟเวอร์ทั้งสอง:

sudo apt update
sudo apt upgrade -y

ขั้นตอนที่ 2: ติดตั้ง Nginx

ติดตั้ง Nginx บนเซิร์ฟเวอร์ทั้งสอง:

sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

ขั้นตอนที่ 3: ติดตั้ง Keepalived

ติดตั้ง Keepalived บนเซิร์ฟเวอร์ทั้งสอง:

sudo apt install keepalived -y

การตั้งค่า Keepalived Configuration

ขั้นตอนนี้เป็นส่วนสำคัญที่สุด เราจะสร้างไฟล์ configuration ที่เหมาะสำหรับ High Availability setup

การตั้งค่า Master Server

บนเซิร์ฟเวอร์ Master (IP: 192.168.1.100) ให้แก้ไขไฟล์ configuration:

sudo nano /etc/keepalived/keepalived.conf

เพิ่มการตั้งค่า Master แบบนี้:

global_defs {
   router_id NGINX_HA_1
}

vrrp_script check_nginx {
   script "/usr/local/bin/check_nginx.sh"
   interval 3
   weight -20
   fall 3
   rise 2
}

vrrp_instance VI_1 {
   state MASTER
   interface eth0
   virtual_router_id 51
   priority 250
   advert_int 1
   authentication {
      auth_type PASS
      auth_pass your_password_here
   }
   virtual_ipaddress {
      192.168.1.50/24 dev eth0 label eth0:1
   }
   track_script {
      check_nginx
   }
}

การตั้งค่า Slave Server

บนเซิร์ฟเวอร์ Slave (IP: 192.168.1.101) ให้แก้ไขไฟล์ configuration:

sudo nano /etc/keepalived/keepalived.conf

เพิ่มการตั้งค่า Slave แบบนี้:

global_defs {
   router_id NGINX_HA_2
}

vrrp_script check_nginx {
   script "/usr/local/bin/check_nginx.sh"
   interval 3
   weight -20
   fall 3
   rise 2
}

vrrp_instance VI_1 {
   state BACKUP
   interface eth0
   virtual_router_id 51
   priority 200
   advert_int 1
   authentication {
      auth_type PASS
      auth_pass your_password_here
   }
   virtual_ipaddress {
      192.168.1.50/24 dev eth0 label eth0:1
   }
   track_script {
      check_nginx
   }
}

ความสำคัญของการตั้งค่า:

  • state MASTER/BACKUP: กำหนดบทบาทของเซิร์ฟเวอร์ (Master หรือ Backup)
  • priority: ตัวเลขที่สูงกว่าเป็น Master (Master = 250, Backup = 200)
  • virtual_router_id: ต้องเหมือนกันในเซิร์ฟเวอร์ทั้งสอง
  • virtual_ipaddress: IP ที่จะใช้ร่วมกัน (VIP)
  • authentication: รหัสผ่านเพื่อความปลอดภัย

การสร้าง Health Check Script

สร้างไฟล์ script เพื่อตรวจสอบสถานะของ Nginx:

sudo nano /usr/local/bin/check_nginx.sh

เพิ่มเนื้อหาดังนี้:

#!/bin/bash

if (( $(ps aux | grep -v grep | grep nginx | wc -l) > 0 ))
then
    exit 0
else
    exit 1
fi

ทำให้ script สามารถจำหน่ายได้:

sudo chmod +x /usr/local/bin/check_nginx.sh

เปิดใช้งาน Keepalived Service

บนเซิร์ฟเวอร์ทั้งสอง ให้เปิดใช้งาน Keepalived service:

sudo systemctl restart keepalived
sudo systemctl enable keepalived
sudo systemctl status keepalived

การทดสอบ Failover

ตอนนี้เราจะทดสอบว่า Failover ทำงานได้อย่างถูกต้องหรือไม่

ขั้นตอนที่ 1: ตรวจสอบ VIP ปัจจุบัน

บนเซิร์ฟเวอร์ Master ให้ตรวจสอบว่า VIP ถูกกำหนดให้กับอินเทอร์เฟสถูกต้อง:

ip addr show

คุณควรเห็น VIP 192.168.1.50 ปรากฏบนอินเทอร์เฟส eth0

ขั้นตอนที่ 2: สร้าง Page ทดสอบ

บนเซิร์ฟเวอร์ทั้งสอง สร้าง HTML test page เพื่อให้เห็นว่าเซิร์ฟเวอร์ใดกำลังทำงาน:

echo "<h1>Server 1 - Master</h1>" | sudo tee /var/www/html/index.html

บน Slave server เปลี่ยน “Server 1” เป็น “Server 2”

ขั้นตอนที่ 3: ทดสอบการเข้าถึง VIP

จากเซิร์ฟเวอร์อื่นหรือ Client machine ให้ทดสอบการเข้าถึง VIP:

curl http://192.168.1.50

คุณควรเห็นข้อความ “Server 1 – Master” หมายความว่า Master server กำลังทำงาน

ขั้นตอนที่ 4: ทดสอบ Failover

ให้หยุด Nginx บนเซิร์ฟเวอร์ Master:

sudo systemctl stop nginx

รอสักครู่แล้วลองเข้าถึง VIP อีกครั้ง:

curl http://192.168.1.50

ตอนนี้คุณควรเห็นข้อความ “Server 2 – Backup” ซึ่งหมายความว่า Failover ประสบความสำเร็จ

การแก้ไขปัญหาทั่วไป

1. Keepalived Service ไม่เริ่มต้น

ตรวจสอบไฟล์ configuration:

sudo keepalived -t

ดูที่ Log files:

sudo tail -f /var/log/syslog

2. VIP ไม่ปรากฏขึ้น

ตรวจสอบว่าเซิร์ฟเวอร์ Master มีสถานะสูงกว่า Backup:

sudo ipvsadm -L -n

ตรวจสอบสถานะของ VRRP:

sudo journalctl -u keepalived -f

3. Failover ไม่ทำงาน

ตรวจสอบว่า Health Check script ทำงานได้:

sudo /usr/local/bin/check_nginx.sh
echo $?

ตรวจสอบการเชื่อมต่อระหว่างเซิร์ฟเวอร์ด้วย ping:

ping 192.168.1.101

สรุป

การตั้งค่า Nginx HA กับ Keepalived ช่วยให้คุณมีระบบเว็บเซิร์ฟเวอร์ที่มีความพร้อมใช้งานสูงและเชื่อถือได้ ด้วยการใช้ Virtual IP และ Automatic Failover คุณสามารถให้บริการที่ต่อเนื่องแม้ว่าจะเกิดการล้มเหลวของเซิร์ฟเวอร์หนึ่ง บทความนี้ได้แสดงการตั้งค่าขั้นพื้นฐาน แต่คุณสามารถขยายระบบนี้เพื่อให้มีเซิร์ฟเวอร์มากกว่าสองเครื่องและการจัดการที่ซับซ้อนมากขึ้น

แนะนำบริการ DE

หากคุณต้องการสร้างระบบ High Availability สำหรับธุรกิจของคุณ DE มีบริการ Cloud VPS ที่เหมาะสำหรับการติดตั้ง Nginx Keepalived ด้วย root access เต็มรูปแบบและการปรับแต่งที่ยืดหยุ่น โปรดเยี่ยมชม https://de.co.th/cloud-vps

นอกจากนี้ DE ยังมีบริการ Cloud Hosting ที่มาพร้อมกับการจัดการระบบ management interface ที่สะดวก หากคุณต้องการระบบ High Availability ที่ง่ายต่อการใช้งาน โปรดเยี่ยมชม https://de.co.th/cloud-hosting

ติดต่อทีมงาน DE วันนี้เพื่อปรึกษาวิธีการสร้างระบบ High Availability สำหรับธุรกิจของคุณด้วย Nginx Keepalived บน Cloud Infrastructure ของ DE