Nginx

High Availability Nginx Setup — สร้างระบบ Nginx ที่ไม่ล่ม

ในสภาพแวดล้อมการให้บริการเว็บสมัยใหม่ ความพร้อมใช้งาน (Availability) เป็นปัจจัยสำคัญที่ตัดสินความสำเร็จของธุรกิจ Nginx เป็นเว็บเซิร์ฟเวอร์และ reverse proxy ที่ได้รับความนิยมสูงสุด แต่หากมีเพียงเซิร์ฟเวอร์ Nginx เดียว และเซิร์ฟเวอร์นั้นเกิดข้อผิดพลาดขึ้น ระบบทั้งหมดจะหยุดทำงาน บทความนี้จะสอนวิธีสร้าง High Availability (HA) Nginx Setup เพื่อให้เว็บแอปพลิเคชันของคุณทำงานอย่างต่อเนื่องโดยไม่มีการหยุดชะงัก

High Availability คืออะไร และเหตุใดจึงสำคัญ

High Availability (HA) หมายถึงการออกแบบระบบให้สามารถทำงานต่อเนื่องได้มากที่สุด แม้ว่าส่วนประกอบบางส่วนของระบบเกิดข้อบกพร่องขึ้น แนวคิด HA วัดโดยค่า Uptime (เวลาที่ระบบทำงาน) ซึ่งมักแสดงเป็นเปอร์เซ็นต์:

Uptime Levelประมาณปีลักษณะ
99% (Two Nines)3.65 วันSingle Server
99.9% (Three Nines)8.76 ชั่วโมงHA Setup
99.99% (Four Nines)52.56 นาทีMulti-region HA
99.999% (Five Nines)5.26 นาทีEnterprise HA

สำหรับธุรกิจออนไลน์ทั่วไป ความมีความพร้อมใช้งาน 99.9% (Three Nines) ถือว่าเป็นมาตรฐานขั้นต่ำที่ยอมรับได้ ซึ่งต้องมีการสำรองข้อมูล (redundancy) ในหลายชั้น

Active-Passive vs Active-Active HA Architecture

มีสองแนวทางหลักในการออกแบบ High Availability Nginx:

Active-Passive (Failover) Architecture

ในการตั้งค่า Active-Passive HA จะมี Primary Nginx Server (เรียกว่า Active) และ Secondary Nginx Server (เรียกว่า Passive) Primary server รับ traffic ทั้งหมด เมื่อ Primary server เกิดการล่ม Virtual IP (VIP) จะ failover ไปยัง Secondary server โดยใช้ keepalived

ข้อดี:

  • ตั้งค่าง่ายและเข้าใจได้ง่าย
  • ประสิทธิภาพสูงสุด เพราะ Passive server ไม่รับ traffic
  • ใช้ทรัพยากรเซิร์ฟเวอร์อย่างมีประสิทธิภาพ

ข้อเสีย:

  • เมื่อ failover จะมี downtime สั้นๆ ขณะเปลี่ยน VIP
  • Secondary server ไม่ได้รับการใช้งาน จึงเสียไป

Active-Active HA Architecture

ในการตั้งค่า Active-Active HA ทั้ง Primary และ Secondary server ต่างก็รับ traffic ในเวลาเดียวกัน เมื่อเซิร์ฟเวอร์หนึ่งล่ม traffic ทั้งหมดจะถูกส่งไปยังเซิร์ฟเวอร์อื่น

ข้อดี:

  • ทรัพยากรทั้งสองเซิร์ฟเวอร์ถูกใช้งานอย่างเต็มที่
  • Failover ไม่มี downtime (Zero-downtime failover)
  • เพิ่มความสามารถในการจัดการ traffic

ข้อเสีย:

  • ตั้งค่าซับซ้อนและยากต่อการแก้ไขปัญหา
  • ต้องตรวจสอบให้แน่ใจว่า session/cache ซิงค์กันระหว่างสองเซิร์ฟเวอร์

วิธีสร้าง High Availability Nginx ด้วย keepalived

เราจะใช้ keepalived ซึ่งเป็นเครื่องมือที่ใช้สำหรับจัดการ Virtual IP (VIP) และ failover โดยอัตโนมัติ

ข้อกำหนดเบื้องต้น

  • 2 servers ที่มี IP address แยกกัน (ในตัวอย่างนี้ 10.0.0.10 สำหรับ Primary และ 10.0.0.11 สำหรับ Secondary)
  • 1 Virtual IP (VIP) ที่ยังไม่ได้ใช้ (ในตัวอย่างนี้ 10.0.0.100)
  • Nginx ติดตั้งบนเซิร์ฟเวอร์ทั้งสอง
  • SSH access ถึงเซิร์ฟเวอร์ทั้งสอง
  • ผู้ใช้ที่มีสิทธิ root หรือ sudo

ขั้นตอนที่ 1: ติดตั้ง Nginx และ keepalived

บนเซิร์ฟเวอร์ทั้งสอง รันคำสั่งต่อไปนี้:

sudo apt-get update
sudo apt-get install -y nginx keepalived

ขั้นตอนที่ 2: ตั้งค่า Primary Server (10.0.0.10)

สร้างไฟล์ keepalived configuration:

sudo nano /etc/keepalived/keepalived.conf

ใส่เนื้อหาตามด้านล่าง:

