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 ที่สามารถย้ายระกว่างตัวโหลดบาลานซ์สองตัว แต่ละตัวจะถูกกำหนดค่าให้แยกทราฟฟิกระหว่างเว็บเซิร์ฟเวอร์แบ็กเอนด์สองตัว เมื่อตัวหลักหยุดทำงาน Floating 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 แทน

Loadbalance 640-100.gif

Lab setup

Network Scenario

  1. Server 1 : 10.0.0.2
  2. Server 2 : 10.0.0.3
  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
    }
}