止められないサーバのDebian upgrade時のTipsその2

明日とかいいつつ、明日じゃなくなってしまいました。

運命の●曜日始まります!

前提

  • サーバーメンテナンス開始時間は6時
家からiDCまで

朝起きて仕度->準備をする

遠足なみに持っていくものを指差し確認。持っていくと吉な物は

もし可能ならDNSのA/CNAME/MXのTTLを120秒とかに変更しておく

ラックを開けて、モニター、キーボード、必要があればマウスを取り付ける

IBMの最近の1Uタイプは、薄すぎて置いてある液晶モニターの差し込み端末が入らないタイプがあります。そんな時はiDCに窓口に「差し込み端末が薄いのを貸してください!」と言えば貸してくれます。

またPS2がなくUSBしかないタイプがあるので、USB<=>PS2ケーブルが役に立ちます。

ノートブックを立ち上げる。skypeなど関係者と連絡が取れる体制にします。

アップグレード作業開始!!

DNSのA/MXをメンテナンスサーバーのIPに変更する

以前はDynDNSのWebhopを使っていたんだけど、HTTPSの時に転送がされないので、直接A/MXを変えるのが一番よさげです。みんなSSLが大好きです。

あらかじめTTLを短くしているので、指定の秒数を過ぎると新しいIPを見に行っているはず。

メンテナンスサーバに変更になっているか複数のネットワークから確認

ウェブだったらコンソール端末でw3m http://example.jpを使えば分かります。またメールも届くかどうか前日に仕込んだメール送信スクリプトを叩き、メールを送って見ます。

HTTPD,DB,MTAなど可動しているアプリを落とす

もしNFSを使っている場合は、
umount -a
をすると全部落とせます。

前日に取れなかったバックアップを取る

主に/var/lib/mysql, /var/spool/xxxなどを、前回のバックアップスクリプトを使ってtar.gzにする(rsyncかscpで別のサーバに退避させる)
これはサーバーのスペック&ネットワークカードの精度にもよるけど、300Mぐらいで10分ぐらいかかります。


packageの確認

以下は事前に出来るので、可能なら前日に確認して、しなくてもいいようにしましょう。
・kernel確認
aptitude update/upgrade
・APTのpin機能を無効にする
・パッケージの状況を確認
・proposed-updates セクションを削除
詳細はこちら(system-status)

実アップブレード

・/etc/apt/sources.list を編集し、lenny(stable)にする
・セッションの記録
script -t 2>~/upgrade-lenny.time -a ~/upgrade-lenny.script (当日これすらタイプするのは面倒だ!という時はshellscriptファイルとして作るのもあり)
・パッケージリストの更新
・アップグレードの確認
・apt/aptitude のupgrade
・システムの最小アップグレード
・残りのシステムのアップグレード
詳細はこちら(upgradingpackages)

ちなみに上記はすべてSSHごしでも出来ます。
以前サーバにキーボードを挿したのに、途中で入力出来なくなりアップグレードの再起動で直ったという事件がありました。(サーバーはinputを待っている状態でハングして、何度もキーボードを挿してもインプットを認識してくれない、状況だった)

サーバーを再起動させる

rebootで再起動。もし再起動せず言うことを聞かなかったら、reboot -fで強制再起動
ちなみにSSHは一旦切れますが、SSHはサーバーの再起動と共に自動で立ち上がります。

HTTPD/DB/MTAの起動確認

HTTPD
Apacheetch->lennyだと設定ファイルの置き場所が違ったりするので、Listen 443などが/etc/apache2/ports.confに移り、その為2回宣言している結果、エラーで立ち上がっていない、というケースあり。

DB
接続ユーザーがどのホストからの接続を許可しているか事前に確認する事。複数サーバの構成だった場合、特定のホストのみの接続になっている場合が多く(当たり前)、一瞬おやっ、と思う。DB は基本phpMyAdminなどを使わずに、コンソールから使えるようにしておく

MTA
・内部->外部へメールを送る
・MXレコードを戻す
TTLの時間が過ぎたら、メール送信スクリプトを叩き様子をみる

動作に問題がなければAレコードを戻し、メンテナス終了!

メンテナンス終了した事を関係者に告知する

自分を褒めてあげる

・゚(゚⊃ω⊂゚)゚・。ヨカッタヨーーー

基本インフラ構築してない人に大変さを分かってもらおうとは思ってはいけません。
彼らはインフラ構築、また開発者がドラえもんの生まれ変わりか何かと思っているので、何でも出来ると思っている節があります。
('ω'*)アハ♪
なので、自分で自分を褒めてあげましょう。

その他

基本は誰かに待機してもらって、現状を報告したり、相談に乗ってもらう体制にしたほうがいいと思います。
(1人でやるとどうしても見逃してしまう)

DebianのOS upgradeは基本事前準備が肝で、当日はチェックリストにそってやるだけの場合が多いです。

検証方法については個人の思う所があるので(例えばサブドメインではなく本ドメインの検証じゃないとダメだ!とか…)関係者と事前に十分に話し合う必要があります。
(当日作業中にこの検証方法だとダメだ!と言われたりするので…涙)

Debianじゃなくても、何かしらOSのアップグレードはあるので、これも運命と思って受け入れましょうw!

参考になれば幸いです♪