Hướng dẫn cài đặt HAProxy trên Ubuntu 18.04

cài đặt haproxy

HAProxy là một trong những giải pháp load balancing đáng tin cậy và có tốc độ rất xử lý rất nhanh – phù hợp cho các ứng dụng cần tính high availability cao dựa trên TCP và HTTP. Ngày nay, tối đa hóa thời gian xử lý ứng dụng website, cụ thể hơn là tăng tốc độ website cho những trang web có lưu lượng truy cập lớn là một vấn đề cực kỳ quan trọng. Khi đó, chúng ta sẽ cần phải thiết lập môi trường sử dụng nhiều server tăng cường tính khả dụng cao (high availability) cho website – có thể dễ dàng quản lý trong trường hợp một server bị lỗi.

Mô hình triển khai HAProxy làm Load Balancing

Trong bài viết này, mình sẽ hướng dẫn bạn cách cài đặt bộ Load Balancing HAProxy chạy trên môi trường Ubuntu, Debian. HAProxy sẽ giúp cân bằng tải và chuyển các requests tới các server khác nhau dựa trên địa chỉ IP và port.

Hướng dẫn cài đặt HAProxy

Trong bài viết này, mình giả sử mình đã có tổng cộng 4 server, trong đó 1 server được sử dụng để cài đặt HAProxy và 3 server còn lại được sử dụng để chạy ứng dụng web.

Thông tin web server

Server 1:    web1.example.com     192.168.1.1
Server 2:    web2.example.com     192.168.1.2
Server 3:    web3.example.com     192.168.1.3

HAProxy Server: 

HAProxy:     haproxy              192.168.1.10

Bước 1. Cài đặt HAProxy

Trước tiên, bạn cần đăng nhập vào server dự định cài HAProxy đã, có địa chỉ IP là 192.168.1.10, sau đó chạy những câu lệnh dưới đây:

Để cài đặt phiên bản HAProxy mới nhất, sử dụng câu lệnh sau:

sudo apt-get update
sudo apt-get install haproxy

Để cài đặt phiên bản HAProxy cố định nào đó, bạn cần phải add repository của phiên bản đó vào. Trong ví dụ này mình sẽ cài đặt HAProxy phiên bản 1.8

sudo add-apt-repository ppa:vbernat/haproxy-1.8
sudo apt-get update
sudo apt-get install haproxy

Bước 2. Cấu hình HAProxy Load Balancing

Bây giờ chỉnh sửa file cấu hình mặc định của HAProxy có đường dẫn /etc/haproxy/haproxy.cfg

sudo vi /etc/haproxy/haproxy.cfg

Thông tin cấu hình mặc định

Trong file cấu hình này, bạn sẽ thấy có các thông tin cấu hình mặc định của HAProxy tương tự như hình phần code bên dưới.

global
	log /dev/log	local0
	log /dev/log	local1 notice
	chroot /var/lib/haproxy
	stats socket /run/haproxy/admin.sock mode 660 level admin
	stats timeout 30s
	user haproxy
	group haproxy
	daemon

	# Default SSL material locations
	ca-base /etc/ssl/certs
	crt-base /etc/ssl/private

	# Default ciphers to use on SSL-enabled listening sockets.
	# For more information, see ciphers(1SSL). This list is from:
	#  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
	ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256::RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
	ssl-default-bind-options no-sslv3

defaults
	log	global
	mode	http
	option	httplog
	option	dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
	errorfile 400 /etc/haproxy/errors/400.http
	errorfile 403 /etc/haproxy/errors/403.http
	errorfile 408 /etc/haproxy/errors/408.http
	errorfile 500 /etc/haproxy/errors/500.http
	errorfile 502 /etc/haproxy/errors/502.http
	errorfile 503 /etc/haproxy/errors/503.http
	errorfile 504 /etc/haproxy/errors/504.http

Tạo HAProxy Listener

Bây giờ, bạn cần báo cho HAProxy biết nó nên lắng nghe kết nối đến ở đâu. Trong ví dụ này, mình sẽ khai báo HAProxy sẽ lắng nghe trên port 80 của con HAProxy server này luôn.

frontend Local_Server
    bind 192.168.1.10:80
    mode http
    default_backend My_Web_Servers

Tạo Backend Web servers

Cấu hình HAProxy bên trên sẽ lắng nghe trên port 80. Bây giờ mình sẽ định nghĩa phần backend web server – nơi mà HAProxy sẽ gửi request tới.

