動態配置 HAProxy Configuration

在現在任何的雲端服務開發或部署時,都會面臨如何能處理大量使用者同時存取服務所產生大量請求的問題。然而大多數的處理方式免不了需要透過負載平衡服務,來將使用者請求分派至不同的實體或虛擬機器進行處理,因此負載平衡服務就扮演極為重要的角色。

本篇就以 HAProxy 為例,將使用者的請求以 Round Robin 的方式平均分派至不同機器進行處理,並結合 Data Plane API 提供一個 RESTful API 介面以提供動態修改 HAProxy 配置的功能。

軟體版本

Software Name Version
HAProxy 2.2.4
HAProxy Data Plane API 2.1.0

環境

OS Host Name Private Network
CentOS 7 haproxy 192.168.5.2
CentOS 7 httpd1 192.168.5.3
CentOS 7 httpd2 192.168.5.4

安裝 HAProxy

更新 CentOS 上的 packags 與安裝相依套件

1
2
$ yum update
$ yum install wget systemd-devel

HAProxy Conmmunity Edition 下載 HAProxy 2.2.4(LTS) 並解壓縮

1
2
$ wget http://www.haproxy.org/download/2.2/src/haproxy-2.2.4.tar.gz
$ tar -zxvf haproxy-2.2.4.tar.gz

進入 haproxy-2.2.4/ 目錄,並進行編譯

1
2
$ cd haproxy-2.2.4
$ make TARGET=linux-glibc USE_SYSTEMD=1

安裝需要 makegcc 兩個套件,若是使用 CentOS 作業系統可透過 yum install 指令進行安裝。

安裝 HAProxy 2.2.4

1
$ make install

進入 haproxy-2.2.4/contrib/systemd/ 目錄編譯 haproxy.service 檔案,並將產生出來的 haproxy.service 移動至 /lib/systemd/system/ 目錄底下

1
2
$ make
$ mv haproxy.service /lib/systemd/system/

建立 HAProxy 配置檔放置目錄,並寫入基本配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ mkdir -p /etc/haproxy
$ mkdir -p /var/lib/haproxy
$ vim /etc/haproxy/haproxy.cfg

global
daemon
chroot /var/lib/haproxy
user haproxy
group haproxy
stats timeout 30s

defaults
mode http
log global
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000

frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back

backend http_back
balance roundrobin
server server_name1 192.168.5.3:80 check
server server_name2 192.168.5.4:80 check

建立 haproxy use 與 group

1
$ useradd -r haproxy

啟動 HAProxy 服務

1
2
3
4
5
6
7
8
9
10
$ systemctl start haproxy
$ systemctl status haproxy
● haproxy.service - SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments.
Loaded: loaded (/etc/rc.d/init.d/haproxy; bad; vendor preset: disabled)
Active: active (running) since Sun 2020-10-25 09:01:42 UTC; 1s ago
Docs: man:systemd-sysv-generator(8)
Process: 13370 ExecStart=/etc/rc.d/init.d/haproxy start (code=exited, status=0/SUCCESS)
Main PID: 13381 (haproxy)
CGroup: /system.slice/haproxy.service
└─13381 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid

到這裡,基本的 HAProxy 已經安裝完成,接下來進行 HAProxy Data Plane API 安裝

安裝 HAProxy Data Plane API

下載 HAProxy Data Plane API

1
$ wget https://github.com/haproxytech/dataplaneapi/releases/download/v2.1.0/dataplaneapi_2.1.0_Linux_x86_64.tar.gz

解壓縮 dataplaneapi_2.1.0_Linux_x86_64.tar.gz 檔案並將 build/dataplaneapi 檔案複製至 /usr/local/bin 目錄

1
2
$ tar -zxvf dataplaneapi_2.1.0_Linux_x86_64.tar.gz
$ cp build/dataplaneapi /usr/sbin/

/etc/haproxy/haproxy.cfg 中加入 userlist api 來設定呼叫 HAPorxy Data Plane API 驗證的使用者名稱與密碼。以本例 james 為帳號, mypassword 為密碼。

1
2
3
4
$ vim /etc/haproxy/haproxy.cfg

userlist api
user james insecure-password mypassword

修改完成後,重新啟動 haproxy

1
$ systemctl restart haproxy

最後啟動 HAProxy Data Plane API

1
$ dataplaneapi --host 0.0.0.0 --port 5555 --haproxy-bin /usr/sbin/haproxy --config-file /etc/haproxy/haproxy.cfg --reload-cmd "systemctl reload haproxy" --reload-delay 5 --userlist api

HAProxy 也很貼心的提供一個 API 文件,只要啟動 HAProxy Data Plane API 後透過 http://127.0.0.1:5555/v2/docs 即可看到如下文件內容

HAProxyDataPlaneAPIDocs

若針對本篇教學有任何疑問或有敘述錯誤的地方,歡迎在底下留言討論唷~

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×