2004 年 04 月
サーバダウン
2004/04/05
|
02:30 頃 mrtg から snmpd のデータが取得できないというエラーがメールにバンバン届き、サーバに接続しても ping も通らないので AT-Link に連絡。 その間にりぼんさんのトップに報告。 10 分ほどで AT-Link から連絡があり、再起動手続きにはいるとのこと。でも待てど暮らせど立ち上がらない、10000 回打っている ping はずーっと Request time out. の文字が羅列される。30 分ほどしてメール着信と同時に電話がかかってくる。夜中の 3 時。起きているけど電話対応する物なのでしょうか?まあ、私は部屋に電話があるからいいけど、個人契約のサーバは少し考慮した方がいいと思います。しかし、電話で伝える必要がある緊急性ではありました。すなわち、一台のハードディスクがクラッシュして、立ち上げ時にカーネルパニックで立ち上がらないとのこと。多分、ソフトウエア RAID なのでその領域に不整合が出て立ち上がらないので、/dev/md0 のマウントを /dev/hdb2 などに変えてくれたら、立ち上がると思うけどどうせ不安定なまま立ち上げるなら OS をクリーンインストールしてくれると言ってくれているので、お願いすることにしました。6.2 から 7.3 になり、HDD が 20GB から 40GB になりました。ただ納得いかないのは後でステータスを見ると SEAGATE 製のドライブだったことですね。今までは両方とも QUANTUM すなわち MAXTOR だったのですけど。個人的に何度も書いていますが、QUANTUM 派ですから。 実は私が一番気になっていたのが、DB のことで私は posgresql の data をバックアプすれば他のサーバで動くと思っていたのですが、同じバージョンの同じインストールをした postgres に入れても、全文認識されず昔作られた物しか認識されませんでした。どうやら pg_dump でダンプを撮らないとダメなんですね。ものすごい経験になりましたが、DB は復活できるのか必死になって考えていました。てか、冷や汗だらだらで体臭がきつかったです。いくら頑張って色々コマンドを試しても、DB に接続できる物のデータを吸い取ってくれません。本気でバイナリーを直接読み出すプログラムを書こうと思っていました。この時点で頭の中は、DB が壊れていないか、新しいサーバで読み出せるかでいっぱいでした。 OS 再インストールと、/home など指定した位置のデータ吸い上げは全て AT-LINK が無償でやってくれるって事なので、お願いして寝るとする。この次点で 06:00 を少し回っていました。だいたい 2,3 時間で終わると言うことなので、08:20 に一旦死にながら起きあがり会社に電話して休み、そしてもう一度 11 時まで爆睡。歳のせいか本当に徹夜が出来なくなりました。寝ている間にメールが 10 通ほど届いており、まだ出来ませんというお詫びのメールでした。結構律儀。 結局引き渡されたのは昼少し前で、それから必死にインストール作業。どうやら最新の rpm は全て当ててくれてあったので、だいたい次のようなのをインストール。基本的にソースから。 openssl http://www.openssl.org/source/openssl-0.9.7d.tar.gz automake http://ftp.gnu.org/gnu/automake/automake-1.8.3.tar.gz autoconf http://ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.gz lynx http://lynx.isc.org/release/lynx2.8.5.tar.gz wget http://ftp.gnu.org/pub/gnu/wget/wget-1.8.2.tar.gz cvs http://ccvs.cvshome.org/servlets/ProjectDownloadList?action=download&dlID=351 libtool http://ftp.gnu.org/gnu/libtool/libtool-1.5.2.tar.gz less http://ftp.gnu.org/gnu/less/less-382.tar.gz rsync ftp://ftp.samba.org/pub/rsync/rsync-2.6.0.tar.gz make http://ftp.gnu.org/gnu/make/make-3.80.tar.gz glibc http://ftp.gnu.org/gnu/glibc/ bzip2 ftp://sources.redhat.com/pub/bzip2/v102/bzip2-1.0.2.tar.gz nmap http://download.insecure.org/nmap/dist/nmap-3.50.tgz tcpdump http://www.tcpdump.org/release/tcpdump-3.8.3.tar.gz libpcap http://www.tcpdump.org/release/libpcap-0.8.3.tar.gz openssh wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/rpm/RH73/openssh-3.5p1-1.i386.rpm wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/rpm/RH73/openssh-askpass-3.5p1-1.i386.rpm wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/rpm/RH73/openssh-askpass-gnome-3.5p1-1.i386.rpm wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/rpm/RH73/openssh-clients-3.5p1-1.i386.rpm wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/rpm/RH73/openssh-server-3.5p1-1.i386.rpm gc http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.2.tar.gz w3m http://prdownloads.sourceforge.net/w3m/w3m-0.5.tar.gz?download libpng http://prdownloads.sourceforge.net/png-mng/libpng-1.2.5.tar.gz?use_mirror=keihanna gd http://www.boutell.com/gd/http/gd-1.8.4.tar.gz wget http://updates.redhat.com/7.3/en/os/i386/glibc-2.2.5-44.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/glibc-common-2.2.5-44.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/glibc-devel-2.2.5-44.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/glibc-profile-2.2.5-44.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/glibc-utils-2.2.5-44.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/nscd-2.2.5-44.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/xinetd-2.3.11-1.7x.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/wget-1.8.2-4.73.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/wu-ftpd-2.6.2-11.73.1.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/zlib-1.1.4-8.7x.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/zlib-devel-1.1.4-8.7x.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/up2date-2.8.40-3.7.3.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/tar-1.13.25-4.7.1.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/gcc-2.96-113.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/gcc-c++-2.96-113.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/gcc-chill-2.96-113.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/gcc-g77-2.96-113.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/gcc-java-2.96-113.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/gcc-objc-2.96-113.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/gdb-5.2-2.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/gdm-2.2.3.1-23.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/file-3.39-8.7x.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/cpp-2.96-113.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/ark-3.0.5a-0.73.0.i386.rpm wget http://updates.redhat.com/7.3/en/os/i386/arpwatch-2.1a11-17.7.3.2.i386.rpmそれから xntpd と BIND と snmpd をインスコ。言語系は ruby 。あとは pear と CPAN で php と perl のモジュールを引っ張って来ました。pear や CPAN は基本的に最後の最後。というのも、入っていないと入らないモジュールが多いためで、データベース系などはインストールされていないと弾かれますからね。 HTTP::Date Bundle::CPAN HTML::TokeParser HTML::Template XML::Parser XML::RSS Digest::MD5 CPAN DBI DBD export PGLIB=/usr/local/pgsql/lib export PGUSER=postgres DBD::Pg DBD::JDBC DBD::SQLite CGI CGI::Carp Net::HTTP Net::SMTP LWPpear はちなみに pear install Archive_Tar pear install PHPUnit pear install bz2 pear install MP3_ID pear install Crypt_RC4 pear install Net_IPv4 pear install Net_URL pear install SQLite pear install HTML_Crypt pear install HTML_Form pear install HTML_Javascript pear install HTML_Template_PHPLIB pear install HTML_TreeMenu pear install HTTP_Request pear install XML_HTMLSax pear install XML_Transformer pear install XML_Parser pear install XML_Tree pear install XML_Util pear install XML_RPC pear install XML_CSSML pear install XML_RSS pear install XML_SVGこれぐらい。メール系は無料サーバなので入れていません。 それから apache + php をいれて、mod_gzip を入れて、proftpd を入れてって感じで、大きなアプリケーションのインストール。 あとは、cron の設定。で、ここらへんまでは自分の中でマニュアルを持っているので 2,3 時間で終わり。主にコンパイル時間かな。呪文だけでインストールが出来るのは自動で全部やるスクリプトを書いてありますから、あっという間ですわ。 それから古いデータベースを祈るように稼働させると、なんとか読み出せた。なので早速新しいサーバへ移動させるためにデータをダンプ、コマンドは pg_dump -d DBNAME > output.sql。これを ftp で渡して新しいサーバで psql -d NEWDB -f output.sql ってやって読み込み。が、エラー。**** のデータは壊れているよ〜って出て読み込まれない。出来たデータを見ても、確かに 4 件ぐらい。ギャー。本気で死ぬかと思いました。 でもここで諦めてはいけません。データベースをバックアップできないようなデータベースシステムはないはずですから、pg_dump のオプションを調べると、-D という明示的に INSERT 文を作って出力するってのがありました。それで出力すると、EUC で保存された部分は \222\232 などエスケープコードとして表示されて、全文テキストで出力されますのでエラーもわかりやすくなります。 そして、気を取り直してインサート。出るわでるわ、エラーが。20000 件ほどユーザがいるわけですが、 60 件ほどエラーが出ました。これは初めの頃 EUC の変換を完璧にしていなかったのが原因なのと、あとは半角カナ及び機種依存文字、絵文字が書かれている場合に NON EUC として弾かれました。バージョンが上がって、チェックが厳しくなっているようですね。試しに旧サーバで使っていた CGI をそのまま使って、依存文字で書くと DB に弾かれました。だいぶんバージョンアップしているんだ。そんなわけで、サインアップ関連の CGI にて EUC の確からしさを正しく判断するようにしました。これで、次回の統合時にはエラーが出なくなるはずです。エラーが出たデータは、その部分を切り取って、変更しました。 あと、なぜか quota が動いていなかったので、設定して再起動。quota なんてのは絶対に必要な物なんだから、デフォで入れておいてほしい物です。さすがに最近のカーネルはデフォで入っているのでカーネル再コンパイルなんてことは必要なく、/etc/fstab を書き換えて quota.user を作って再起動で済みますが、再起動はリモートでは極力やりたくありませんからね。 ここで一旦 www サーバの再起動。 これから各種設定のチューニングを行いました。一旦先に www だけ復活させたのは、あまりにも落ちているのはダメだと思ったからですわ。ftp はセキュリティの確保を確かめきるまでは開けられませんしね。 そんなのをして 27 時に FTP サーバの allow host を開放。 なんとか最低限復活しました。 本日の気分:blue さんが変:0 時間( 計 0 時間 ),明日のラッキーアイテム:サーバダウン |
コメント