という話

技術ブログにしたい

ネットワーク素人が、さくらクラウドで負荷分散構築した時のメモ2【webサーバー編】

前回のネットワーク素人が、さくらクラウドで負荷分散構築した時のメモ1【準備編】 - なりせなるてずから引き続きです。

前回までの構成で以下のようになりました。
f:id:ichiy:20140425131521p:plain

今回はwebサーバー2台と、負荷分散のためのロードバランサ1台を構築します。

ロードバランサの追加

まずはロードバランサを追加します。
上部メニューの「アプライアンス」をクリックし追加ボタンをクリックします。
f:id:ichiy:20140430104144p:plain

接続先スイッチを前回作ったルーターにします。
IPアドレスゲートウェイ、名前などを適当につけて作成ボタンをクリックします。

作成されたら再びアプライアンスをクリックすると作成されたロードバランサが確認出来ます。
作成したロードバランサをダブルクリックしてVIPの設定していきます。


VIPとは?

ここでちょっと脱線しますが、僕がかなり勘違いして躓いたのでVIPについて軽く説明します。
VIPとはネラーのことではなく、Virtual IP addressの略称らしいです。

僕が元々イメージしてたロードバランサの処理フローは
f:id:ichiy:20140430110718p:plain
こんな感じだったのですが、実際構築したのは
f:id:ichiy:20140430110733p:plain
こういうモノだったのです。

後から知ったのですが、こういう構成をDSR(ダイレクトサーバーリターン)構成というらしいです。
知らずに作ったのですが結果的にはこっちのほうが目的にあっていたのでそのまま採用しました。

で、このDSR構成というものを作るのには必ずVIPが必要になるんです。
詳しくはロードバランサとVIPによるアクセス分散 - Yahoo! JAPAN Tech Blogとかが勉強になると思います。


VIPの設定

VIPの設定を行っていきます
「VIP設定」タブをクリックします。
初期では何も設定されていませんので、まず追加ボタンを押します。
f:id:ichiy:20140430111552p:plain

「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の右端に出る下矢印アイコンをクリックし、「接続を編集」を選びます。
f:id:ichiy:20140430132036p:plain

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台分やるのは面倒です。
でもコピーしちゃえばすぐに出来ちゃう。そう、クラウドならね。

ということでクラウドの恩恵を受けるためにサーバーをコピーします。
前回同様、サーバの追加から、ディスクソースを「ディスク」にし、
今設定したサーバーのディスクを選択し、作成します。

再びVIPの設定

中断してたVIPの設定に戻ります。
先ほど作った「今作ったIPアドレス:ポート番号」のタブをクリックします。
ここで実際に負荷分散を行うサーバの登録を行います

f:id:ichiy:20140430130448p:plain
IPアドレス」は今作ったサーバーまたはコピーしたサーバーのIPアドレスを入力します。
「ポート番号」は80
「監視方法」はwebサーバーの関しなのでhttpにします
「パス」は実際動かした時のトップページとかでいいと思います。今回はindex.phpです
「レスポンスコード」は200でいいでしょう

これを今作ったサーバーと、コピーしたサーバーの2回分行います。

NICの追加2回目

コピーしてもディスクの中身だけで、NICとかはコピーされないので、上の「NICの追加」で設定したことを、コピーしたサーバーにも行います。