Cấu Hình HAProxy Làm Load Balancing Cho Nginx

Cấu Hình HAProxy Làm Load Balancing Cho Nginx

HAProxy viết tắt (High Availability Proxy) là phần mềm mã nguồn mở, cung cấp dịch vụ cân bằng tải, proxy cho TCP/HTTP dựa trên request người dùng. 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.

Khái Quát:
Load balancing ( Cân bằng tải ) là kỹ thuật phân phối tải trên các web site có lượng truy cập cao. Giải pháp hỗ trợ việc tối ưu hóa tài nguyên, tăng sự đảm bảo, giảm độ trễ trên hệ thống.

Các thuật toán cân bằng tải cơ bản:

  • Round Robin: Các Request phân phối tuần tự tới các server, phương thức được sử dụng mặc định.
  • Least Connection: Request phân phối tới server có số kết nối tới ít nhất.
  • IP Hash: Lựa chọn Kết nối tới server bằng IP kết nối tới, tức IP A sẽ luôn kết nối tới server A trừ khi server A xảy ra sự cố.

Nếu một server đơn lẻ bị hỏng, cân bằng tải (load balancer) sẽ chuyển hướng lưu lượng truy cập đến các server trực tuyến còn lại. Khi một server mới được thêm vào nhóm máy chủ, bộ cân bằng tải sẽ tự động bắt đầu gửi yêu cầu đến máy chủ mới thêm này.

Mô Hình:yêu cầu

Yêu Cầu:yêu cầu 2

 

 

I. Thiết Lập Ban Đầu
A. LoadBalancer

-Thiết lập hostname trên Server và cập nhật hệ thống:
[root@loadbalancer ~]# hostnamectl set-hostname loadbalancer
[root@loadbalancer ~]# yum update -y

-Tắt SELinux và mở port 8080:

1.Tắt SELinux
*Tìm kiếm SELINUX=enforcing thay thế bằng SELINUX=disabled trên 2 file config vs selinux. (Nếu có sẵn là SELINUX=disabled rồi thì không cần thay đổi gì)
[root@loadbalancer ~]# vi /etc/selinux/config
[root@loadbalancer ~]# vi /etc/sysconfig/selinux
Tim kiem vs thay the

2.Mở port 8080
[root@loadbalancer ~]# service firewalld start
[root@loadbalancer ~]# firewall-cmd --permanent --zone=public --add-port=8080/tcp
[root@loadbalancer ~]# firewall-cmd --reload

-Cấu hình file hosts:
[root@loadbalancer ~]# vi /etc/hosts  Thêm 3 IP + hostname của 3 Server.

sửa file host

-Khởi động lại hệ thống:
[root@loadbalancer ~]# init 6

B. Web 01 vs Web 02
-Thiết lập hostname trên Server và cập nhật hệ thống:
[root@loadbalancer ~]# hostnamectl set-hostname web01
[root@loadbalancer ~]# hostnamectl set-hostname web02
[root@loadbalancer ~]# yum update -y

-Tắt SELinux:
*Tìm kiếm SELINUX=enforcing thay thế bằng SELINUX=disabled trên 2 file config vs selinux. (Nếu có sẵn là SELINUX=disabled rồi thì không cần thay đổi gì)
[root@loadbalancer ~]# vi /etc/selinux/config
[root@loadbalancer ~]# vi /etc/sysconfig/selinux
Tim kiem vs thay the

-Cấu hình file hosts:
[root@loadbalancer ~]# vi /etc/hosts  Thêm 3 IP + hostname của 3 Server. (Cả 2 web server sửa file hosts giống nhau)

sửa file host

-Khởi động lại hệ thống:
[root@loadbalancer ~]# init 6

II. Cài Đặt
A. LoadBanlancer cài đặt HAProxy phiên bản 1.8

HAProxy mặc đinh tại origin yum repo là 1.5, để sử dụng phiển bản 1.8 chúng ta sẽ cài từ RPM tùy chọn

