LinuCエヴァンジェリストの鯨井貴博@opensourcetechです。
HAProxyでアクセス状況をブラウザで可視化するメモです。
HAProxyとは
高可用性(High Availavility)を実現するためのOSSのLoad Balancerです。
http://www.haproxy.org/
設定例
frontend・・・フロントエンド設定
backend・・・バックエンド設定
listen stats・・・今回利用するアクセス状況を可視化する設定
pi@raspberrypi:~ $ cat /etc/haproxy/haproxy.cfg global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets defaults log global mode tcp option tcplog # 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 kube-apiserver bind *:6443 default_backend kube-apiserver backend kube-apiserver balance roundrobin server k8smaster1 k8smaster1:6443 check server k8smaster2 k8smaster2:6443 check server k8smaster3 k8smaster3:6443 check frontend kube-etcd bind *:2379 default_backend kube-etcd backend kube-etcd balance roundrobin server k8smaster1 k8smaster1:2379 check server k8smaster2 k8smaster2:2379 check server k8smaster3 k8smaster3:2379 check listen stats bind :9999 mode http stats enable stats hide-version stats uri /stats
HAProxyの起動
使用するLinux Distributionによりますが、今回使用しているUbuntu 20.04ではsystemctlを使います。
pi@raspberrypi:~ $ sudo systemctl start haproxy pi@raspberrypi:~ $ sudo systemctl status haproxy ● haproxy.service - HAProxy Load Balancer Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor prese> Active: active (running) since Thu 2021-12-02 18:37:18 GMT; 9s ago Docs: man:haproxy(1) file:/usr/share/doc/haproxy/configuration.txt.gz Process: 22245 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (> Main PID: 22247 (haproxy) Tasks: 5 (limit: 409) CPU: 392ms CGroup: /system.slice/haproxy.service tq22247 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/> mq22249 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/> Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-apiserver started. Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-apiserver started. Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-etcd started. Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-etcd started. Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-etcd started. Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy kube-etcd started. Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy stats started. Dec 02 18:37:18 raspberrypi systemd[1]: Started HAProxy Load Balancer. Dec 02 18:37:18 raspberrypi haproxy[22247]: [NOTICE] 335/083718 (22247) : New w> Dec 02 18:37:18 raspberrypi haproxy[22247]: Proxy stats started.
ブラウザでアクセス状況を確認する
ssで確認するとわかりますが、9999/tcpにアクセスすればOKです。
https://haproxyのIPaddress:9999/stats
pi@raspberrypi:~ $ ss -tanp State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 4096 0.0.0.0:2379 0.0.0.0:* LISTEN 0 4096 0.0.0.0:6443 0.0.0.0:* LISTEN 0 4096 0.0.0.0:9999 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 127.0.0.1:631 0.0.0.0:* ESTAB 0 0 192.168.1.107:22 192.168.1.131:53769 LISTEN 0 128 [::]:22 [::]:* LISTEN 0 128 [::1]:631 [::]:*
ブラウザからアクセスすると、以下のようになります。
フロントエンド部・バックエンド部のInput/Outputのバイト数など見れるので、
・指定した負荷分散アルゴリズムとなっているか
・バックエンドサーバがダウンしていないか
など可視化できます。