アプリの部分ばかりいじって、サーバーの設定や環境構築に関わったことのないウェブエンジニアがいるかもしれない。そんなことでは、ある日突然サーバーの環境構築を任されたら困るだろう。VPSなど安価なサービスでいろいろ経験しておくと、提案の幅が広がる。
ここでは、さくらVPSで2つのサーバーをローカル接続をする方法をまとめた。ローカル接続すると2つのサーバー間のデータ通信が高速となり負荷分散には欠かせない。また、STGと本番、あるいはバックアップ用の冗長構成のような場面でもローカル接続という環境構築は役に立つ。
複数のさくらVPSをローカル接続する手順
- 2台以上のサーバーを同じリージョンで契約する
- さくらVPSのコントロールパネルでサーバーのスイッチ接続をする
- ローカルIPを決める
- 各サーバーでethの設定をする
- pingで疎通確認
- データのやりとりはローカルIPを指定
2台以上のサーバーを同じリージョンで契約する
ローカル接続したい複数のサーバーを契約する際は同じリージョンで契約する必要がある。異なるリージョン同士でも接続は可能だが、それをするにはさくらクラウドの契約が必要で、設定も少し面倒となる。そのためこの記事では同一リージョンで揃えることを前提とする。またサーバーのOSはCentOS7系を前提とする。
まずはさくらVPSのコントロールパネルでスイッチの設定をする
接続したい2台以上のサーバーを用意したら、まずはさくらVPSのコントロールパネルでネットワーク接続をする。これは公式ページに手順があるのでそれを参照されたし。
https://manual.sakura.ad.jp/vps/network/localnetwork.html
サービス設計によるが、例えばDBサーバーをセキュアーにするためにhttpアクセスを禁止する場合は、eth0のネットを切断するといい。http通信ができなくなり、ウェブサーバーからしかアクセスできなくなる。顧客情報などを扱う場合はこういう設定はしたほうがいい。
また、サーバーをシャットダウンする必要があるので、稼働中のサーバーの場合は注意が必要。案件によっては慎重な対応が必要な場合もあるだろう。
スイッチ接続したethの番号を控えておこう。ここではeth1に設定するものとする。
ローカルIPを決める
次に各VPSのローカルのIPを決めましょう。仮に2台なら、192.168.1.1と192.168.1.2としておきましょう。別にこの通りのIPである必要はないのだけれど、IPが重複しないように要注意です。
各サーバーでethの設定をする
次にethに決めたローカルIPをそれぞれのサーバーに設定しよう。コンパネでスイッチ接続したeth1に設定をするのだが、まずは状況を確認する。ifcfg-eth1がない場合は、もちろんその設定がないということ。
DEVICE=”eth1″
ONBOOT=”no”
TYPE=“Ethernet”
ONBOOTをyesにして、ローカルIPとネットマスクを接続する。設定に関してはさくら以下のページを参照されたし。
https://manual.sakura.ad.jp/vps/support/technical/3-dr.html
1つめのサーバーには、ここでは以下のように設定する。ifcfg-eth1がない場合は新規作成する。
DEVICE=”eth1″
ONBOOT=”yes”
TYPE=”Ethernet”
IPADDR=”192.168.1.1″
NETMASK=“255.255.255.0″
当たり前だがサーバー1とサーバー2はIPをわけないといけない。くれぐれも、うっかり同じローカルIPをそれぞれのサーバーに設定するなんてことはしないように。IPが重複して面倒なことになるので。というか、この辺りの知識がない人はサーバーの環境構築なんてするわけないか。。。と信じたい。
ethの設定をしたら、ステータス確認とサービス再起動をする。
#service network restart
pingで疎通確認
2台のVPSを接続した場合、お互いのローカルIPにpingをするといい。以下のようにpingが通ればOK。100パケロスの場合はなにかがうまくいってない。
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.018 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.032 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.029 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.029 ms
64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=0.033 ms
64 bytes from 192.168.1.1: icmp_seq=6 ttl=64 time=0.027 ms
64 bytes from 192.168.1.1: icmp_seq=7 ttl=64 time=0.030 ms
64 bytes from 192.168.1.1: icmp_seq=8 ttl=64 time=0.035 ms
64 bytes from 192.168.1.1: icmp_seq=9 ttl=64 time=0.028 ms
64 bytes from 192.168.1.1: icmp_seq=10 ttl=64 time=0.030 ms
サーバー同士が接続されているかはこのコマンドで確認できる。コンパネだけでなく、サーバーのLAN設定をしていないと、下記のように切断と表示される。
DEVICE TYPE STATE CONNECTION
eth0 ethernet 接続済み System eth0
eth1 ethernet 切断済み —
eth2 ethernet 切断済み —
lo loopback 管理無し —
一方、接続がうまくいっている場合は、eth1の設定後はこんな感じ。
DEVICE TYPE STATE CONNECTION
eth0 ethernet 接続済み System eth0
eth1 ethernet 接続済み System eth1
eth2 ethernet 切断済み —
lo loopback 管理無し —
データのやりとりはローカルIPを指定
ではサーバー1からサーバー2へ、ローカルIPを指定してscpでデータの送信をしてみよう。IPをグローバルにしてhttp通信と比較すれば、http通信よりはるかに速くデータの送受信ができることを容易に確認できるだろう。