global_defs {
  router_id NGINX_MASTER
}

vrrp_script check_nginx {
  script "/usr/local/bin/check_nginx.sh"
  interval 5
  weight -20
}

vrrp_instance NGINX_HA {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass mynginxha
  }
  virtual_ipaddress {
    10.0.0.100/24
  }
  track_script {
    check_nginx
  }
}

หมายเหตุ: เปลี่ยน eth0 เป็นชื่อ network interface ของเซิร์ฟเวอร์ของคุณ (อาจเป็น ens0, ens1 เป็นต้น)

ขั้นตอนที่ 3: ตั้งค่า Secondary Server (10.0.0.11)

ตั้งค่า keepalived ในลักษณะเดียวกัน แต่มีการเปลี่ยนแปลงดังนี้:

global_defs {
  router_id NGINX_BACKUP
}

vrrp_script check_nginx {
  script "/usr/local/bin/check_nginx.sh"
  interval 5
  weight -20
}

vrrp_instance NGINX_HA {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 50
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass mynginxha
  }
  virtual_ipaddress {
    10.0.0.100/24
  }
  track_script {
    check_nginx
  }
}

ขั้นตอนที่ 4: สร้าง Nginx Health Check Script

สร้างสคริปต์ที่ใช้ตรวจสอบว่า Nginx ยังทำงานอยู่:

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

ใส่เนื้อหา:

#!/bin/bash

if ! pgrep -x "nginx" > /dev/null; then
  echo "Nginx is not running"
  exit 1
else
  echo "Nginx is running"
  exit 0
fi

ทำให้สคริปต์สามารถรัน:

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

ขั้นตอนที่ 5: เปิดใช้งาน keepalived

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

sudo systemctl start keepalived
sudo systemctl enable keepalived
sudo systemctl status keepalived

ขั้นตอนที่ 6: ทดสอบ HA Setup

ตรวจสอบ VIP โดย ping ไปยัง 10.0.0.100:

ping 10.0.0.100

เมื่อ Primary server ทำงาน จะตอบสนองได้ สามารถทดสอบการ failover โดยหยุด nginx บน primary server:

sudo systemctl stop nginx

ตรวจสอบ VIP อีกครั้ง มันจะตอบสนองจาก secondary server

ปัญหาที่อาจเกิดขึ้นและวิธีแก้ไข

ปัญหา 1: keepalived ไม่สามารถรันได้

ตรวจสอบ log:

sudo journalctl -u keepalived -n 20

ตรวจสอบไวยากรณ์ของไฟล์ config:

sudo keepalived -t -f /etc/keepalived/keepalived.conf

ปัญหา 2: VIP ไม่ได้รับการกำหนด

ตรวจสอบการรับส่ง IP address:

ip addr show

ตรวจสอบว่า interface ถูกระบุอย่างถูกต้อง

ปัญหา 3: Nginx health check script ไม่ทำงาน

ทดสอบสคริปต์ด้วยตนเอง:

sudo /usr/local/bin/check_nginx.sh

ตรวจสอบว่าสคริปต์มีสิทธิการเรียกใช้

การเพิ่มประสิทธิภาพ HA Nginx

สำหรับการเพิ่มประสิทธิภาพ HA Nginx ของคุณ ให้พิจารณาวิธีการต่อไปนี้:

  • Load Balancing: ใช้ Nginx reverse proxy เพื่อกระจาย traffic ไปยังหลายเซิร์ฟเวอร์ backend
  • Health Checks: ตั้งค่า Nginx health check เพื่อตรวจสอบสถานะของเซิร์ฟเวอร์ backend ที่แน่นอน
  • Connection Pooling: ใช้ upstream connection pooling เพื่อลดการ reconnect
  • SSL/TLS Termination: ปิด SSL/TLS ที่ HA Nginx proxy เพื่อลดเบิ้งของ backend servers
  • Geo-replication: ตั้งค่า backup servers ในหลาย regions เพื่อการ failover ที่เร็วยิ่งขึ้น

สรุป

High Availability Nginx setup จำเป็นสำหรับธุรกิจที่ต้องการ uptime สูง บทความนี้ได้อธิบายวิธีสร้าง Active-Passive HA Nginx setup โดยใช้ keepalived ซึ่งช่วยให้ระบบของคุณสามารถ failover โดยอัตโนมัติเมื่อ Primary server เกิดข้อผิดพลาด ผ่านการทำตามขั้นตอนและการทดสอบอย่างถูกต้อง คุณสามารถสร้างระบบ Nginx ที่มีความพร้อมใช้งานสูง

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

หากต้องการติดตั้งและจัดการ High Availability Nginx setup คุณสามารถใช้บริการ DE Cloud VPS ซึ่งให้ความยืดหยุ่นและสมรรถนะสูง ด้วย infrastructure ที่แข็งแกร่ง คุณสามารถทำให้ HA Nginx ของคุณสมบูรณ์แบบอย่างไม่เสียเวลา นอกจากนี้ DE Cloud Hosting ยังมีอีกตัวเลือกที่เหมาะสำหรับธุรกิจที่ต้องการการจัดการแบบ managed services

ติดต่อทีมสนับสนุนของ DE วันนี้เพื่อที่จะรู้เพิ่มเติมเกี่ยวกับบริการและเริ่มต้นการสร้างระบบ HA Nginx ของคุณวันนี้!