Thứ Ba, 21 tháng 2, 2023

Hướng dẫn triển khai Haproxy Keepalive cho Apache trên CentOS 7

Tổng quan#

HAProxy viết tắt của High Availability Proxy, là công cụ mã nguồn mở nổi tiếng ứng dụng cho giải pháp cân bằng tải TCP/HTTP cũng như giải pháp máy chủ Proxy (Proxy Server). HAProxy có thể chạy trên các mỗi trường Linux, Solaris, FreeBSD. Công dụng phổ biến nhất của HAProxy là cải thiện hiệu năng, tăng độ tin cậy của hệ thống máy chủ bằng cách phân phối khối lượng công việc trên nhiều máy chủ (như Web, App, cơ sở dữ liệu). HAProxy hiện đã và đang được sử dụng bởi nhiều website lớn như GoDaddy, GitHub, Bitbucket, Stack Overflow, Reddit, Speedtest.net, Twitter và trong nhiều sản phẩm cung cấp bởi Amazon Web Service.

Dịch vụ keepalived sử dụng với mục đích tạo ra virtual ip address (IP VIP) cho hệ thống. Tiến trình keepalived có thể tự động giám sát dịch vụ hoặc hệ thống và có khả năng chịu lỗi cho hệ thống khi dịch vụ hoặc hệ điều hành xảy ra vấn đề. Trong bài hướng dẫn, tôi sẽ sử dụng keepalived để tăng tính sẵn sàng cho dịch vụ cân bằng tải.

Phần 1. Chuẩn bị#

Phân hoạch

Mô hình

Mô hình triển khai

Mô hình hoạt động

Phần 2. Cầu hình Apache#

Thực hiện tại node1

yum install httpd -y
cat /etc/httpd/conf/httpd.conf | grep 'Listen 80'
sed -i "s/Listen 80/Listen 10.10.11.86:8081/g" /etc/httpd/conf/httpd.conf

echo '<h1>Chào mừng tới Blog (Web1)</h1>' > /var/www/html/index.html
systemctl start httpd
systemctl enable httpd

Thực hiện tại node2

yum install httpd -y
cat /etc/httpd/conf/httpd.conf | grep 'Listen 80'
sed -i "s/Listen 80/Listen 10.10.11.87:8081/g" /etc/httpd/conf/httpd.conf

echo '<h1>Chào mừng tới Blog (Web2)</h1>' > /var/www/html/index.html
systemctl start httpd systemctl enable httpd

Thực hiện tại node3

yum install httpd -y
cat /etc/httpd/conf/httpd.conf | grep 'Listen 80'
sed -i "s/Listen 80/Listen 10.10.11.88:8081/g" /etc/httpd/conf/httpd.conf

echo '<h1>Chào mừng tới Blog (Web3)</h1>' > /var/www/html/index.html
systemctl start httpd systemctl enable httpd

Phần 2. Triển khai Keepalive#

Cài đặt gói Keepalive trên cả 3 node

yum install keepalived -y

Lưu ý: Tôi sẽ mô tả cách cấu hình trước. Sau phần mô tả sẽ có file cấu hình mẫu keepalive trên cả 3 node

Trong bài, chúng ta sẽ sử dụng keepalive để kiếm tra trạng thái của HAProxy trong mỗi 2 giây, và nếu kiếm tra thành công node sẽ được + 2 điểm.

vrrp_script chk_haproxy {
    script "killall -0 haproxy" # check the haproxy process
    interval 2 # every 2 seconds
    weight 2 # add 2 points if OK
}

Tiếp theo chúng ta sẽ tạo block với tên vrrp_instance. Đây là thành phần chính khi cấu hình HA cho dịch vụ HAProxy. Theo bài, tôi cấu hình cho keepalived kết nối với các dịch vụ tương tự nó thuộc các node khác thông giao diện mạng ens160. Mô hình keepalive là MASTER - SLAVE nên chúng ta cần chỉ định node Master và node Slave. Trong bài tôi sẽ cấu hình node1 làm node master với tham số state băng MASTER và node2, node3 làm node slave với cấu hình state bằng BACKUP.

# Trên Node1
vrrp_instance VI_1 {
    interface ens160
    state MASTER
    ..
}

# Trên Node2
vrrp_instance VI_1 {
    interface ens160
    state BACKUP
    ..
}

# Trên Node3
vrrp_instance VI_1 {
    interface ens160
    state BACKUP
    ..
}

Tiếp theo, chúng ta cần quan tâm tới giá trị priority trên mỗi node. Giá trị ưu tiên lần lượt trên node1 node2 node3 sẽ bằng 101 100 99.

# Trên Node1
vrrp_instance VI_1 {
    ..
    priority 101
    ..
}

# Trên Node2
vrrp_instance VI_1 {
    ..
    priority 100
    ..
}

# Trên Node3
vrrp_instance VI_1 {
    ..
    priority 99
    ..
}

Cụm cần chỉ định một ID chia sẽ giữa các node. Tôi sẽ sử dụng giá trị 51 trong bài.

vrrp_instance VI_1 {
    ..
    virtual_router_id 51
    ..
}

