トリアエズぶろぐ
フリーランスでやってる77世代のWEBプログラマが福岡からのんびりとお送りいたします。
スポンサーサイト


一定期間更新がないため広告を表示しています

サーバのアラートメールを大量に受信してたらIPごとGmailにブロックされた


様々なサーバのアラートメールを大量にGmailアカウントに受信してた。
適当な内容だったので、ほぼほぼ迷惑メールラベルが付けられてたけど無視して、読んでは捨て読んでは捨て、してたらある時期からアラートメールが届かなくなってた。
メールサーバのログを見ると以下のエラーが。
 

 Our system has detected that this message is 550-5.7.1 likely unsolicited mail. To reduce the amount of spam sent to Gmail, 550-5.7.1 this message has been blocked. Please visit 550 5.7.1  https://support.google.com/mail/answer/188131 for more information. er4si1003638pbc.3 - gsmtp (in reply to end of DATA command))


全く違う内容のメールを送っても同様のエラーでブロックされてるので、どうやらIPごとブロックされてるぽい。

ウェブサービスやってるサーバだから、(Gmail)ユーザへのメールが届かなくなって非常に辛い。
とりま別のメールサーバ経由するようにして回避してみるのと、Google先生にお伺いを立ててみる。

皆様ご注意を。
CentOS4にyumをインストール


備忘録です。

リポジトリはこちら。
http://vault.centos.org/4.9/os/i386/CentOS/RPMS/

以下をごすっとインスコ
# rpm -ivh http://vault.centos.org/4.9/os/i386/CentOS/RPMS/sqlite-3.3.6-2.i386.rpm
# rpm -ivh http://vault.centos.org/4.9/os/i386/CentOS/RPMS/libxml2-python-2.6.16-12.6.i386.rpm
# rpm -ivh http://vault.centos.org/4.9/os/i386/CentOS/RPMS/python-elementtree-1.2.6-5.el4.centos.i386.rpm
# rpm -ivh http://vault.centos.org/4.9/os/i386/CentOS/RPMS/python-sqlite-1.1.7-1.2.1.i386.rpm
# rpm -ivh http://vault.centos.org/4.9/os/i386/CentOS/RPMS/python-urlgrabber-2.9.8-2.noarch.rpm
# rpm -ivh http://vault.centos.org/4.9/os/i386/CentOS/RPMS/yum-metadata-parser-1.0-8.el4.centos.i386.rpm
# rpm -ivh http://vault.centos.org/4.9/os/i386/CentOS/RPMS/yum-2.4.3-4.el4.centos.noarch.rpm

そしてこちら
yum updateできなくなった古いCentOSでyumコマンドを復活させる方法

今更こんな情報が必要になるなんて…orz
CentOSでPostgreSQL9.2の同期レプリケーションを試してみたよ


ずっと気になってたPostgreSQL9.2からできるようになった同期レプリケーション。
やっと試してみました。

PostgreSQL9.2では、
・同期
・メモリ同期
・スレーブ非同期
・完全非同期
の4種類のレプリケーションがありますが、今回はメモリ同期を試してみました。

PostgreSQL9.2のインストール

まずはPostgreSQLのリポジトリ追加

http://yum.postgresql.org/9.2/redhat/rhel-5-x86_64/
で【pgdg-centos92-9.X.X】の最新版をインストール

# rpm -ivh http://yum.postgresql.org/9.2/redhat/rhel-5-x86_64/pgdg-centos92-9.2-6.noarch.rpm

PostgreSQL9.2をインストール

# yum install --enablerepo=pgdg92 postgresql92*

起動後にテストデータを入れてみる

# su - postgres
$ /usr/pgsql-9.2/bin/pg_ctl restart -D /var/lib/pgsql/9.2/data -l ~/9.2/master.log $ createdb --encoding=UTF8 --template=template1 testdb $ /usr/pgsql-9.2/bin/pgbench -i testdb $ /usr/pgsql-9.2/bin/pgbench testdb -c 3 -t 500 -p 5432

マスタのレプリケーション設定

【postgresql.conf】
wal_level = hot_standby           # レプリケーション対応
synchronous_commit = remote_write # メモリ同期レプリケーション

max_wal_senders = 4               # とりあえずスレーブ3台まで
synchronous_standby_names = '*'   # 今回は全て(メモリ)同期レプリケーションするので * にした
wal_keep_segments = 16
replicationの部分をイキにする
METHODが peer/ident の場合、UNIXユーザ認証を使う。
今回はテストなのでlocalからは全て trust に変更。
【pg_hba.conf】
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
local   replication     postgres                                trust
host    replication     postgres        127.0.0.1/32            trust

再起動

$ /usr/pgsql-9.2/bin/pg_ctl restart -D /var/lib/pgsql/9.2/data -l ~/9.2/master.log

pg_basebackupでスレーブサーバ作成

pg_basebackupは稼働中のDBからスレーブ用のバックアップデータを取れるすぐれもの。
今回は data_slave ディレクトリにバックアップを取ります。

$ /usr/pgsql-9.2/bin/pg_basebackup -h localhost -p 5432 -D ~/9.2/data_slave --xlog --progress --verbose

スレーブサーバ用に設定ファイルを編集

【~/9.2/data_slave/postgresql.conf】
port = 5433                   # 同サーバで複数のDBを動かすために変更
hot_standby = on
log_line_prefix = '[slave1]'  # 必須じゃないけど一応スレーブの名前をつける

recovery.confをサンプルからコピー

$ cp /usr/pgsql-9.2/share/recovery.conf.sample ~/9.2/data_slave/recovery.conf
【~/9.2/data_slave/recovery.conf】
standby_mode = on
primary_conninfo = 'host=localhost port=5432 application_name=slave1'

起動しようとしたら【postmaster.opts を読み取ることに失敗しました】って怒られた…

$ cp ~/9.2/data/postmaster.opts ~/9.2/data_slave/
$ vi ~/9.2/data_slave/postmaster.opts
/usr/pgsql-9.2/bin/postgres "-D" "/var/lib/pgsql/9.2/data_slave"

スレーブ起動

$ /usr/pgsql-9.2/bin/pg_ctl restart -D /var/lib/pgsql/9.2/data_slave -l ~/9.2/slave1.log

と、この時点で既にデータが同期されている!スゴー。

念のため確認、スレーブにはinsertできないはず。

$ psql -p 5433 -c "INSERT INTO pgbench_history VALUES (1,1,1,1,now())" testdb
ERROR:  リードオンリーのトランザクションでは INSERT を実行できません

おっけー。

しかしここでちょっとした罠が。

PostgreSQL 9.2ではマスター1台スレーブ1台のレプリケーション構成で同期/メモリ同期を採用した場合、
スレーブへのWAL書き込みをマスターがタイムアウトせずに待つ仕様になっています。
このためスレーブの障害の発生がマスターがスレーブへのWAL書き込み待ちと同じタイミングの場合、
マスターの処理も停止し、クライアントへ処理結果が返りません。つまりスレーブが単一障害点です
http://codezine.jp/article/detail/7109?p=2

2台以上のスレーブがないと障害時に完全停止してしまう…ということで同じ手順でslave2も作成しましょう。

レプリケーション状況を確認

slave2を起動した所でレプリケーション状況を確認

$ psql -p 5432 -c "SELECT application_name,state,sync_priority,sync_state FROM pg_stat_replication"
application_name |   state   | sync_priority | sync_state
------------------+-----------+---------------+------------
slave1           | streaming |             1 | sync
slave2           | streaming |             1 | potential

sync … 同期で転送されている
potential … 現在は非同期転送だが、より上位のノードとの接続が無くなった場合に同期に格上げされる可能性がある
ステータスの説明はこちらがわかりやすい。
http://thinkit.co.jp/story/2011/10/27/2319

データの整合性を確認する

こんなかんじで。

/usr/pgsql-9.2/bin/pgbench testdb -c 3 -t 500 -p 5432;
psql -p 5432 -c "SELECT aid, delta, mtime FROM pgbench_history LIMIT 1" testdb;
psql -p 5433 -c "SELECT aid, delta, mtime FROM pgbench_history LIMIT 1" testdb;
psql -p 5434 -c "SELECT aid, delta, mtime FROM pgbench_history LIMIT 1" testdb;

値が同じ、ちゃんと同期してる!

リカバリを試してみる!

