CloudStackでHAproxyを利用する
概要
3回にわたってCloudStackのVMを使ってLVS(Linux Virtual Server)を構成してみました。
- ipvsadmを利用
CloudStackでLVS(Linux Virtual Server) - mukkun0824’s blog
- Ldirectordを利用
CloudStackでLVS(Linux Virtual Server) -Ldirectordを利用編 - mukkun0824’s blog
- keepalivedを利用してlvsの冗長化
CloudStackでLVS(Linux Virtual Server) -keepalivedを利用編 - mukkun0824’s blog
今回は、今までのようなL4のトランスポート層の話ではなく、L7のアプリケーション層での処理になります。したがって、バックエンド側での作業がほぼ必要なく、今までの方法よりは設定は楽です。HAproxyはその名の通りhttpリクエストを代理受付してくれます。
参考
https://www.server-world.info/query?os=CentOS_7&p=haproxy&f=1
構成
構成は全く前回と同じですが、今回はHAproxyの設定とログの設定を行います。HAproxyサーバーがhttpリクエストを処理してくれるので、送信元のヘッダ情報をバックエンド側に表示させる必要があります。これをforwarderの設定といいますが、「X-Forwarded-For」の設定もHAproxy上とバックエンドサーバーのhttpd.confで行います。まあVIPを設定する必要もないのですが、前回のまま付けています。
(internet) | | グローバルIP +---------+-----------+ | Virtual Router | +---------+-----------+ | 192.168.0.1/24 GW | | | eth0|192.168.0.223/24 eth0:0 |192.168.0.100/24 +-----------+ | HAproxy | | | +-----+-----+ | +------------+ | +------------+ | Backend01 |192.168.0.62/24| 192.168.0.243/24| Backend02 | | Web Server +------------+--------------------+ Web Server | | |eth0 eth0 | | +------------+ +------------+
HAProxyインストール・設定
念のためhostsに追加しておきます
[root@mukkun-haproxy-server ~]# cat /etc/hosts 192.168.0.223 mukkun-haproxy-server 192.168.0.62 mukkun-backend-1 192.168.0.243 mukkun-backend-2 yum -y install haproxy mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.org
設定ファイルを編集します
vi /etc/haproxy/haproxy.cfg global # ログの出力先とログレベル log 127.0.0.1 local2 info chroot /var/lib/haproxy pidfile /var/run/haproxy.pid # プロセス毎の最大接続数 maxconn 256 # 実行ユーザー/グループ user haproxy group haproxy # デーモンとして起動 daemon defaults # レイヤー7で負荷分散 mode http # ログ設定は global を継承 log global # HTTP リクエストログ取得 option httplog # バックエンドが応答しない場合のタイムアウト時間 timeout connect 10s # クライアントサイドのタイムアウト時間 timeout client 30s # サーバーサイドのタイムアウト時間 timeout server 30s # フロントエンドを定義 ( http-in の箇所は任意の名前 ) frontend http-in # 80ポートで待ち受け bind *:80 # デフォルトのバックエンドを定義 default_backend backend_servers # X-Forwarded-For ヘッダーを渡す option forwardfor # バックエンドを定義 backend backend_servers # ラウンドロビンで負荷分散 balance roundrobin # バックエンドサーバーを定義 server mukkun-backend-1 192.168.0.62:80 check server mukkun-backend-2 192.168.0.243:80 check
サービス起動します
systemctl start haproxy
ログを取得できるようにrsyslog修正
vi /etc/rsyslog.conf 15,16行目:コメント解除, 17行目:追記 $ModLoad imudp $UDPServerRun 514 $AllowedSender UDP, 127.0.0.1 54行目:以下のように変更 *.info;mail.none;authpriv.none;cron.none,local2.none /var/log/messages local2.* /var/log/haproxy.log
サービス再起動します。
systemctl restart rsyslog
BackEndServer:設定
バックエンドサーバーのhttpもログ変更
vi /etc/httpd/conf/httpd.conf # 196行目:変更 LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
サービス再起動します。
systemctl restart httpd
これで前と同じようにグローバルIPでWebアクセスすると2台に負荷分散されます。