Để khai báo IP VIP cho cụm 3 node. Tôi sẽ sử dụng block virtual_ipaddress, khai báo 1 IP cùng dải ens160. Ở đây tôi chọn ip 10.10.10.89

vrrp_instance VI_1 {
    ..
    virtual_ipaddress {
        10.10.10.89/24 # virtual ip address 
    }
    ..
}

Cuối cùng là track_scripttrack-script giúp keepalived xác định node nào sẽ nắm IP VIP. Như trong bài node1 được cấu hình với độ ưu tiên bằng 101. Nếu node1 kiểm tra dịch vụ HAProxy thành công thì độ ưu tiên của nó không đổi nhưng nếu kiếm tra thất bại thì độ ưu tiên của node1 sẽ giảm đi 2 và thập hơn node2. Khi đó node2 sẽ được chuyển IP VIP sang. Đây là cách dịch vụ keepalived hoạt động.

File cấu hình đầy đủ

Cấu hình keepalived trên node1

echo '
vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}
vrrp_instance VI_1 {
    interface ens160
    state MASTER
    virtual_router_id 51
    priority 101
    virtual_ipaddress {
        10.10.10.89/24
    }
    track_script {
        chk_haproxy
    }
}' > /etc/keepalived/keepalived.conf

Cấu hình keepalived trên node2

echo '
vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}
vrrp_instance VI_1 {
    interface ens160
    state BACKUP
    virtual_router_id 51
    priority 100
    virtual_ipaddress {
        10.10.10.89/24
    }
    track_script {
        chk_haproxy
    }
}' > /etc/keepalived/keepalived.conf

Cấu hình keepalived trên node3

echo '
vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}
vrrp_instance VI_1 {
    interface ens160
    state BACKUP
    virtual_router_id 51
    priority 99
    virtual_ipaddress {
        10.10.10.89/24
    }
    track_script {
        chk_haproxy
    }
}' > /etc/keepalived/keepalived.conf

Khởi động dịch vụ trên 3 node

systemctl start keepalived

Kiểm tra node1, chúng ta sẽ thấy IP VIP do keepalive quản lý

Phần 3. Cài đặt Haproxy bản 1.8#

Thực hiện trên tất cả các node

Cài đặt

sudo yum install wget socat -y
wget http://cbs.centos.org/kojifiles/packages/haproxy/1.8.1/5.el7/x86_64/haproxy18-1.8.1-5.el7.x86_64.rpm 
yum install haproxy18-1.8.1-5.el7.x86_64.rpm -y

Tạo bản backup cho cấu hình mặc định và chỉnh sửa cấu hình HAproxy

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

Cầu hình Haproxy

echo 'global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    maxconn                 8000
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    retries                 3
    timeout http-request    20s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s

listen stats
    bind *:8080 interface ens160
    mode http
    stats enable
    stats uri /stats
    stats realm HAProxy\ Statistics
    stats admin if TRUE

listen web-backend
    bind *:80
    balance  roundrobin
    cookie SERVERID insert indirect nocache
    mode  http
    option  httpchk
    option  httpclose
    option  httplog
    option  forwardfor
    server node1 10.10.11.86:8081 check cookie node1 inter 5s fastinter 2s rise 3 fall 3
    server node2 10.10.11.87:8081 check cookie node2 inter 5s fastinter 2s rise 3 fall 3
    server node3 10.10.11.88:8081 check cookie node3 inter 5s fastinter 2s rise 3 fall 3' > /etc/haproxy/haproxy.cfg

Cấu hình Log cho HAProxy

sed -i "s/#\$ModLoad imudp/\$ModLoad imudp/g" /etc/rsyslog.conf
sed -i "s/#\$UDPServerRun 514/\$UDPServerRun 514/g" /etc/rsyslog.conf
echo '$UDPServerAddress 127.0.0.1' >> /etc/rsyslog.conf

echo 'local2.*    /var/log/haproxy.log' > /etc/rsyslog.d/haproxy.conf

systemctl restart rsyslog

Bổ sung cấu hình cho phép kernel có thể binding tới IP VIP

echo 'net.ipv4.ip_nonlocal_bind = 1' >> /etc/sysctl.conf

Kiểm tra

$ sysctl -p

net.ipv4.ip_nonlocal_bind = 1

Khởi tạo dịch vụ HAProxy

systemctl restart haproxy
systemctl enable haproxy

Kết quả

Do tôi cấu hình sticky session trên request vì vậy trong một thời điểm chỉ có thể kết nối tới 1 webserver. Để truy cập tới các webserver còn lại, các bạn có thể tạo phiên ẩn danh và truy cập lại.


Khi truy cập trình ẩn danh

Tổng kết#

Đến đây tôi đã giới thiệu cho các bạn sử dụng Keepalived để tăng tính sẵn sàng cho dịch vụ cân bằng tải, cũng như dịch vụ Web. Ngoài ra các bạn có thể tham khảo thêm seri High Availability và tổng quan về HAProxy để có thêm thông tin.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
Hướng dẫn triển khai Haproxy Keepalive cho Apache trên CentOS 7, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master