はじめに
HAProxyを使ったWebサーバの分散はよくあると思いますが、送信するメールサーバーを分散してみました。
HAProxyの導入と設定
構築するシステムは以下の通り。メールを作成、送信するサーバーからHAProxy宛にメールを送信し、HAProxyが実際に外部にメールを送信するサーバーに分散させて送信する。
HAProxyのインストールと設定
構築環境はAlmaLinux9を使う。AlmaLinux9ではAppStreamに標準でパッケージが提供されている。# dnf install haproxy
HAProxyの設定
設定ファイルは/etc/haproxy/haproxy.cfgで行ってみました。
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
ssl-default-bind-ciphers PROFILE=SYSTEM
ssl-default-server-ciphers PROFILE=SYSTEM
defaults
mode tcp
log global
option dontlognull
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
frontend main
bind *:25
default_backend smtp_servers
frontend stats_localhost
mode http
bind *:8484
stats enable
stats uri /
stats refresh 10s
acl is_private src 192.168.210.0/24
backend smtp_servers
mode tcp
balance roundrobin
option smtpchk HELLO fsi.ne.jp
server smtp1 192.168.210.97:25 weight 100 check
server smtp2 192.168.210.98:25 weight 100 check
server smtp3 192.168.210.99:25 weight 100 check
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
ssl-default-bind-ciphers PROFILE=SYSTEM
ssl-default-server-ciphers PROFILE=SYSTEM
defaults
mode tcp
log global
option dontlognull
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
frontend main
bind *:25
default_backend smtp_servers
frontend stats_localhost
mode http
bind *:8484
stats enable
stats uri /
stats refresh 10s
acl is_private src 192.168.210.0/24
backend smtp_servers
mode tcp
balance roundrobin
option smtpchk HELLO fsi.ne.jp
server smtp1 192.168.210.97:25 weight 100 check
server smtp2 192.168.210.98:25 weight 100 check
server smtp3 192.168.210.99:25 weight 100 check
frontend main が外部からの要求を受けるセクションで、stats がブラウザで動作状況を確認することが出来る設定となる。backend で分散先のメールサーバーを設定する。
HAProxy の起動と確認
OSの起動時に自動的に起動するように設定しておく
# system enable haproxy --now
確認は設定したポートで確認
全てのメール送信サーバーが正常であればグリーンとなるが、送信用メールサーバが停止すると赤に近いオレンジ色に変わり、分散対象から自動的に外される。
どのサーバーにどの程度メールが送信されたか等を見る事もできる。
最後に
最近ではチャット系のソフトウェアが使われる事が多いがB2Cではまだまだメールが活躍する機会が多いと思う。信頼性の向上や1台から送信するメール数を分散させるなど色々使えるかもしれない。