はじめに
LVSでロードバランスをさせる方法を勉強する必要があって勉強してたのですが、勉強したからにはお試ししないとねってことで、AWSの無料枠使って最小構成ってぽい構成で構築してみました。
ELB使えって話もあるかもしれませんが、勉強だからねしょうがないね。
今回の構成
最小構成ってことでLB1台にアプリケーションサーバー2台の構成です。
インスタンス
今回は全てEC2で作成します。
OSはなんとなくRHELです。
$ less /etc/redhat-release
Red Hat Enterprise Linux Server release 7.4 (Maipo)
3台とも全て同じ設定にしてます。
LVSで振り分けるまでの手順
作成したインスタンス3台にそれぞれ役割を付けてあげてください。
Hostから役割が分かりにくいですが、名前とか付けれるので付けてあげると少し管理しやすいです。
それぞれの役割で行うことを以下に記載していきます。
といってもアプリケーションサーバーはやる事ほとんどないのですが。
LBサーバーの手順
LVSのインストール
$ sudo yum install -y ipvsadm
yumからインストールすると古いこともありますが、今回はお試しなので気にしません。
注意として今回はKeepAlivedは使用しません。
お試しなので消えてもいいやっていうのと単純に面倒くさがっただけです。
LBサーバーからIPV4の転送を許可して設定を反映
$ sudo vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 (追加)
$ sudo sysctl -p
net.ipv4.ip_forward = 1
LVSを有効化
$ sudo systemctl start ipvsadm
$ sudo systemctl enable ipvsadm
Created symlink from /etc/systemd/system/multi-
user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.
IPテーブルの確認
$ sudo ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
最初なので何も登録されていないはずです。
何か登録されていてリセットしたい場合はsudo ipvsadm -C
でリセットしてあげてください。
IPテーブルへの追加
$ sudo ipvsadm -A -t <LB IP>:80
$ sudo ipvsadm -a -t <LB IP>:80 -r <APP1 IP>:80 -m
$ sudo ipvsadm -a -t <LB IP>:80 -r <APP2 IP>:80 -m
IPの部分には各サーバーのプライベートIPを記載してください。
プライベートIPはEC2ダッシュボードを見るか各サーバーでifconfig
したら分かります。
振り分けについては特に設定しなければラウンドロビンでやってくれるようです。
アプリケーションサーバーの手順
アプリケーションのインストール
$ sudo yum install httpd
$ sudo service httpd start
何か待ち受けてないといけないのでhttpd
入れて待ち受けて貰います。
今回は振り分けが確認できれば良いので、アプリケーションとかいいながら何も中身は入れてません。
振り分け確認
LBサーバーでcurl http://127.0.0.1
をしてアプリケーションサーバーのアクセスログが交互に出力されてくれれば無事成功です。
最後に
今回の手順の場合はLBサーバーが外部からの待ち受けをしていないので外からのアクセスは出来ず、LBサーバースタートでの確認しか出来ません。
外部からの待ち受けについては特に記述が見つからなかったので、普通に待ち受けてあげればよさそうですが、設定を色々と追加しないとダメっぽい感じがします。
良くわかってないので、また勉強してきます。
あと、セキュリティグループきちんとしてないとアプリケーション側を直接見に行けてしまうので、portの設定ぐらいはやってあげた方が良いです。
不満
-lオプションで接続先一覧が見れるのですが、AWSの場合Hostが長すぎてPortが全く見えないのが困りものです。