-Cài đặt:
[root@loadbalancer ~]# yum install wget socat -y
[root@loadbalancer ~]# wget http://cbs.centos.org/kojifiles/packages/haproxy/1.8.1/5.el7/x86_64/haproxy18-1.8.1-5.el7.x86_64.rpm
[root@loadbalancer ~]# yum install haproxy18-1.8.1-5.el7.x86_64.rpm -y

-Tạo backup cho cấu hình mặc định và chỉnh sửa cấu hình HAproxy:
[root@loadbalancer ~]# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

Thay đổi file haproxy.cfg: ( Copy tất cả )

[root@loadbalancer ~]# 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
log                     global
option                  httplog
option                  dontlognull
option http-server-close
option forwardfor       except 127.0.0.0/8
option                  redispatch
retries                 3
timeout http-request    10s
timeout queue           1m
timeout connect         10s
timeout client          1m
timeout server          1m
timeout http-keep-alive 10s
timeout check           10s
maxconn                 3000

listen stats
    bind :8080
    mode http
    stats enable
    stats uri /stats
    stats realm HAProxy\ Statistics

listen webcluster
    bind :80
    balance  roundrobin
    mode  http
    option  forwardfor
    server web1 10.10.11.87:80 check
    server web2 10.10.11.88:80 check' > /etc/haproxy/haproxy.cfg

-Khởi động lại dịch vụ HAProxy:
[root@loadbalancer ~]# systemctl enable haproxy
[root@loadbalancer ~]# systemctl restart haproxy

B. Web01 vs 02 cài đặt Nginx cho Server

[root@loadbalancer ~]# yum update
[root@loadbalancer ~]# yum install epel-release
(Cài đặt CentOS 7 EPEL repository cho server)
[root@loadbalancer ~]# yum install nginx (Cài đặt Nginx cho server)
[root@loadbalancer ~]# systemctl start nginx (cần start Nginx để Nginx có thể bắt đầu hoạt động)
[root@loadbalancer ~]# systemctl status nginx (kiểm tra trạng thái)
[root@loadbalancer ~]# systemctl enable nginx (enable để Nginx có thể start khi boot để trong 1 số trường hợp chúng ta cần reset server thì Nginx có thể tự động start)

C. Test Server

-Loadbalancer
Loadbalancer

-Web01
wweb1

-Web02
web2

III. Cấu hình log cho HAProxy Trên Loadbalancer

Mặc định HAProxy sẽ gửi log tới rsyslog trên IP local.

-Kiểm tra cấu hình log mặc định:
[root@loadbalancer ~]# cat /etc/haproxy/haproxy.cfg | grep ^global -A 1
=> Kết quả ra:

global
    log         127.0.0.1 local2

-Chỉnh sửa cấu hình rsyslog.conf:
[root@loadbalancer ~]# sed -i "s/#\$ModLoad imudp/\$ModLoad imudp/g" /etc/rsyslog.conf
[root@loadbalancer ~]# sed -i "s/#\$UDPServerRun 514/\$UDPServerRun 514/g" /etc/rsyslog.conf
[root@loadbalancer ~]# echo '$UDPServerAddress 127.0.0.1' >> /etc/rsyslog.conf

-Tạo file cấu hình rsyslog cho Haproxy:
[root@loadbalancer ~]# echo 'local2.* /var/log/haproxy.log' > /etc/rsyslog.d/haproxy.conf

-Khởi động lại Rsyslog và HAProxy:
[root@loadbalancer ~]# systemctl restart rsyslog
[root@loadbalancer ~]# systemctl restart haproxy

IV. Kết quả

-File cấu hình log:

[root@loadbalancer ~]# ll /var/log/haproxy.log
=> kết quả:

-rw------- 1 root root 4577 Feb  8 10:43 /var/log/haproxy.log

Chúc các bạn thành công!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *