ネットワーク素人が、さくらクラウドで負荷分散構築した時のメモ2【webサーバー編】
前回のネットワーク素人が、さくらクラウドで負荷分散構築した時のメモ1【準備編】 - なりせなるてずから引き続きです。
前回までの構成で以下のようになりました。
今回はwebサーバー2台と、負荷分散のためのロードバランサ1台を構築します。
ロードバランサの追加
まずはロードバランサを追加します。
上部メニューの「アプライアンス」をクリックし追加ボタンをクリックします。
接続先スイッチを前回作ったルーターにします。
IPアドレスやゲートウェイ、名前などを適当につけて作成ボタンをクリックします。
作成されたら再びアプライアンスをクリックすると作成されたロードバランサが確認出来ます。
作成したロードバランサをダブルクリックしてVIPの設定していきます。
VIPとは?
ここでちょっと脱線しますが、僕がかなり勘違いして躓いたのでVIPについて軽く説明します。
VIPとはネラーのことではなく、Virtual IP addressの略称らしいです。
僕が元々イメージしてたロードバランサの処理フローは
こんな感じだったのですが、実際構築したのは
こういうモノだったのです。
後から知ったのですが、こういう構成をDSR(ダイレクトサーバーリターン)構成というらしいです。
知らずに作ったのですが結果的にはこっちのほうが目的にあっていたのでそのまま採用しました。
で、このDSR構成というものを作るのには必ずVIPが必要になるんです。
詳しくはロードバランサとVIPによるアクセス分散 - Yahoo! JAPAN Tech Blogとかが勉強になると思います。
VIPの設定
VIPの設定を行っていきます
「VIP設定」タブをクリックします。
初期では何も設定されていませんので、まず追加ボタンを押します。
「VIPアドレス」にはVIPとして使うアドレスを指定します。
「ポート番号」は今回はwebサーバーの監視なので80にします。
「チェック間隔」は10秒で問題無いと思います。
作成すると一覧に現れますが、ロードバランサの設定は上の反映ボタンを押さない限り反映されてないようなので、よければ反映ボタンを押します。
反映すると「今作ったIPアドレス:ポート番号」でタブが追加されてます。
ここに実際に負荷分散するサーバー郡のアドレスを登録します。
ですが、まだwebサーバーを用意してないのでとりあえず一端置いておきます。
webサーバーのループバックアドレスを設定
ループバックアドレスとは自分自身を示す仮想的なIPをアドレスのことです。
このループバックアドレスに先ほど設定したVIPを設定します。
webサーバーにさくらのコントロールパネル上、もしくはSSHでログインし、以下を入力します
# vi /etc/sysconfig/network-scripts/ifcfg-lo:0
vimでもemacsなんでもいいのでスーパーユーザで開き、以下を入力します。
DEVICE=lo:0 IPADDR=先ほど設定したVIPを入力 NETMASK=255.255.255.255
設定を反映します
# ifup lo:0
何をやってるのかさっぱりわからねぇ・・・
ここの設定は新機能「ロードバランサ」について | さくらのクラウドニュースを参考にしてやったのですが、やってる当時は何やってるのか分からないポルナレフ状態のままやってました。
/etc/sysconfig/network-scripts/ifcfg-lo:0のファイルがループバックアドレスを設定するファイルのようです。
そこに、先ほど設定したVIPを入力し、 ifupコマンドで反映するという流れです。
やってる当時は、と言ったな?アレは嘘だ。今もよくわかってないです。
ARPリクエストを弾く
ARPリクエストとはIPをアドレスからMACアドレスを取得するリクエストらしいです。
なんでこれを設定しないといけないのか正直良くわからないですが、僕はこんな認識でいます。
インターネット側から見れば同じIPにアクセスしてるのに、なんでMACアドレスがリクエストのたびに違うんだよ!F○ck you!
多分こんな感じかと(テキトー)
では実際に設定します。
sysctl.confを開きます
# vi /etc/sysctl.conf
ARPを弾く設定を書き込みます
net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
設定が終わったら以下のコマンドで反映します
# sysctl -p
スイッチの追加
今回の構成ではwebサーバはインターネットに直接つなぎ、DBサーバはスイッチを経由しローカルネットワークです。
そのためにスイッチを作成します。
上部メニューのネットワークをクリックし、前回の用に作成します。
前回と違う部分はルーター機能は無くていいので、「ルーター」はいいえのまま作成します。
NICの追加
サーバーにはデフォルトで1つしかNICがないので、ローカルネットワークに接続するためにNICを追加する必要があります。
対象のサーバーをダブルクリックし、NICタブをクリックします。
追加ボタンをクリック追加します。
分かりづらいですが、追加されたNICの右端に出る下矢印アイコンをクリックし、「接続を編集」を選びます。
「NIC」をスイッチに接続にします
「スイッチに接続」で今作ったスイッチを選択します。
ここまででクラウドっぽい設定は終わりです。
Apache,PHP,MariaDBクライアントのインストール
大量のサクセス捌くにはNginx使うほうがいいらしいって聞いたんですが、何回試しても「Bad Gateway」しか出ないのでNginxは嫌いです。
Apacheのインストール
$ sudo yum install httpd
PHPのインストール
sudo yum install php php-mbstring php-mysql
MariaDBのクライアントをインストール
MariaDBについてはまだ日本語の資料が少なく苦戦しましたが、インストールだけなら簡単です。
まずはリポジトリを追加します
sudo vim /etc/yum.repos.d/MariaDB.repo
https://downloads.mariadb.org/mariadb/repositories/#mirror=yamagata-university
上のリンクで、リポジトリをジェネレートしてくれますのでそれを書き込みます
僕の場合はこのようになりました
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
保存したら以下のコマンドでMariaDBのクライアントをインストールします
sudo yum install MariaDB-client
ここまででアプリケーションの設定は終わりです。
webサーバをコピーする
上記の設定を2台分やるのは面倒です。
でもコピーしちゃえばすぐに出来ちゃう。そう、クラウドならね。
ということでクラウドの恩恵を受けるためにサーバーをコピーします。
前回同様、サーバの追加から、ディスクソースを「ディスク」にし、
今設定したサーバーのディスクを選択し、作成します。