さくらのクラウドでロードバランサー(L4)とWebサーバを構築する (original) (raw)

ロードバランサー(L4)のおさらい

manual.sakura.ad.jp

ロードバランサー(L4)の性能のおさらい

ここで言っている冗長化ロードバランサー自体の話です。ロードバランサーを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
過去記事との差異の個所は以下のところです。



サーバ作成し、サーバが出来上がったら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だとステータスは出るんですね。
その他、ヘルスチェックはhttpspingがあります。
httpsは今回証明書が面倒だったからWebサーバとして構築していないので、pingで試してみることに。

ロードバランサの実サーバの右側にあるえんぴつボタンをクリックし監視方法をhttp→pingに変更。
変更した直後からステータスはUPになっています。
あれ、http/https以外でpingでもステータスはちゃんと出るのかと。
なんとなくですが、http/httpsはステータスが表示されて、ping/tcpは出ないのかと思いました。

ここでtcpに戻すとどうなるのか。
ロードバランサの実サーバの右側にあるえんぴつボタンをクリックし監視方法をpingtcpに変更。

あれ、ステータスが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

見た感じは新たに作成した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サーバが出来たので、次は何にしようかな…。