さくらのクラウドでロードバランサー(L4)とWebサーバを構築する (original) (raw)
ロードバランサー(L4)のおさらい
ロードバランサー(L4)の性能のおさらい
- 構成: DSR(Direct Server Return)方式
- 性能: 「標準プラン」と「ハイスペックプラン」
- 冗長化: 「シングル構成」と「冗長構成」
ここで言っている冗長化はロードバランサー自体の話です。ロードバランサーを1台にするか、複数台にするかになります。
DSR(Direct Server Return)方式とは
さくらのクラウドのロードバランサー(L4)はDSR(Direct Server Return)方式です。
簡単に話すと、サーバまでの到達とサーバからの戻りで通信経路が異なることです。
戻りの通信がWebサーバからクライアントとなるので、Internetから通信を受ける場合はInternetとの疎通性が必要となり、PublicのIPを付与する必要があります。
※Internal(ローカル)の通信であればPublicのIPは不要です。
構成を考える
ということで、今回の構成は以下の通りとします。
スイッチ(ルータ):1台 ※ロードバランサにPublicのIPを付与するため、ルータの機能をonにします
ロードバランサ:1台
Webサーバ:1台
構築する
ということで、考えた構成の通り作成していきます。
スイッチ作成
上から(Internetに近いほうから)作っていこうと思います。
まずはスイッチから。
さくらのクラウドで左側のツリーから、ネットワーク→スイッチ→追加をクリック
以下の設定を入れていきます。
プリフィックスは/28にしました。台数は構成を考えるで記載した通り4台、この4台にPublicIPが付与される想定です。
名前:Webテストスイッチ
ルータ:はい
プリフィックス:/28
作成ボタンをおして作成完了。
出来上がりは以下です。
スイッチが出来たので、次はロードバランサを作成します。
ロードバランサ作成
さくらのクラウドで左側ツリーから、アプライアンス→ロードバランサ→追加をクリック
以下の設定を入れていきます。
IPアドレス、ネットマスク、ゲートウェイは自動的に先ほど作成したスイッチに割り当てられたIPが入っています。
接続先スイッチ:Webテストスイッチ ※先ほど作成したスイッチ名をリストから選択
名前:Webテストロードバランサ
作成ボタンをおして作成完了。
出来上がりは以下です。
ロードバランサが出来たので、次はWebサーバを作成します。
Webサーバ作成
Webサーバの作成は、過去に記事にしている以下を参考に作成します。
gokigenmaru.hatenablog.com
過去記事との差異の個所は以下のところです。
- NIC:スイッチに接続にし、接続するスイッチを先ほど作成した「Webテストスイッチ」にする
- ディスクの修正:IPアドレスをリストから選択、ネットマスクとゲートウェイは自動で入った値を使う ※ロードバランサで割り当てたIP以外を選ぶ
サーバ作成し、サーバが出来上がったらapacheインストールを実施。
インストール後、ロードバランサの配下に配置するようsysctl.confとループバックの設定を実施。
今回はubuntuを使っているので以下の通り設定
vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
vi /etc/netplan/01-netcfg.yaml
lo: match: name: lo addresses: - xx.xx.xx.xx/32
netplan apply
※xx.xx.xx.xxはロードバランサに設定する予定のVIPアドレスを記載
作成した後、いったんここで接続確認します。
http://xx.xx.xx.xx/index.html
※xx.xx.xx.xxは「Webサーバ」のPublicIPです。
自分の端末からブラウザ等を利用してWebアクセスします。
自分はWSL2からcurlでつないでみました。問題なく接続できています。
ロードバランサの配下にWebサーバを配置する
作成したWebサーバをロードバランサの配下に配置します。
作成済みのロードバランサの詳細からVIP設定をクリック
追加を選択
VIPアドレスはスイッチ作成時に割り当てられたPublicIPのうち、まだ使われていないIPを入力、ポート番号は80(http)にします。
今回、Sorryサーバは作成しないのでここは空欄のままにします。
VIP設定をすると「実サーバ」というのが画面上部に出てきます。この実サーバに先ほど作成したWebサーバの情報を入れていきます。
追加を選択
IPアドレスは先ほど作成したWebサーバのPublicIP、監視方法はtcpにしました。
作成しました。
作成後、実サーバでステータス欄が何かしらOKなりなんなりの値を出すと思って待っていたのですが、5分くらい経過してもステータス変わらず。。。
でもcurlでロードバランサで設定したVIPあてに接続すると接続できました。
念のためサーバ側のアクセスログを見ましたが、きちんと自分の端末からのアクセスが出ています。
tcpだとステータスは表示されないんですかね???
それとも、サーバのループバックにVIPとしてPublicのIPを割り振っているのがいけないのか?
ちょっとこのあたりの仕様が分からず。
ロードバランサのヘルスチェックをtcpから別のものに変更してみる
ステータスが何も表示されないのが分からないので、思いつきでロードバランサのヘルスチェックをtcpからhttpに変更してみます。
ロードバランサの実サーバの右側にあるえんぴつボタンをクリックし監視方法をtcp→httpに変更。パスは/index.htmlでレスポンスコードは200にします。
ヘルスチェックをtcpからhttpに変更し、しばらくするとステータスがUpとして出てきました。
なるほど、ということはhttpだとステータスは出るんですね。
その他、ヘルスチェックはhttpsとpingがあります。
httpsは今回証明書が面倒だったからWebサーバとして構築していないので、pingで試してみることに。
ロードバランサの実サーバの右側にあるえんぴつボタンをクリックし監視方法をhttp→pingに変更。
変更した直後からステータスはUPになっています。
あれ、http/https以外でpingでもステータスはちゃんと出るのかと。
なんとなくですが、http/httpsはステータスが表示されて、ping/tcpは出ないのかと思いました。
ここでtcpに戻すとどうなるのか。
ロードバランサの実サーバの右側にあるえんぴつボタンをクリックし監視方法をping→tcpに変更。
あれ、ステータスがUPだ…。
ちょっとよくわかりませんが、とりあえずUPにはなりました。
Webサーバをもう1台追加する
簡単な構成で疎通が出来たので、ロードバランサにぶら下げるサーバをもう1台作成し、冗長構成にしてみようと思います。
「Webサーバ作成」の章で作成した通りのサーバをもう1台用意します。
作成の方法は先ほどのように1から作るのではなく、クローンで作成してみます。
画面左側のツリーから、サーバ→クローン元サーバにチェック→詳細をクリック
画面右上のクローンを選択
ここから作成をしていきます。
クローンから作成すると、ディスクのディスク選択がクローン元のディスクになっています。
サーバの情報で名前を「Webテストサーバ02」と変更し、作成。
作成後、コンソールから見てみるとNICのところが最初に作成したサーバと異なります。
IPの設定はサーバ構築時に出てきていなかったので、クローンで作成した後IPアドレスは自分で設定しないといけないのかもしれません。
ということで、NICの設定を実施。
画面右側の▽をクリックしIPv4アドレスを編集をクリック
使用されていないIPアドレスを選択します。
153.120.84.22はロードバランサのVIPで使っているので、今回は23を選択します。
設定完了。
念のため強制リブートしておきます。
画面右上の電源操作→強制リブート
ここでクローンから作成したWebサーバに接続テストをしてみると、接続できない…。
$ curl -vvv http://153.120.84.23/index.html
- Trying 153.120.84.23:80...
見た感じは新たに作成したWebサーバに到達性がなさそうに見えます。
ということで、実機のほうを確認してみると、クローンから作成したサーバですが、コンソール上から見えるNICのIPは新たに割り当てた「153.120.84.23」ですが、サーバの中でip aをたたくと「153.120.84.21」となっていることが判明。
IPアドレスの設定は前のサーバの情報をそのまま持ってきてしまうようですね。
よくよく見るとターミナル上に出てるホスト名もクローン元のホスト名のままです。
ということで、ホスト名とIPアドレスを変更します。
hostnamectl set-hostname webtestserver02
uname -n
webtestserver02
vi /etc/netplan/01-netcfg.yaml
※153.120.84.21となっている個所を153.120.84.23に変更
reboot -- -r
改めてcurlで接続確認したところ、無事接続できました。
作成したWebサーバをロードバランサの配下に配置します。
画面左側のツリーからロードバランサ→対象のロードバランサにチェック→詳細をクリック
実サーバをクリック
追加をクリック
先ほどサーバのNICに割り当てたIPアドレスを入力し、監視方法はtcpにします。
今後は1分もしないうちにステータスがUPになりました。なんだろう…。
接続確認、数回連続して接続を行い、2台あるWebサーバにそれぞれアクセスが来ていることを確認。
問題なく接続が来ていました。
よかったよかった。
終わり
簡単なロードバランサの構成は作成できました。ステータスのところは腑に落ちていませんが、疎通もできていますしいったん先に進もうと思います。
ロードバランサ→Webサーバが出来たので、次は何にしようかな…。