こんにちは。さくらインターネットの大喜多です。

今回はさくらのVPSを使って複数のWebサーバを構築し、ロードバランサを使ってWebサーバへのアクセスを分散させる方法についてご説明したいと思います。

はじめに

さくらのVPSは、専用サーバの自由度とクラウドの拡張性を合わせもつ、月額585円(税抜かつ記事執筆時点の価格)から使える仮想専用サーバサービスです。この記事ではさくらのVPSを使って複数台のWebサーバを構築して、同じさくらインターネットが提供するさくらのクラウドの中の一機能であるエンハンスドロードバランサを使って負荷分散をする手順についてご紹介します。

エンハンスドロードバランサとは

HTTPおよびHTTPSに特化したプロキシ型のロードバランサです(TCPでのロードバランシングも可能ですが、Let’s Encrypt証明書設定やレスポンスヘッダ設定などのL7関連機能はご利用いただけません)。

特徴的な機能としては、SSL証明書を設定することでロードバランサ側でSSL/TLSの処理をおこない、WebサイトをHTTPS対応することができます。無料SSL証明書のLet’s Encryptにも対応しており、証明書の更新作業を自動でおこなうことができます。そのほかにも、仮想IPアドレス(VIP)を監視し、DoS攻撃などにより応答しなくなった場合に自動的にVIPアドレスを変更する VIPフェイルオーバ機能や、クライアントと通信する実サーバを固定化するセッション維持機能などを備えた高機能なロードバランサとなっています。

エンハンスドロードバランサの実装に関する技術的なことについては、さくらインターネットの大久保が以下の記事を書いておりますので、興味のある方はご覧になってください。

さくらのクラウド「エンハンスドLB」を作った話(前編)

さくらのクラウド「エンハンスドLB」を作った話(後編)

準備

さくらのVPS > お申し込みの画面から使用するVPSを契約します。すでにさくらのVPSを契約済みで、そちらのVPSを使用する場合はこの手順は飛ばして構いません。

またすでにさくらのVPSをご利用の場合でも、さくらのクラウドは使っていない場合、さくらのクラウドに新規登録する必要があります。新規登録手順を書いた記事がありますので、こちらを参照して登録してみてください。

Webサーバの構築

ロードバランスさせる対象のWebサーバを構築します。さくらのVPS コントロールパネルにログインします。

ここでは赤枠で囲った「Webサーバ1」「Webサーバ2」というVPSを設定していきます。本記事では、OSは標準OSの中からCentOS7を選択して使用します。

「Webサーバ1」の行をクリックし、詳細画面を表示させます。「ネットワーク情報」のタブをクリックし、IPv4 -> アドレスの右側にあるボタンをクリックします。クリップボードにVPSのIPアドレスがコピーされた状態になりますので、メモ帳(notepad.exe)などにIPアドレスを控えておきます。

「Webサーバ2」でも同様の手順をおこない、IPアドレスを控えておきます。

また、さくらのVPSではセキュリティ強化のために標準でパケットフィルタが有効になっています。初期設定ではSSH(TCP22)のみが許可されています。Webサーバとして使用するのでWebの通信も許可する必要があります。「パケットフィルタ設定へ」をクリックします。

パケットフィルタの設定画面でWebにチェックを入れ、[設定]ボタンをクリックします。Webサーバとして使用するすべてのVPSでこの手順をおこなっておく必要があります。

Webサーバとして使用するVPSにSSHでログインし、Webサーバとしての設定をおこなっていきます。本記事ではApacheをインストールし、Webサーバごとにindex.htmlの内容を書き換えることで、ロードバランスされているかを確認できるようにします。

# yum -y install httpd
# systemctl start httpd
# systemctl enable httpd
# echo hostname > /var/www/html/index.html

この作業をWebサーバとして使用するVPSすべてで実施します。

エンハンスドロードバランサの作成

続いて、さくらのクラウドでエンハンスドロードバランサを作成し設定していきます。

さくらのクラウド コントロールパネルにログインします。

ホーム画面で[さくらのクラウド(IaaS)]をクリックします。

左メニューの[グローバル]をクリックし、さらに表示される[エンハンスドLB]をクリックします。エンハンスドロードバランサの一覧画面になったら、右上の[追加]をクリックします。

本記事では設定項目はデフォルトのまま進めていきます。「VIPフェイルオーバ」や「セッション維持」も今回は使用しませんが、興味のある方は試してみてください。