backend nodes
    mode http
    balance roundrobin
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    option httpchk HEAD / HTTP/1.1rnHost:localhost
    server web1.example.com  192.168.1.1:80
    server web2.example.com  192.168.1.2:80
    server web3.example.com  192.168.1.3:80

Kích hoạt Stats (tùy chọn)

Nếu bạn muốn cấu hình phần theo dõi thông tin thống kê, bạn có thể thêm thông tin cấu hình sau vào file cấu hình của HAProxy.

listen stats *:9200
    stats enable
    stats hide-version
    stats refresh 30s
    stats show-node
    stats auth username:password
    stats uri  /stats

Bước 3. File cấu hình HAProxy hoàn thiện

File cấu hình HAProxy sau khi tạo lập thêm sửa sẽ có dạng như sau:

global
	log /dev/log	local0
	log /dev/log	local1 notice
	chroot /var/lib/haproxy
	stats socket /run/haproxy/admin.sock mode 660 level admin
	stats timeout 30s
	user haproxy
	group haproxy
	daemon

	# Default SSL material locations
	ca-base /etc/ssl/certs
	crt-base /etc/ssl/private

	# Default ciphers to use on SSL-enabled listening sockets.
	# For more information, see ciphers(1SSL). This list is from:
	#  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
	ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256::RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
	ssl-default-bind-options no-sslv3

defaults
	log	global
	mode	http
	option	httplog
	option	dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
	errorfile 400 /etc/haproxy/errors/400.http
	errorfile 403 /etc/haproxy/errors/403.http
	errorfile 408 /etc/haproxy/errors/408.http
	errorfile 500 /etc/haproxy/errors/500.http
	errorfile 502 /etc/haproxy/errors/502.http
	errorfile 503 /etc/haproxy/errors/503.http
	errorfile 504 /etc/haproxy/errors/504.http

frontend Local_Server
    bind 192.168.1.10:80
    mode http
    default_backend My_Web_Servers

backend My_Web_Servers
    mode http
    balance roundrobin
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    option httpchk HEAD / HTTP/1.1rnHost:localhost
    server web1.example.com  192.168.1.1:80
    server web2.example.com  192.168.1.2:80
    server web3.example.com  192.168.1.3:80

listen stats *:9200
    stats enable
    stats hide-version
    stats refresh 30s
    stats show-node
    stats auth username:password
    stats uri  /stats 

Bước 4. Restart server

Bây giờ bạn đã cập nhật thay đổi thông tin cấu hình HAProxy cần thiết rồi. Lúc này, bạn cần kiểm tra xác nhận xem thông tin cấu hình đã đúng chưa trước khi restart server bằng câu lệnh sau:

haproxy -c -f /etc/haproxy/haproxy.cfg

Nếu như thông tin câu lệnh trên hiển thị thông tin báo valid, nghĩa là file cấu hình của bạn không có vấn đề gì cả. Bây giờ bạn chỉ cần restart lại server thôi.

sudo service haproxy restart

Bước 5. Xác nhận thông tin cấu hình HAProxy

Lúc này, bạn có thể truy cập vào trang thống kê có địa chỉ là 192.168.1.10:9200 mà mình đã khai báo Stats trong file config bên trên. Nếu như thông tin cả 3 server đều xanh lè nghĩa là cả 3 server ok, còn lại màu đỏ nghĩa là check server bị down.

Ví dụ trang thông tin thống kê sẽ có dạng như sau:

Bảng thông tin thống kê load balancing server trong HAProxy

Kết luận

Qua bài viết này, bạn đã có thể cài đặt thành công bộ Load Balancing HAProxy trên server Ubuntu rồi đấy. Tuy nhiên, đây mới chỉ là demo thôi, ngoài ra, bạn còn cần phải biết thêm về các thông số cấu hình HAProxy như healthcheck, restart, downtime, thuật toán load balancing,… Đặc biệt hơn, trong trường hợp bạn hoạt động trong lĩnh vực thiết kế website, ngay từ bước ban đầu, bạn cần phải hiểu rõ về sản phẩm mà bạn sẽ thiết kế, nó có phù hợp để load balancing không hay chỉ chạy trên single server mà thôi. Như vậy, sử dụng HAProxy làm bộ cân bằng tải cho website sẽ trở nên hữu ích và đơn giản hơn nhiều đấy.

5/5 (2 Reviews)

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

Please enter your comment!
Please enter your name here