Linux, Network, CentOS

Hướng dẫn cài đặt và cấu hình HAProxy trên CentOS 8 / RHEL 8

Written by ductri

HAProxy được viết tắt của High Availability Proxy, đây là một công cụ cân bằng tải mã nguồn mở và miễn phí, cho phép cân bằng lưu lượng đến - incoming traffic (dựa trên TCP và HTTP) bằng cách phân phối tải cho các backend server bằng các tiêu chí khác nhau.

Nói cách khác, chúng ta có thể nói HAProxy được sử dụng để cung cấp khả năng chịu lỗi và tính sẵn sàng cao trong trường hợp khi một node nhận được quá nhiều request đồng thời. Nó được sử dụng bởi hầu hết các trang web nổi tiếng như GitHub, Stack Overflow và Tumbler.

Trong bài viết này, chúng ta sẽ thảo luận về cách cài đặt và cấu hình HAProxy trên CentOS 8 / RHEL 8 cho Máy chủ web Nginx. Mô trường lab gồm có:

  • HAProxy Server – 192.168.1.10 (haproxy-centos8)
  • Nginx Server 1 – 192.168.1.11 (nginx-node01)
  • Nginx Server 2 – 192.168.1.12 (nginx-node01)

Bước 1: Cập nhật host file trên HAProxy Server

Đăng nhập vào hệ thống CentOS 8 hoặc RHEL 8 của bạn, nơi bạn sẽ cài đặt haproxy, thêm các dòng sau vào file /etc/hosts

192.168.1.10    haproxy-centos8
192.168.1.11    nginx-node01
192.168.1.12    nginx-node02

Sau khi cập nhật hosts file, hãy đảm bảo bạn có thể ping đến các node Nginx

Bước 2: Cài đặt và Cấu hình HAProxy trên CentOS 8 / RHEL 8

Gói Haproxy có sẵn trong package repositories mặc định của CentOS 8 và RHEL 8, vì vậy nó có thể dễ dàng cài đặt bằng lệnh dnf. Nhưng bạn nên cập nhật hệ thống trước khi cài đặt haproxy.

root@haproxy-centos8 ~]# dnf update -y
root@haproxy-centos8 ~]# reboot

Bây giờ sử dụng lệnh dnf sau để cài đặt haproxy

[root@haproxy-centos8 ~]# dnf install haproxy
[root@haproxy-centos8 ~]# dnf install haproxy
CentOS-8 - AppStream                            475  B/s | 4.3 kB     00:09    
CentOS-8 - Base                                 3.1 kB/s | 3.8 kB     00:01    
CentOS-8 - Extras                               568  B/s | 1.5 kB     00:02    
Dependencies resolved.
================================================================================
 Package         Architecture   Version                 Repository         Size
================================================================================
Installing:
 haproxy         x86_64         1.8.15-5.el8            AppStream         1.3 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 1.3 M
Installed size: 4.1 M
Is this ok [y/N]: Y

Khi haproxy được cài đặt thành công, hãy cấu hình nó bằng cách chỉnh sửa file cấu hình /etc/haproxy/haproxy.cfg

Trước khi cấu hình file này bạn nên tạo ra một file backup cho nó để sử dụng lại nếu có lỗi trong quá trình cấu hình.

[root@haproxy-centos8 ~]# cd /etc/haproxy/
[root@haproxy-centos8 haproxy]# cp haproxy.cfg haproxy.cfg-org
[root@haproxy-centos8 haproxy]#

Trong file cấu hình, chúng ta sẽ sửa hai phần là frontend và backend. Trong phần Frontend, chúng ta xác định IP haproxy và port của nó, stats uri và tên backend. Trong phần Backend, chúng ta xác định loại thuật toán cân bằng tải mà chúng ta sẽ sử dụng như round robin, least connection... và tên của backend server, địa chỉ IP, port:

[root@haproxy-centos8 haproxy]# vi haproxy.cfg
…………………
frontend http_balancer
    bind 192.168.1.10:80
    option http-server-close
    option forwardfor
    stats uri /haproxy?stats

#    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#    acl url_static       path_end       -i .jpg .gif .png .css .js
#    use_backend static          if url_static
    default_backend     nginx_webservers

backend nginx_webservers
    mode        http
    balance     roundrobin
    option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost    
    server  nginx-node01  192.168.1.11:80  check
    server  nginx-node02  192.168.1.12:80  check
 ………………………………

Lưu và thoát khỏi file

Cấu hình rsyslog để lưu lại toàn bộ trạng thái của HAProxy, sửa file cấu hình rsyslog /etc/rsyslog.conf và bỏ comment dòng 19 và 20

[root@haproxy-centos8 ~]# vi /etc/rsyslog.conf
……
module(load="imudp")
input(type="imudp" port="514")
……

Bây giờ tạo file haproxy.conf cho rsyslog, page các dòng sau:

[root@haproxy-centos8 ~]# vi /etc/rsyslog.d/haproxy.conf
local2.=info     /var/log/haproxy-access.log
local2.notice    /var/log/haproxy-info.log

Restart và enable rsyslog service để dịch vụ tự động bật mỗi khi server khởi động lại

[root@haproxy-centos8 ~]# systemctl restart rsyslog
[root@haproxy-centos8 ~]# systemctl enable rsyslog

Cuối cùng chúng ta hãy start haproxy, nhưng trước khi start dịch vụ haproxy, hãy đặt rule selinux sau:

[root@haproxy-centos8 ~]# setsebool -P haproxy_connect_any 1

Start & enable haproxy bằng việc sử dụng các lệnh dưới đây:

[root@haproxy-centos8 ~]# systemctl start haproxy
[root@haproxy-centos8 ~]# systemctl enable haproxy

Mở port firewall của OS cho haproxy

[root@haproxy-centos8 ~]# firewall-cmd --permanent --add-port=80/tcp
[root@haproxy-centos8 ~]# firewall-cmd --reload

Bạn có thể xem trạng thái của haproxy thông qua trình duyệt web, nhập url: http://<HA-Proxy-IP>/haproxy?stats