「名前」のところに、作成するエンハンスドロードバランサの名前を入力します。本記事では「web」として進めていきます。入力したら右下の[作成]をクリックします。

「操作確認」画面で[作成]をクリックします。

画像のようになったら[閉じる]をクリックします。

左メニューの[エンハンスドLB]をクリックすると、作成したエンハンスドロードバランサが表示されると思います(赤枠部分)。

DNSの設定

今回はLet’s Encryptを使ってWebサイトのSSL/TLS化もエンハンスドロードバランサでおこなうようにしたいと思います。そのためにはDNSで名前解決できるホスト名をつける必要があります。「エンハンスドLB一覧」の「VIP/FQDN」のところにはIPアドレスが表示されています。これに対応するホスト名をつけていきます。
お手持ちのドメインがどのDNSサーバでホストされているかによって設定手順は変わってきますが、さくらのクラウドのDNSサーバ機能を使うと以下のような設定になります。

ホストしているドメインはs.sacloud.jpで、ホスト名はwebとします。FQDNとしてはweb.s.sacloud.jpとなります。IPアドレスには先ほどエンハンスドロードバランサの画面で確認したVIPを入力します。

エンハンスドロードバランサの設定が完了すると、https://web.s.sacloud.jp/にアクセスした際に、ロードバランス対象のWebサーバのindex.htmlが表示されるようになります。

エンハンスドロードバランサの設定

それでは先ほどのエンハンスドロードバランサの一覧画面に戻ります。赤枠部分をダブルクリックします。

「実サーバ」タブをクリックし、[追加]をクリックします。

IPアドレスは、先ほどメモ帳(notepad.exe)などに控えたVPSのIPアドレスを入力します。

「操作確認」画面で[はい]をクリックします。

実サーバ追加の手順を、用意したWebサーバの台数分実行します。本記事ではWebサーバを2台用意しましたので、手順を2回実行し、実サーバ一覧には2つ表示されています。右上の[反映]をクリックします。

続いて待受ポートを設定していきます。待受ポートとは、エンハンスドロードバランサがクライアントからのリクエストを受け付けるTCPポートのことです。httpであればTCP80番ポート、httpsではTCP443番ポートを使用します。今回はTCP80番ポートにアクセスがあってもTCP443番ポートにリダイレクトする(必ずhttpsの通信になる)常時SSL化の設定にしたいと思います。右下の[追加]をクリックします。

まずhttpから追加していきます。「プロキシ方式」ではhttpを選択し、「httpsへのリダイレクト」では有効を選択します。待受ポート番号は最初から80と入力されているのでそのままにしておき、右下の[追加]をクリックします。

続いてhttpsを追加します。「プロキシ方式」ではhttpsを選択し、「HTTP/2のサポート」では有効を選択します。待受ポート番号は最初から443と入力されているのでそのままにしておき、右下の[追加]をクリックします。

以下の画像のように待受ポートにhttpとhttpsが追加できたら、右上の[反映]をクリックします。

続いてエンハンスドロードバランサでHTTPSを有効化するために、[SSL証明書の設定]をクリックし、設定していきます。SSL証明書は前述の通り、無料SSL証明書のLet’s Encryptを使用します。

[Let’s Encryptの設定]をクリックします。

「SSL証明書の自動更新」では有効を選択します。「SSL証明書のCommon Name」には、VIPに設定したFQDNを入力します。この記事の例ではs.sacloud.jpというドメインを使用し、ホスト名はwebとしましたので、入力するFQDNはweb.s.sacloud.jpとなります。

右上の[反映]をクリックします。

設定したFQDNをURLの形式にして(ここではhttps://web.s.sacloud.jp/)Webブラウザでアクセスすると、以下のようにWebサーバのindex.htmlの内容が表示されます。

本記事を執筆するにあたり何度か手順を実施して確認しましたが、まれにうまくアクセスできない場合がありました。このような場合は[Let’s Encryptの証明書更新]を実行するとうまくアクセスできるようになりましたので、うまくいかないという方は試してみてください。

まとめ

さくらインターネットのサービスはそれぞれに特徴があり、組み合わせて使うことでより便利になることが感じていただけたかと思います。今後もサービスの改善やチュートリアルの提供によって皆様に便利に使っていただけるよう努力してまいりますので、よろしくお願いいたします。