ロードバランシングとかクラスタリングとかリバースプロキシとか、
業務でも使っているし、概念とかはわかってるけど、自分で構築したことはやっぱりない。
自分で構築してみたいなーと思いつつもあたりまえだけど、サーバやネットワーク機器をそう簡単に調達もできない。
お金も当然ない。
というわけで、さくらVPSで仮想化つかってロードバランシングとかクラスタリングとかリバースプロキシとか勉強しましょうという「サーバインフラ会」を友人と始めた。その第1回目である。
1. 使用した環境
まず今回利用した環境は以下のとおり。
さくらVPSの1GBのプラン。
・メモリ:1GB
・CPU:仮想2コア
・HDD:100GB
・OS:CentOS7
・仮想化:Vagrant
→dockerなどもはじめ検討していたが、コンテナ型仮想化だとサーバ感がでないので、よりサーバとして意識できるVagrantを採用
2. 完成イメージ・物理イメージ
3. VagrantでWebサーバ2台分を構築する
Vagrantの詳細な利用方法は公式ドキュメントをみてもらうとするが、セットアップまでのひととおりの流れと注意点のみ記載する。
Vagrant Documentation
今回はWebサーバ2台を仮想で実現するので、それぞれweb1, web2とする。
それぞれのディレクトリを作成。
仮想化で利用するOSイメージをダウンロード
$ vagrant box add ubuntu1310 ¥ http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-13.10_chef-provisionerless.box
web1サーバ構築
$ cd web1 $ vagrant init ubuntu1310
ほぼほぼデフォルトの設定だが以下2つだけは設定を行った。
$ vim Vagrantfile
(1)プライベートアドレスの割り当て。
config.vm.network “private_network”, ip: “192.168.33.10”
(2)1GBしかメモリがないのでこの設定をしないと2つ仮想化するとだいぶ大変なことになりました。
config.vm.provider “virtualbox” do |vb| vb.customize [“modifyvm”, :id, “–memory”, “128”] end
$ vagrant ssh
<p>同様にweb2においても同じことを行った。</p>
<p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/vagrant">vagrant</a>では一般的に対象のディレクトリで<a class="keyword" href="http://d.hatena.ne.jp/keyword/vagrant">vagrant</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/ssh">ssh</a>を利用してサーバに入るが、<br>
今回はプライベートアドレスも振ってあるし、物理サーバとしてイメージしているので以下のようにしてサーバにはいるようにした。</p>
$ ssh [email protected] # web1への接続 $ ssh [email protected] # web2への接続
<p>ホストサーバ側の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%BF%A1%BC%A5%D5%A5%A7%A5%A4%A5%B9">インターフェイス</a>情報をみると。</p>
cent7なので以下コマンドだがifconfig -aのこと
$ ip a (中略) 5: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff inet 192.168.33.1/24 brd 192.168.33.255 scope global vboxnet0 valid_lft forever preferred_lft forever inet 192.168.56.101/24 brd 192.168.56.255 scope global dynamic vboxnet0 valid_lft 839sec preferred_lft 839sec inet6 fe80::800:27ff:fe00:0/64 scope link valid_lft forever preferred_lft forever
<p>vboxnet0という仮想の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%BF%A1%BC%A5%D5%A5%A7%A5%A4%A5%B9">インターフェイス</a>が作成され、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>も192.168.33.1が振られていることを確認。</p>
<p>ルーティングテーブルも確認しておくと</p>
$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 153.120.2.1 0.0.0.0 UG 0 0 0 eth0 153.120.2.0 0.0.0.0 255.255.254.0 U 0 0 0 eth0 192.168.33.0 0.0.0.0 255.255.255.0 U 0 0 0 vboxnet0
<p>192.168.33.0/24行はvboxnet0から出るように設定されている。</p>
<p>上の物理イメージに詳細書き込むと以下。<br>
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/mosuke5/20141006/20141006000246.png" alt="f:id:mosuke5:20141006000246p:plain" title="f:id:mosuke5:20141006000246p:plain" class="hatena-fotolife" itemprop="image"></span></p>
<p></p>
<div style="border: solid 1px #dddddd;"></div>
<p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Apache">Apache</a>のみインスールする必要があるので、<br>
web1, web2で以下を実施。(プロビジョニングしたほうが後々楽です。)</p>
$ sudo apt-get apache2
##どちらがweb1でどちらがweb2か区別するために以下ファイルは変えておきます。 $ sudo vim /var/www/index.html #Web1とかWeb2とかわかりやすい文言を入れておきます。
##Apache起動 $ sudo service apache2 start
##Apache起動確認 $ curl localhost 上記で変更したindex.htmlの内容が表示されること
<p>これでWebサーバの準備は完了。</p>
</div>
<div class="section">
<h2>4, Nginxでリバースプロキシサーバを構築する</h2>
<p>Nginx初めて触ったがとてもシンプル。<br>
今回はNginxをリバースプロキシとして利用したので、proxy.confを作成するだけ。</p>
##インスール $ sudo yum install nginx
/etc/nginx以下に設定ファイルなどあること確認
$ ls /etc/nginx
プロキシ構築のための設定ファイル作成
$ cd /etc/nginx/conf.d $ sudo vim proxy.conf server {
# /web1にアクセスが来た時
location /web1 {
proxy_http_version 1.1;
#受け渡す際のヘッダ情報を指定
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded_Proto http;
# 飛ばす先のURL(Web1サーバ)
proxy_pass http://192.168.33.10/;
}
# /web2にアクセスが来た時
location /web2 {
proxy_http_version 1.1;
#受け渡す際のヘッダ情報を指定
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded_Proto http;
# 飛ばす先のURL(Web2サーバ)
proxy_pass http://192.168.33.11/;
}
}
あとは起動させるのみ
$ sudo systemctl enable nginx $ sudo systemctl start nginx
</div>
<div class="section">
<h2>まとめ</h2>
<p>はじめてのリバースプロキシをサーバ仮想化を使って体験してみました。IPアドレスなどを意識しながら行うと非常に勉強になります。ちなみに、この数年後に下記のNginxの仕組みの記事を書いていますので、こちらもご覧ください。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://blog.mosuke.tech/entry/2016/06/04/180122/" data-iframely-url="//cdn.iframe.ly/nheb2qe"></a></div></div><script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
</div>
</body>
記事の内容に関連した相談、仕事依頼したい New
記事の内容やクラウドネイティブ技術に関する相談、仕事依頼を開始しました。
仕事依頼、相談をしてみる
フィードバック
本記事に対して、フィードバックあればこちらのフォームからご記入ください。
記事の内容にフィードバックしてみる