Bài viết này giải thích làm thế nào để thiết lập một cân bằng tải với HAProxy và keepalived trên Centos 6.5. Bộ cân bằng tải ngồi giữa người sử dụng và hai (hoặc nhiều hơn) các máy chủ web Apache phụ trợ mà giữ cùng một nội dung. Không chỉ thực hiện cân bằng tải phân phối các yêu cầu đến hai máy chủ Apache phụ trợ, nó cũng kiểm tra sức khỏe của các máy chủ phụ trợ. Nếu một trong số họ là xuống, tất cả các yêu cầu sẽ tự động được chuyển hướng đến các máy chủ phụ trợ còn lại. Bên cạnh đó, hai nút cân bằng tải theo dõi nhau bằng cách sử dụng keepalived, và nếu Máy chủ không hoạt động, các máy backup sẽ trở thành máy chủ thay thế, có nghĩa là người dùng sẽ không nhận thấy bất kỳ sự gián đoạn của dịch vụ. HAProxy là session-aware, có nghĩa là bạn có thể sử dụng nó với bất kỳ ứng dụng web mà làm cho việc sử dụng các phiên giao dịch (như diễn đàn,cửa hàng mua sắm, vv ).
Sau đây AdminVietnam.org sẽ hướng dẫn các bạn cài đặt và cấu hình hệ thống HAProxy và Keepalived
Sơ đồ mạng như sau
- Load Balancer 1: lb1.adminvietnam.org, IP address: 192.168.11.130
- Load Balancer 2: lb2.adminvietnam.org, IP address: 192.168.11.131
- Web Server 1: server.adminvietnam.org, IP address: 192.168.11.128
- Web Server 2: server2.adminvietnam.org, IP address: 192.168.11.129
-
Chúng ta cũng cần một địa chỉ IP ảo giữa lb1 và lb2: 192.168.11.132
Cách cấu hình hai máy web server các bạn có thể tham khảo bài viết sau đây
-
Cấu hình Keepalived
Trên cả hai máy:
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm –ivh epel-release-6-8.noarch.rpm # yum install keepalived -y
Để cho phép HAProxy để ràng buộc vào các địa chỉ IP được chia sẻ, chúng ta thêm dòng sau vào /etc/sysctl.conf :
# vi /etc/sysctl.conf
thêm vào file dòng sau:
[...] net.ipv4.ip_nonlocal_bind=1
kiểm tra
# sysctl -p
- Tiếp theo chúng ta phải cấu hình keepalived (điều này được thực hiện thông qua các tập tin /etc/keepalived/keepalived.conf cấu hình). Tôi muốn LB1 là máy chính (master) cân bằng tải, vì vậy chúng tôi cấu hình như sau trên LB1:
LB1:
# vi /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy { # Requires keepalived-1.1.13 script "killall -0 haproxy" interval 2 # Kiểm tra 2 giây/1 lần weight 2 # Thêm vào 2 điểm của prio } vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51 priority 101 # 101 on master, 100 on backup virtual_ipaddress { 192.168.11.132 # Địa chỉ IP ảo giữa LB1 và LB2 } track_script { chk_haproxy } }
# service keepalived start
- Chúng ta kiểm tra xem máy LB1 đã nhận IP ảo bằng lệnh:
# ip a
Kết quả
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:78:1c:7b brd ff:ff:ff:ff:ff:ff
inet 192.168.11.130/24 brd 192.168.11.255 scope global eth0
inet 192.168.11.132/32 scope global eth0
inet6 fe80::20c:29ff:fe78:1c7b/64 scope link
valid_lft forever preferred_lft forever
3: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
link/ether 12:90:5b:ba:7b:0d brd ff:ff:ff:ff:ff:ff
- Bây giờ chúng ta làm gần như giống nhau về LB2. Có một sự khác biệt nhỏ trong /etc/keepalived/keepalived.conf :
LB2
# vi /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy { # Requires keepalived-1.1.13 script "killall -0 haproxy" interval 2 # Kiểm tra 2 giây/1 lần weight 2 # Thêm vào 2 điểm của prio } vrrp_instance VI_1 { interface eth0 state BACKUP virtual_router_id 51 priority 100 # 101 on master, 100 on backup virtual_ipaddress { 192.168.11.132 # Địa chỉ IP ảo giữa LB1 và LB2 } track_script { chk_haproxy } }
# service keepalived start
2. Cấu hình HAProxy ( cấu hình chia sẽ tải)
LB1:
# yum install haproxy -y
# vi /etc/haproxy/haproxy.cfg
- xóa hết nội dung trong đó và thêm vào nội dung như sau:
listen http_proxy bind 192.168.11.132:80 # IP ảo giữa LB1 va LB2 mode http # chế độ HTTP stats enable stats auth root:123456 # tài khoản và mật khẩu để vào haproxy phân tíchbalance roundrobin backlog 2048 option httpclose option forwardfor timeout connect 10000 timeout client 30000 timeout server 30000 timeout queue 30000 maxconn 4000 option httpchk option abortonclose server web1 192.168.11.128:80 cookie web1 check server web2 192.168.11.129:80 cookie web2 check
# service haproxy start # chkconfig haproxy on
LB2: Tương tự
3. Kiểm tra
Trên Client vào địa chỉ:
http://192.168.11.132/haproxy?stats
- Cả hai máy web server đều đang hoạt động. Ta vào địa chỉ http://192.168.11.132 sẽ thấy máy server 1 đang hoạt động !
- Ta thử tắt máy Web server 1 đi và kiểm tra lại sẽ thấy máy Web server 2 sẽ hoạt động thay cho máy 1 bị hư !
Nguyễn Hoàng Anh – AdminVietnam.org