ローカルネットワークを使って複数台構成を作ってみよう
投稿日:2015/01/21 10:56
こんにちは、ひろのぶ(@hironobu_s)です。
今回はConoHaのローカルネットワークを使って、フロントサーバ1台とバックエンドサーバ1台という構成を作ってみます。今や広く使われている構成でもあり、典型的なのはフロントにWebサーバ、バックエンドにDBサーバという構成です。ConoHaはリリースされた当初から、この構成がVPSで構築できることを特徴の一つとしてお話ししてきました。
私もイベントやセミナーでは、ConoHaのローカルネットワークは大きな特徴としてご紹介しています。ただ、実は技術ブログで構築方法や設定方法などを詳しくご紹介したことがありません。そんなご指摘をいただいたこともありまして(笑)、改めてではありますがこのテーマを取り上げたいと思います。
構成
今回構築するシステムは下記の図のようなものです。一応WebサーバとDBサーバという想定ですが、ネットワークの設定を中心に紹介するので、WebサーバとDBサーバの設定は解説を省略します。
この構成の特徴は、データを格納するDBサーバをインターネット側から切り離すことで、外部からDBサーバへの直接アクセスを防ぎセキュリティを高めることができることです。また、WebサーバとDBサーバを別のサーバで動かすのは、運用上のメリットもあります。
例えばWebサイトを運用してしばらくすると、トラフィックが増えてその負荷対応をする必要が出てくるということがよくあります。その際に、WebサーバとDBサーバが分かれていると、それぞれに適切な対応をとりやすいのです。
スケールアウトとスケールアップ
サーバの性能を向上させるときに、スケールアウトとスケールアップと言う考え方があります。
| 用語 | 意味 |
|---|---|
| スケールアップ | サーバの性能(CPU、メモリなど)を強化することで、より高い負荷に対応できるようにする手法 |
| スケールアウト | サーバの数を増やすことで、より高い負荷に対応できるようにする手法 |
一般的な話をすると、Webサーバはスケールアウトで対応することが多く、DBサーバはスケールアウトしづらいためスケールアップで対応するケースが多いです。DBサーバ(特にRDBMSの場合)は、強力な排他制御やトランザクション処理を保証する必要があるため、スケールアウトのようなサーバを分散するアプローチが取りにくいためです。
このように、WebサーバとDBサーバでは負荷対応をするときのアプローチが変わってきます。これはそのまま、WebサーバとDBサーバを分けて構築する理由になります。
構築してみよう
では構築してみましょう。
VPSの追加
まずConoHaコントロールパネルからVPSを2台追加します。
追加すると以下のようになります。VPSのステータスが「稼働中」になっていますが、ローカルネットワークを割り当てるためVPSを一度停止します。VPS左側のチェックを入れ「シャットダウン」をクリックしてください。
以下のようにVPSのステータスが「停止」になります。
ローカルネットワークの作成
NOTE: 既にローカルネットワークをご利用中のお客様は、このステップを飛ばしてください。
次にローカルネットワークを追加します。メニューから「サービス」→「ローカルネットワークを選択します」。
「ローカルネットワークの追加」を選択します。
セグメントはどれを選んでも構築できますが、今回は「192.168.0.0/24」を選択します。
ローカルネットワークが作成されました。しばらくすると設定が完了します。
ローカルネットワークを割り当てる
次にVPSにローカルネットワークを割り当てます。
ConoHaではVPSを起動すると、デフォルトでグローバル側(インターネット側)のネットワークは自動的に割り当てられますが、ローカルネットワーク側はユーザが選択して個別に設定する必要があります。
割り当てるローカルネットワークを選択する画面になります。一つしかありませんので、そのまま「確認」->「決定」と進めてください。
ローカルネットワークが「設定済」になりました。これを両方のVPSで行います。
VPSを起動する
これでコントロールパネルから行う設定はすべて完了です。VPSを起動しましょう。
サーバの設定
さぁ、いよいよサーバの設定に移ります。
最初に書いたとおり、今回はネットワークの設定に絞ってご紹介します。WebサーバやDBサーバをインストールする方法は割愛します。
NOTE: ネットワークの設定を誤ると、VPSへのSSH接続ができなくなることがあります。その場合はConoHaのコントロールパネルにあるコンソールを使えば接続ができます。慌てず設定を確認して復旧してください
VPSにログインする
まずSSHで2台のサーバにログインしましょう。以下のガイドを参考にしてください。
ネットワークインターフェイスが追加されていることを確認します。
先ほどコントロールパネルからローカルネットワークの設定をしましたが、ちゃんとVPSに反映されているかを確認します。
以下のコマンドを実行してみましょう。
|
1 |
ip link |
以下のようにeth1が表示されればOKです。
|
1 2 |
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether fa:16:3e:3c:e0:c1 brd ff:ff:ff:ff:ff:ff |
eth1にネットワークの設定を行う
ネットワークインターフェイスは認識されていますが、IPアドレスが設定されていないので、このままではIP通信ができません。設定を変更してIPアドレスを割り当てましょう。
ConoHaのローカルネットワークで使用できるIPアドレスレンジは、以下のドキュメントにあります。xxx.xxx.xxx.11からxxx.xxx.xxx.254までが利用できます。1〜10は管理用に予約されていて、使用できませんので注意してください。
今回はVPSが2台なので、特にこだわりが無ければ192.168.0.11と192.168.0.12を使えば良いでしょう。
ConoHaの標準OSはCentOSなので、設定ファイルは/etc/sysconfig/network-scripts/の配下にあります。ifcfg-eth0をifcfg-eth1にコピーして、内容を編集します。(ここではエディタとしてvimを使っていますが、もちろん他のエディタでも問題ありません)
|
1 2 3 4 5 6 7 8 |
# ディレクトリ移動 cd /etc/sysconfig/network-scripts # ファイルをコピー cp ifcfg-eth0 ifcfg-eth1 # 編集開始 vim ifcfg-eth1 |
以下のようにします。IPアドレスはサーバ毎に別々の値を入れます。
|
1 2 3 4 5 6 |
DEVICE="eth1" BOOTPROTO="none" ONBOOT="yes" TYPE="Ethernet" IPADDR="[IPアドレス]" NETMASK="255.255.255.0" |
設定ファイルを記述したらネットワークをリスタートします。
|
1 |
service network restart |
これでIPアドレスが割り当てられたので、確認してみましょう。ipコマンドに引数addrをつけると、インターフェイス毎にIPアドレスなどが表示されます。
|
1 |
ip addr |
以下のようにinetのところにIPアドレスが表示されていればOKです。
|
1 2 3 4 5 |
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether fa:16:3e:3b:f6:31 brd ff:ff:ff:ff:ff:ff inet 192.168.0.12/24 brd 192.168.0.255 scope global eth1 inet6 fe80::f816:3eff:fe3b:f631/64 scope link tentative dadfailed valid_lft forever preferred_lft forever |
ローカルネットワークの疎通確認をする
ネットワークの設定はできました。ちゃんと通信できるでしょうか? おなじみのpingで確認してみましょう。
|
1 |
ping [IPアドレス] |
なお、自分自身へのpingと相手サーバへのping、両方を確認しましょう。以下のようにpingが通れば設定完了です。
|
1 2 3 4 5 6 7 8 9 10 11 |
[root@vps]# ping -c 5 192.168.0.11 PING 192.168.0.11 (192.168.0.11) 56(84) bytes of data. 64 bytes from 192.168.0.11: icmp_seq=1 ttl=64 time=0.027 ms 64 bytes from 192.168.0.11: icmp_seq=2 ttl=64 time=0.047 ms 64 bytes from 192.168.0.11: icmp_seq=3 ttl=64 time=0.064 ms 64 bytes from 192.168.0.11: icmp_seq=4 ttl=64 time=0.050 ms 64 bytes from 192.168.0.11: icmp_seq=5 ttl=64 time=0.045 ms --- 192.168.0.11 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 3999ms rtt min/avg/max/mdev = 0.027/0.046/0.064/0.014 ms |
バックエンド側のサーバにSSH接続する
これでローカルネットワークで2台のVPSが接続されました。次のステップとして、バックエンドサーバとして使うVPSの、グローバル側(インターネット側)のネットワークインターフェイスを切断します。
しかし、こうすることで一つ問題が出てきます。バックエンドとして使うサーバに、インターネット側からSSHでログインできなくなってしまいます。なので、バックエンドサーバにSSH接続するには、まずフロントエンドサーバにSSHでログインして、そこからさらにバックエンドサーバにSSH接続を行うようにします。
バックエンドサーバにSSH接続する際は、プライベートIPアドレスを指定することに注意してください。
SSHの設定で回避する
このままでも問題は無いのですが、バックエンドサーバへの接続に2回もsshコマンドを叩くのはやや面倒です。OpenSSHを使用する場合は、~/.ssh/configファイルに以下のように記述すると、一度でバックエンドサーバに接続ができます。
|
1 2 3 4 5 6 7 |
Host [フロントエンドサーバのグローバルIPアドレス] IdentityFile ~/.ssh/conoha.key Host [バックエンドサーバのグローバルIPアドレス] Hostname [バックエンドサーバのプライベートIPアドレス] IdentityFile ~/.ssh/conoha.key ProxyCommand ssh -W %h:%p [フロントエンドサーバのグローバルIPアドレス] |
(秘密鍵ファイルが~/.ssh/conoha.keyにあるものとしています)
ProxyCommandと言うディレクティブが出てきました。これはProxy先のサーバ(今回の場合はバックエンドサーバ)に接続するために使用されるコマンドを指定します。%hと%pは接続先ホストの情報に置換され、今回の場合はバックエンドサーバのプライベートIPアドレスに置換されます。詳しくはマニュアルをご確認ください。
この設定を行うことで、バックエンドサーバに対し、フロントエンドサーバ経由のローカルネットワーク接続でSSH接続ができます(文章にするとややこしいですが・・・)。
以下のコマンドを実行してみてください。
|
1 |
ssh [バックエンドサーバのグローバルIPアドレス] |
無事にログインできたらlastコマンドを実行してみてください。
|
1 2 |
[root@vps]# last root pts/1 192.168.0.11 Mon Jan 19 18:05 - 18:08 (00:02) |
接続元IPアドレスが、ローカルネットワークになっていることが確認できます。
バックエンドサーバのグローバル側ネットワークを切断する
ローカルネットワーク経由でバックエンドサーバに接続ができました。最後にバックエンドサーバのグローバル側ネットワークを切り離します。設定ファイルは/etc/sysconfig/network-scriptsのifcfg-eth0です。
|
1 2 3 4 5 |
# ディレクトリ移動 cd /etc/sysconfig/network-scripts # 編集開始 vim ifcfg-eth0 |
ファイルの内容を以下のようにします。といっても、変更部分はONBOOT=”yes”となっている部分を”no”に変更するだけです。
|
1 2 3 4 5 6 7 8 |
DEVICE="eth0" BOOTPROTO="dhcp" DHCPV6C="yes" IPV6INIT="yes" IPV6_AUTOCONF="yes" NM_CONTROLLED="yes" ONBOOT="no" TYPE="Ethernet" |
設定ファイルを記述したらネットワークをリスタートします。
|
1 |
service network restart |
これでグローバル側のネットワークインターフェイスが無効になりました。ipコマンドで確認してみましょう。
|
1 |
ip addr |
以下のようにeth0が無効になっていて、IPアドレスも割り当てられていません。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@vps]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether fa:16:3e:3c:e0:b0 brd ff:ff:ff:ff:ff:ff 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether fa:16:3e:3c:e0:b1 brd ff:ff:ff:ff:ff:ff inet 192.168.0.12/24 brd 192.168.0.255 scope global eth1 inet6 fe80::f816:3eff:fe3c:e0b1/64 scope link tentative dadfailed valid_lft forever preferred_lft forever |
おわりに
ローカルネットワークはConoHaの大きな特徴の一つで、オンプレミスのような環境をVPSでも構築することができます。ネットワーク帯域も(ベストエフォートではありますが)1Gbpsなので、高速な通信が可能です。
また、あまり知られていませんが、ローカルネットワークは2セグメントまで作成することができます。ConoHaで複数のシステムを運用する場合に、別々のローカルネットワークを組むことができます。
なんと言っても無料でお使いいただけます:) まだ試したことがない方は是非使ってみてください。
1,500円分の無料クーポン付いてくる ConoHa のご入会はこちらから
アカウント登録(無料)
ConoHa byGMO