ちょっと意地悪して、こんなスクリプトで常にinsert/updateしている状況でリカバリを試してみる

$ vi ~/update_db_continuously.sh
#!/bin/sh

while true
do
/usr/pgsql-9.2/bin/pgbench testdb -c 3 -t 500 -p 5432
sleep 2
done

insert/update中にslave2を停止 ⇒ しばらくして意地悪スクリプトを停止 ⇒ slave2を起動 ⇒ 整合性確認 ⇒ バッチリ!

ちなみに意地悪スクリプトを動かしている最中にslave1を停止すると

/usr/pgsql-9.2/bin/pg_ctl stop -D /var/lib/pgsql/9.2/data_slave;
psql -p 5432 -c "SELECT application_name,state,sync_priority,sync_state FROM pg_stat_replication";

application_name |   state   | sync_priority | sync_state
------------------+-----------+---------------+------------
slave2           | streaming |             1 | sync
(1 行)

slave2がsync(同期レプリケーション)になる

しばらくしてslave1を起動すると

/usr/pgsql-9.2/bin/pg_ctl restart -D /var/lib/pgsql/9.2/data_slave -l ~/9.2/slave1.log;
application_name |   state   | sync_priority | sync_state
------------------+-----------+---------------+------------
slave1           | streaming |             1 | sync
slave2           | streaming |             1 | potential
(2 行)

ちゃんと戻ってる!
もちろん、データの整合性もバッチリ!ゴイスー

 

 

以下のサイトを参考にさせて頂きました。ありがとうございます。

PostgreSQL 9.2の同期レプリケーションを利用する際の勘所
http://codezine.jp/article/detail/7109
ごろねこ日記
http://d.hatena.ne.jp/hiroe_orz17/searchdiary?word=PostgreSQL
PostgreSQL9.0レプリケーション・ハンズオン
http://www.ospn.jp/osc2011-oita/pdf/osc2011oita-jpug_2.pdf

Postfixでvirtualを使わずにキャッチオールアドレスを設定する


備忘録です。

Postfixでキャッチオールアドレスを設定するときに
例えば今までは /etc/postfix/virtual に以下のように書いていました。
example.com             anything
info@example.com             info             # info@ は、ユーザinfoへ。
@example.com            catchalluser             # その他のメールは、ユーザcatchalluserへ。

しかしこれだと、メールを受け取りたいユーザを追加するたびにvirtualに手作業で追加しなければいけなかった。ちょっぴりめんどくさい。
今までやってた流れはこんなかんじ。

ユーザ追加してー、
# adduser hoge

virtual追加してー、
# vi /etc/postfix/virtual
example.com             anything
info@example.com             info
hoge@example.com             hoge             # 追加
@example.com            catchalluser

そして設定反映ー。
# postmap /etc/postfix/virtual
# /etc/init.d/postfix restart

しかーし、サーバのドメインが1つであれば、 /etc/postfix/main.cf を2ヶ所だけちょちょいと書き換えるだけでキャッチオールが完成する!知らなかったよ!
#local_recipient_maps =
↓ #を取る
local_recipient_maps =

# ユーザが該当しないメールはユーザcatchalluserに送る
luser_relay = catchalluser

これで新規ユーザを追加するときも気にしなくていいし、らくちん!!
ちなみに luser_relay には他サーバのメールアドレスを書いたりもできる。便利ー。


てなわけで、備忘録でした!エンジョイ!
DELL Vostro230にCentOS5入れたけどNICが認識しないのでインストール備忘録的な何か


 事務所のPCサーバが最近フリーズしちゃうようになったのでDELLで新PCをお買い上げ。
Vostro230 IntelCore2Duo / 4GB SDRAM で6万円。

WindowsVista入ってるけど構わずCentOS5をインストール!
んが、NIC認識しねぇ。
DELLのサイトによるとBroadcom 57XXのNICが載ってるらしい。
仕方が無いのでドライバを探す旅に出る。

・・・

http://ja.broadcom.com/support/ethernet_nic/downloaddrivers.php
でNetLink 57xxのLinux (tg3)をダウンロード。

ZIPなので解凍してUSBなどでVostro230に持っていく。

# rpmbuild --rebuild tg3-3.105h-1.src.rpm
でRPM作成

