Difference between revisions of "Loadbalance with Keepalived Nginx"
From CMU ITSC Network
Line 1: | Line 1: | ||
== Introduction == | == Introduction == | ||
* การทำ High availbility จะต้องมีส่วนประกอบที่สามารถเปลี่ยนเส้นทางงานและจะต้องมีกลไกในการตรวจสอบความล้มเหลวและการเปลี่ยนระบบหากตรวจพบการหยุดชะงัก โดยจะใช้ระบบของ Keepalived | * การทำ High availbility จะต้องมีส่วนประกอบที่สามารถเปลี่ยนเส้นทางงานและจะต้องมีกลไกในการตรวจสอบความล้มเหลวและการเปลี่ยนระบบหากตรวจพบการหยุดชะงัก โดยจะใช้ระบบของ Keepalived | ||
− | * Keepalived สามารถใช้ในการตรวจสอบบริการของระบบและการ Failover เปลี่ยนเส้นทางอัตโนมัติไปยังอีกระบบหนึ่งที่สแตนบายหากเกิดปัญหา โดยจะกำหนดค่าที่อยู่ Floating IP หรือ Virtual IP | + | * Keepalived สามารถใช้ในการตรวจสอบบริการของระบบและการ Failover เปลี่ยนเส้นทางอัตโนมัติไปยังอีกระบบหนึ่งที่สแตนบายหากเกิดปัญหา โดยจะกำหนดค่าที่อยู่ Floating IP หรือ Virtual IP ที่สามารถย้ายระหว่างตัวโหลดบาลานซ์สองตัว แต่ละตัวจะถูกกำหนดค่าให้แยกทราฟฟิกระหว่างเว็บเซิร์ฟเวอร์แบ็กเอนด์สองตัว เมื่อตัวหลักหยุดทำงาน Floating IP จะย้ายไปยังตัวที่สองโดยอัตโนมัติเบื่อให้บริการต่อ |
** การตั้งค่า Priority เป็นตัวกำหนดว่าจะให้เครื่องไหนเป็น Master หรือ Backup | ** การตั้งค่า Priority เป็นตัวกำหนดว่าจะให้เครื่องไหนเป็น Master หรือ Backup | ||
::- MASTER-MASTER คือ มีค่า Priority เท่ากัน เมื่อเครื่องที่ 1 พังจะย้ายไปเครื่องที่ 2 และเมื่อเครื่องที่ 1 ดีการทำงานก็จะยังคงอยู่ที่เครื่องที่ 2 | ::- MASTER-MASTER คือ มีค่า Priority เท่ากัน เมื่อเครื่องที่ 1 พังจะย้ายไปเครื่องที่ 2 และเมื่อเครื่องที่ 1 ดีการทำงานก็จะยังคงอยู่ที่เครื่องที่ 2 | ||
::- MASTER-BACKUP คือ มีค่า Priority ต่างกัน เมื่อเครื่องที่ 1 พังจะย้ายไปเครื่องที่ 2 และเมื่อเครื่องที่ 1 ดีการทำงานก็จะย้ายไปเครื่องที่ 1 แทน | ::- MASTER-BACKUP คือ มีค่า Priority ต่างกัน เมื่อเครื่องที่ 1 พังจะย้ายไปเครื่องที่ 2 และเมื่อเครื่องที่ 1 ดีการทำงานก็จะย้ายไปเครื่องที่ 1 แทน | ||
[[File:Loadbalance 640-100.gif | link=]] | [[File:Loadbalance 640-100.gif | link=]] | ||
+ | |||
+ | == Lab setup == | ||
+ | === Network Scenario === | ||
+ | # Server 1 : 10.0.0.2 | ||
+ | # Server 2 : 10.0.0.3 | ||
+ | # Virtual IP : 10.0.0.1 | ||
+ | |||
+ | === Step 1 - Install Packages === | ||
+ | <syntaxhighlight lang=bash> | ||
+ | $ sudo apt-get install haproxy | ||
+ | $ sudo apt-get install keepalived | ||
+ | $ sudo apt-get install nginx | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Step - Setup Keepalived === | ||
+ | ในการทำแลปนี้จะเป็นการทำแบบ MASTER-MASTER </br> | ||
+ | ทำการแก้ไขไฟล์ keepalived configuration ใน /etc/keepalived/keepalived.conf ของเครื่อง server 1 | ||
+ | *อัพเดทค่าที่ไฮไลท์ด้วยระบบของคุณ | ||
+ | <syntaxhighlight> | ||
+ | $ sudo vi /etc/keepalived/keepalived.conf | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ''' Server 1 ''' | ||
+ | <syntaxhighlight lang=bash highlight="14,22,24,26"> | ||
+ | vrrp_script chk_haproxy { | ||
+ | script "killall -0 haproxy" | ||
+ | interval 2 | ||
+ | weight 2 | ||
+ | } | ||
+ | |||
+ | vrrp_script chk_nginx { | ||
+ | script "/usr/bin/killall -0 nginx" | ||
+ | interval 2 | ||
+ | } | ||
+ | |||
+ | vrrp_instance VI_1 { | ||
+ | state MASTER | ||
+ | interface ens3 | ||
+ | virtual_router_id 101 | ||
+ | priority 110 | ||
+ | advert_int 1 | ||
+ | authentication { | ||
+ | auth_type PASS | ||
+ | auth_pass 1111 | ||
+ | } | ||
+ | unicast_src_ip 10.0.0.2 | ||
+ | unicast_peer { | ||
+ | 10.0.0.3 | ||
+ | virtual_ipaddress { | ||
+ | 10.0.0.1 | ||
+ | } | ||
+ | track_script { | ||
+ | chk_haproxy | ||
+ | chk_nginx | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ''' Server 2 ''' | ||
+ | <syntaxhighlight lang=bash highlight="14,22,24,26> | ||
+ | vrrp_instance VI_1 { | ||
+ | state MASTER | ||
+ | interface ens3 | ||
+ | virtual_router_id 101 | ||
+ | priority 110 # Priority Should be lower than MASTER Value | ||
+ | advert_int 1 | ||
+ | authentication { | ||
+ | auth_type PASS | ||
+ | auth_pass 1111 | ||
+ | } | ||
+ | unicast_src_ip 10.0.0.3 | ||
+ | unicast_peer { | ||
+ | 10.0.0.2 | ||
+ | } | ||
+ | virtual_ipaddress { | ||
+ | 10.0.0.1 | ||
+ | } | ||
+ | track_script { | ||
+ | chk_haproxy | ||
+ | chk_nginx | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> |
Revision as of 08:26, 10 June 2020
Introduction
- การทำ High availbility จะต้องมีส่วนประกอบที่สามารถเปลี่ยนเส้นทางงานและจะต้องมีกลไกในการตรวจสอบความล้มเหลวและการเปลี่ยนระบบหากตรวจพบการหยุดชะงัก โดยจะใช้ระบบของ Keepalived
- Keepalived สามารถใช้ในการตรวจสอบบริการของระบบและการ Failover เปลี่ยนเส้นทางอัตโนมัติไปยังอีกระบบหนึ่งที่สแตนบายหากเกิดปัญหา โดยจะกำหนดค่าที่อยู่ Floating IP หรือ Virtual IP ที่สามารถย้ายระหว่างตัวโหลดบาลานซ์สองตัว แต่ละตัวจะถูกกำหนดค่าให้แยกทราฟฟิกระหว่างเว็บเซิร์ฟเวอร์แบ็กเอนด์สองตัว เมื่อตัวหลักหยุดทำงาน Floating IP จะย้ายไปยังตัวที่สองโดยอัตโนมัติเบื่อให้บริการต่อ
- การตั้งค่า Priority เป็นตัวกำหนดว่าจะให้เครื่องไหนเป็น Master หรือ Backup
- - MASTER-MASTER คือ มีค่า Priority เท่ากัน เมื่อเครื่องที่ 1 พังจะย้ายไปเครื่องที่ 2 และเมื่อเครื่องที่ 1 ดีการทำงานก็จะยังคงอยู่ที่เครื่องที่ 2
- - MASTER-BACKUP คือ มีค่า Priority ต่างกัน เมื่อเครื่องที่ 1 พังจะย้ายไปเครื่องที่ 2 และเมื่อเครื่องที่ 1 ดีการทำงานก็จะย้ายไปเครื่องที่ 1 แทน
Lab setup
Network Scenario
- Server 1 : 10.0.0.2
- Server 2 : 10.0.0.3
- Virtual IP : 10.0.0.1
Step 1 - Install Packages
$ sudo apt-get install haproxy
$ sudo apt-get install keepalived
$ sudo apt-get install nginx
Step - Setup Keepalived
ในการทำแลปนี้จะเป็นการทำแบบ MASTER-MASTER
ทำการแก้ไขไฟล์ keepalived configuration ใน /etc/keepalived/keepalived.conf ของเครื่อง server 1
- อัพเดทค่าที่ไฮไลท์ด้วยระบบของคุณ
$ sudo vi /etc/keepalived/keepalived.conf
Server 1
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface ens3
virtual_router_id 101
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 10.0.0.2
unicast_peer {
10.0.0.3
virtual_ipaddress {
10.0.0.1
}
track_script {
chk_haproxy
chk_nginx
}
}
Server 2
vrrp_instance VI_1 {
state MASTER
interface ens3
virtual_router_id 101
priority 110 # Priority Should be lower than MASTER Value
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 10.0.0.3
unicast_peer {
10.0.0.2
}
virtual_ipaddress {
10.0.0.1
}
track_script {
chk_haproxy
chk_nginx
}
}