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.confServer 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
    }
}