# cd /usr/src/redhat/RPMS
# rpm -ivh i386/tg3-3.105h-1.i386.rpm

でインストール完了。

あとはDELLを再起動したら自動認識。


Kernelをアップグレードしたらまた認識しなくなったので
rebuildからやり直したら動いたー。

apache2のinternal dummy connectionで涙目(解決!?)


つなビィのWEBサーバ機を往年のIBM X Series305からDELL PowerEdgeR300に変更。

メモリも6G(8Gはやっぱりあきらめました・・・via.
DELL R300のメモリを増設。しかし、、、)でapache2だし、PHP5だし、激速!のはずが、なぜかWEB見てたらコネクションが切れまくるんです。

たしかに、速いときは速い。スパッと出るんですが、、、数秒に1回の割合で
画像が出ない、つながらない。見てる途中で接続が切れる。
いままでは遅くてタイムアウトすることはあったけど、これはなんとも気持ち悪い。

最初はNFS周りを疑ってたんだけど、apacheのログをずーっと見てたら
1分間に何度と無く

::1 - - [26/Jun/2009:10:08:51 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.3 (CentOS) (internal dummy connection)"

というログ。TOPコマンドとあわせて見てるとこのログが出るときにapacheのプロセスがバサッと無くなるみたい。
なんじゃこりゃー!とグーぐる先生に問い合わせてみると出るわ出るわ。
どうやら親が子プロセスを切ってるみたいなんだけど、、、ていうかこっちはWEB見てんのに途中でいきなりバッサリ落とすのってどうよ。それってなくなくなーい!?
もう、意味がわかんない。この動作。なんか設定間違ったかなぁ?

とにかく、ぐぐりまくって見つけた由緒正しき説明ページ?によると、

In 2.2.6 and earlier, in certain configurations, these requests may hit a heavy-weight dynamic web page and cause unnecessary load on the server. You can avoid this by using mod_rewrite to respond with a redirect when accessed with that specific User-Agent or IP address.

InternalDummyConnection

てことで、avoidしちゃってもいい感じのことが書いてあるので、

httpd.confでRewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*internal¥ dummy¥ connection.*$ [NC]
RewriteRule .* - [F,L]
と書いてみるとapacheログが
::1 - - [26/Jun/2009:14:08:45 +0900] "OPTIONS * HTTP/1.0" 403 274 "-" "Apache/2.2.3 (CentOS) (internal dummy connection)"
とステータスが変わって、WEB見てても切れなくなった!ばんざーい!

ログを見てお気づきでしょうが、解決まで4時間かかりました。おれ涙目。

これで、勝手に子プロセスを切らないようになったんですが、なんだかメモリが際限なく食いつぶされているような気がする。。。まぁ、様子見で。


#追記
あれ、これで大丈夫かなと思ったけどなんかちょっと不安定。
もうちょっと調査が必要かなぁ。。。


#追記
やっぱり勘違いしてた><
上の設定は、internal dummy connectionでDBとかが絡むトップページにアクセスされて、無駄に負荷がかからないようにする設定だった。

色々とググって見たら
MinSpareServersよりMaxSpareServersをめっちゃ大きくすればいいよ!
とか、
いやいや、不思議だけどMinSpareServersよりMaxSpareServersを小さくするんだよ!
とか、
色々書いてあってもうわけわからん。


#追記2009/6/28 01:40
ちょこちょこと時間があるときに調べてみると、どうもバサッと接続が切れるときって、プロセスがdefunctになってるぽい。
たくさんのapacheのプロセス自体は生きたままなんだけど、いきなり全て再起動(?)されてるように見える。(全てCPU利用率が0に変わる)
アプリ側も疑ってみる必要あるのかなぁ。。。?


#追記2009/06/28 16:12
なんかね、apacheが不安定な理由がlivedoorのサーバ監視が原因のような気がしてきた。。。
監視プロトコルをtcpからURLに、優先度を低にしたら俄然安定してきた気がする。
なんだろう、よくわかんないんですけど??


#追記2009/06/29 13:45
livedoorのサーバ監視はやっぱ関係ねーか。んー、完全にはまってしまった。。。


#追記2009/06/29 22:50
解決!?

サーバ構成のおさらい。

DELL R300
kernel-PAE-2.6.18
CentOS5.3(32bit) + apache2.2.3
Memory 6G

で、yumでセットアップしただけの極々ノーマルなサーバです。
強いて言えば、memcached と apache で mod_proxy 使ってます。
なので、普通と違うところといえば

・PAEで6Gメモリ
・memcached
・mod_proxy

なので、基本に戻ってここら辺から疑って色々とやってみました。

旧つなビィサーバにはつなビィだけではなくて、ちょこちょことコンテンツが入ってたんです。
で、今回新サーバを設置したんですが一部のコンテンツは旧サーバに残したほうが都合が良かったので、それらは mod_proxy でそのまま運用しちゃえ!という設定をしてました。

で、
httpd.conf
ProxyPass / http://192.168.100.2/
とか書いてたんですが、これを
/etc/hosts
192.168.100.2   web01.tuna.be   web01

httpd.conf
ProxyPass / http://web01/
てしたら直りました・・・なんで?
もしかしてfrontもbackendもtuna.beとか設定してるから、

192.168.100.2にproxy ⇒ 192.168.100.2ってtuna.beじゃね? ⇒ tuna.beっつったらfrontサーバだよね? ⇒ frontサーバへ ⇒ ループ ⇒ 結果ばっさり落とされた?

と推測。
あくまで推測。
だって、LogLevelとかをdebugまで落としてもerror_logにはそんな感じのこと出てこなかったし。

すっきりしたんだけど、どこかに残るこのモヤモヤ。
誰か詳しい方助言いただけるとうれしいです。。。

ここ最近こればっかり考えてて挫ける寸前だったよ!胃も痛くなってきてたし><
もうだめかと思ったよ、パトラッシュ・・・。

やっと次へ進めそう。


#追記6/30 12:30
しつこくてすみません。

かなりApacheが快適になったんですが、やっぱ極たまーに表示でTimeoutする。静的ページも。

ちなみに
HEAD http://127.0.0.1/
とかでもえらく時間がかかることがあるのでネットワークではなくサーバの問題かな。

httpd.confで
LogLevel debug
にしてみると、
(32)Broken pipe: core_output_filter: writing data to the network
と気になるログ。
Error :: Broken pipe: core_output_filter: writing data to the network
http://httpd.apache.org/docs/2.0/faq/error.html
を参考にしてみたけどいまいち効果なし。

サーバは奥が深いねぇ。。。



#追記7/6
なんだかんだ1週間ほど悩みましたが、結局netscreenの設定が問題でした。。。
正直燃え尽きた。


>いわもとさん
すみません、古い話なのではっきりと覚えてないのですが・・・
Network>Zones>DMZのEdit
で、
If TCP non SYN, send RESET back
のチェックを外したら問題解決したような気がします。

なんでブログに残してなかったんだろ。。。間違ってたらすみません。

DELL R300のメモリを増設。しかし、、、


 実は、つなビィサーバ用にDELLのR300を購入したまま使わずに1年が過ぎようとしています・・・><

mod_proxy_balancerとか実験してはいたんですけどね。
つなビィのサーバ構成 : 負荷分散構成に悩む><
意外と簡単で拍子抜けた、mod_proxy_balancerで負荷分散

で、このサーバが4G。1Gx4。なんでこんな構成にしちゃったかは謎。

とにかくZENで仮想化するにも、memcachedをめいっぱい使うにも、メモリの増強が必須!

メモリのレーンが全部で6レーン。2Gを2枚さして8Gにしてやろうと、
DELLの営業担当者にメールでお問い合わせ。⇒見積もり⇒購入。

先日2Gx2が届きまして、いざ8G!とやってみるも起動しない・・・E2011 Memory Config Errorて。

純正品でなんでー!と思ってサポセンにTELして色々と調べてもらった結果、
既存の1Gメモリはランク1、新規のメモリはランク2。
異なるランクの混在は原則OKなんだけど、その場合最後の2レーンが使えない場合があると。

ていうかちゃんと聞いて買ったのに!ランクの存在も初めて知ったけど。
なーんか腑に落ちないまま、2Gx2+1Gx2の6G構成で動かすことに。

サーバ周りはなにかと大変だなぁ。。。
何が一番大変かって、引っ張り出してふた開けてメモリ挿して戻しての繰り返しが・・・重い!!
なんでこんなでかいサーバ買ったんだろ、俺。。。

負荷分散構成時のファイルストレージサーバとのやり取り方法


さてさて、

つなビィのサーバ構成 : 負荷分散構成に悩む><

意外と簡単で拍子抜けた、mod_proxy_balancerで負荷分散

で色々と思いをめぐらせていたわけですが、複数のWEBサーバ⇔ファイルサーバ のやり取りについて、どういう構成がパフォーマンスが良いか悩んでます。

つなビィでは現在、500万超のユーザ画像をファイルサーバに保存していて、NFS経由でその画像を表示しています。
今後WEBサーバが複数台構成になった場合、それぞれのWEBサーバがNFS経由で画像を表示するのがいいのか、ロードバランサー⇔apache経由で画像を取得、表示する方がパフォーマンスが良いのか考えています。



1.現行のサーバ構成のままだと、こんなイメージ。
  それぞれのWEBサーバがNFS経由でファイルを取得、表示する

2.WEBサーバがNFS経由でファイルサーバにファイルを保存するのは1.と同じだけど
  画像表示の時はmod_proxy_balancer+mod_rewriteを設定して
  ファイルサーバに載せたapache経由で行う

と、図にしてみると2.の方が(なんとなく)パフォーマンスよさそうだなぁ。
昨日届いた
[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) (WEB+DB PRESSプラスシリーズ)
をさらっと読んでみた所、やはり2.がいいんじゃね?と書いてあった(気がする)。

新しいサーバが届くのが今月末くらい。
おら、ちょっとわくわくしてきたぞ!
意外と簡単で拍子抜けた、mod_proxy_balancerで負荷分散


Linuxやネットワークに詳しくないボクでも、1時間でできちゃいましたよ、mod_proxy_balancerで負荷分散。
結果的には3台じゃなくて2台構成でもOKでした。

つなビィのサーバ構成 : 負荷分散構成に悩む><
で使ってる2台のDBサーバってCentOS5だったなぁと思って、
httpd.conf見てみたら書いてあるじゃん!
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

目標は

LV(ロードバランサー)兼Webサーバ × 1
Webサーバ × 1

の2台構成で負荷分散。
早速wktkで、Google先生を頼りに試行錯誤で書いてみた。

$ vi httpd.conf

## 自サーバのIPは192.168.100.13
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / balancer://TEST/ stickysession=stickyid timeout=2
<Proxy balancer://TEST/>
        BalancerMember http://192.168.100.12/ loadfactor=10
        BalancerMember http://127.0.0.1/ loadfactor=10
</Proxy>
んでテスト。
$ curl http://192.168.100.13
Hi, 192.168.100.12
$ curl http://192.168.100.13
Hi, 192.168.100.12
$ curl http://192.168.100.13
Hi, 192.168.100.12

あれれ、192.168.100.12 にしか行かないよー。。。と思ったらそりゃそうだ
127.0.0.1に行く時点でループ⇒エラーになるわけで。
んじゃ、VirtualDomain作ってわけるしかねーか。

192.168.100.13:80(通常アクセス)

バランサー

192.168.100.13:8001(コンテンツ)

でいいのかな?

$ vi httpd.conf

Listen 8001
NameVirtualHost *:8001
<VirtualHost *:8001>
        DocumentRoot /var/www/html
        ServerName dummy-host.example.com
</VirtualHost>

NameVirtualHost *:80
<VirtualHost *:80>
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / balancer://TEST/ stickysession=stickyid timeout=2
        <Proxy balancer://TEST/>
                BalancerMember http://192.168.100.12/ loadfactor=10
                BalancerMember http://127.0.0.1:8001/ loadfactor=10
        </Proxy>
</VirtualHost>

(書き方あってるか不安だけど)テストー。

$ curl http://192.168.100.13/
Hi, 192.168.100.12
$ curl http://192.168.100.13/
Hi, 192.168.100.13
$ curl http://192.168.100.13/
Hi, 192.168.100.12
$ curl http://192.168.100.13/
Hi, 192.168.100.13

うほっ、動いた!
2台構成でもいけるやーん。ルネッサーンス!
だがしかーし、この場合LVサーバに最初のアクセスとリバースプロキシ後のアクセスログが二重に残る。(おぉ、状況が変わった)

127.0.0.1 - - [13/Aug/2008:00:11:23 +0900] "GET // HTTP/1.1" 200 19 "-" "curl/7.9.8 (i386-vine-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.6m) (ipv6 enabled)"
192.168.100.2 - - [13/Aug/2008:00:11:23 +0900] "GET / HTTP/1.1" 200 19 "-" "curl/7.9.8 (i386-vine-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.6m) (ipv6 enabled)"
これだとaccess_logが肥大化するし、なにより気持ち悪いので以下の設定でリバースプロキシ後のアクセスログの出力を停止!
<VirtualHost *:8001>
        ほげほげ
        ErrorLog /dev/null
        CustomLog /dev/null common
</VirtualHost>
ていうかこの設定の仕方がもっと気持ち悪い。他に書き方なかったっけ??

まぁ、そんなこんなで1時間程度で実験成功ー。
↓サブフォルダのテストもOKでちた
$ curl http://192.168.100.13
Hi, 192.168.100.12
$ curl http://192.168.100.13
Hi, 192.168.100.13
$ curl http://192.168.100.13/test/
Hi, 192.168.100.13/test/index.html
$ curl http://192.168.100.13/test/
Hi, 192.168.100.12/test/index.html
こんなに簡単にできてしまうなんて・・・なんて食わず嫌いな俺。
こりゃぁLVS・IPVSの負荷分散も試してみるべき?
さすがに本番DBサーバでIPVSの実験は怖いので新しいサーバが届いてからにしようかな。

でもコンテンツが混在してるつなビィサーバはmod_proxy_balancerがいいのかなぁ。例の本が届いてからじっくり検討するかー。


#2008/8/19
届いた!





参考サイト(感謝!):ブクマ順

livedoor Developers Blog:nowaのサーバ構成 - livedoor Blog(ブログ)

ウノウラボ Unoh Labs: mod_proxy_balancer 小技集

cyano? ブログアーカイブ ? mod_proxy_balancerで中〜大規模サーバー運用するときの勘所 - (1) mod_proxy_balancerの設定編

FFTT : 負荷分散講習会 Apache編

mod_proxy_balancer設定memo - うまい棒blog

naoyaのはてなダイアリー - Apache 2.2.0 + mod_proxy_balancer

YappoLogs: Apache 2.2.0 のロードバランス機能(mod_proxy_balancer)を使いこなす

つなビィのサーバ構成 : 負荷分散構成に悩む><


久しぶりにサーバの話とか。

ここのところ、つなビィが22時〜0時の間アクセスが集中して繋がりにくくなってます。
ボトルネックは、ルータとWebサーバ。
WebサーバのLoadAve.が90を超え(!)、ルータのセッション数(10240)を使い切ってしまう状況。

現在のサーバ構成はこんな感じ。
個人でやるには規模が大きくなってきた気が…
何とか可用性もあげてる感じです。
つなビィ サーバ構成

安ルータをさっさとNetScreenに切り替えるのがいいんだろうけど、NetScreenの設定をじっくりする時間がないのと結局Webサーバがパンクしたらセッションを使い切る可能性も考えられるので、とりあえずWebサーバを増強しようと1台Dellでお買い上げ。

今回はちょっと奮発して、消耗品で落とせる額wギリギリの構成で注文してみた。
そこで、Webサーバを負荷分散してみたいんだけど、mod_proxy_balancerとIPVSのどちらがいいか悩む。

つなビィ サーバ構成2

・WEBサーバにはVirtualDomainで色々コンテンツが入ってる
・負荷分散はつなビィだけでいい
・となるとmod_proxy_balancer?
・mod_proxy_balancerってサーバ3台必須?
・上図の構成ってできるの?
・アクセスログってどうするっぺ?

要するに、mod_proxy_balancerもIPVSもようわかっとらんのです。
でも一発ここで負荷分散環境を作ってみて、スキルアップしたい次第。
ということで↓をAmazonでポチ。
おしえてえらい人ー

[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) (WEB+DB PRESSプラスシリーズ)
[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) (WEB+DB PRESSプラスシリーズ)
安井 真伸,横川 和哉,ひろせ まさあき,伊藤 直也,田中 慎司,勝見 祐己