IT pass HikiWiki - [EPA2008b]サーバ交換作業 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

[((<EPAサーバ構築ドキュメント>)) へ戻る]

= 概要

EPA サーバでは,
毎年 9-10 月に管理・運営技術と後継者育成を目的として,
サーバの再構築を行っている.

EPA サーバは本サーバと予備サーバの 2 台体制で運用しており,
以下の手順で再構築を行うこととなる.
なお, 入替え前のサーバと入替え後のサーバのホスト名は
それぞれ old, new とする. 実際に作業する際には適宜置き換えること.

  (1) new に OS とサーバソフトウェアのインストール (期間: 1週間 〜 1ヶ月)
  (2) 下記の入れ替え日には EPA サーバを停止することとなるため,
      停止アナウンスを数度行う (入替え日の2週間前から当日30分前まで).
  (3) old と new の入替え (期間: 半日〜1日)


= スケジュール

入替え前に, 上記作業の分担とスケジュールを決めておくこと.
特に, 停止日にはおよそ半日から一日の間 EPA サーバが停止するため,
事前にユーザに通知を行っておくこと.

以下に, 過去の入替えの際のスケジュール (作業ログ) へのリンクを挙げておく.

* ((<[Memo2008][EPA]EPA サーバ交代スケジュールと作業ログ(081027)>))
  * 旧 old が tako, 新 old が ika

* ((<[Memo2008][EPA]EPA サーバ交代時の作業ログ(080825)>))
  * 旧 old が ika, 新 old が tako
  * スケジュール作成時には大体 tako の構築が完了していたため,
    その分については記載されていない.
  * ((<[Memo2008][EPA]EPA サーバ交代に関するアナウンスメール(080825)>))


= 移行に関する覚書

  * epa.scitec.kobe-u.ac.jp に対応した IP アドレスを old から new に変更する.
    * HTTPS 用の証明書は epa で作ってあるので, サーバの IP アドレスが変更
      されても問題なし.
    * ssh のホスト鍵は, 本当のホスト名 (old.epa.scitec.kobe-u.ac.jp) で
      ~/.ssh/known_hosts に保存されているので,
      old のホスト鍵を new にコピーした上で, 移行後に
      epa.scitec.kobe-u.ac.jp でログインしようとしても, うまくいかない.
      * 名前も張り替える作戦なら問題は起きないが,
        今回はローカルに保存したホスト鍵を各人で消してもらう作戦で行く.
    * 無線 LAN などの機器は DNS サーバとして old と new の両方を設定している.
      new に移行した際には old はセカンダリ DNS サーバとするためとりあえず
      問題は起こらないと考えられるが, その後 old を再構築中に設定中のゾーン
      ファイルを読み込んで何らかの問題が生じるかもしれない.


= new の再構築前に行う作業

* ((<URL:#old でローカルバックアップ開始>))
* ((<URL:#old → new へのバックアップ停止>))

== old でローカルバックアップ開始

サーバ入替え時の前後におけるデータ消失のリスクを軽減する目的で,
old において, ((<[EPA2008b]ローカルでのバックアップの設定>)) を行う.


== old → new へのバックアップ停止

new を再構築するにあたり old → new における
((<[EPA2008b]サーバと予備サーバでのバックアップの設定>))
を停止する.

= 入替えの 1日前 or 前の週の最後の平日の作業

入替えに向けて, 入替え作業 24 時間前までに以下の作業を行っておく.
(「24 時間」は通常運用時の DNS の TTL の設定に拠る)

* 移行の最終告知メールの送信
* ((<URL:#old, new, gradis の DNS キャッシュの TTL を変更.>))
* ((<URL:#home 領域を old から new へ転送>))

== old, new, gradis の DNS キャッシュの TTL を変更.

: 方針

  TTL は 5 分 (300 秒) くらいにしておく. (入替え作業時間より
  も十分に短い時間に)

=== new, old での DNS 設定の変更

  $ cd /usr/local/bind/etc/namedb

epa.zone, ahs.zone, ahs.rev のファイルの最初のほうにある

  $TTL 3600



  $TTL 300

に変更する. また, serial も更新する.

old のみ bind を再起動する
(new の bind はこの時点では動作していないため).

  old:~# /etc/init.d/bind restart


=== gradis での DNS 設定の変更

gradis は複数の研究室に利用されているため,
global な TTL は変えず, レコードを指定して変更する.

基本的には, レコードの 2 カラム目に TTL を指定すればよい.

* scitec.zone

  /var/named/scitec.zone の該当する箇所の 2 カラム目に '300' を記述する.
  結果は以下のようになる.

  NS レコード

    ;; for 133.30.109.22 domain
    ; ahs
    ahs.scitec.kobe-u.ac.jp.        300 IN  NS      ika.epa.scitec.kobe-u.ac.jp.
    ika.epa.scitec.kobe-u.ac.jp.    300 IN  A       133.30.109.22
    ahs.scitec.kobe-u.ac.jp.        300 IN  NS      gradis.scitec.kobe-u.ac.jp.
    ; epa
    epa.scitec.kobe-u.ac.jp.        300 IN  NS      ns.epa.scitec.kobe-u.ac.jp.
    ns.epa.scitec.kobe-u.ac.jp.     300 IN  A       133.30.109.22
    epa.scitec.kobe-u.ac.jp.        300 IN  NS      gradis.scitec.kobe-u.ac.jp.
    ; aoe
    aoe.scitec.kobe-u.ac.jp.        300 IN  A       133.30.109.22
    ; cps
    cps.scitec.kobe-u.ac.jp.        300 IN  A       133.30.109.22


  MX レコード

    aoe.scitec.kobe-u.ac.jp.        300 IN  MX      10      ika.epa.scitec.kobe-u.ac.jp.
    cps.scitec.kobe-u.ac.jp.        300 IN  MX      10      ika.epa.scitec.kobe-u.ac.jp.


  変更 (serial も忘れずに!) 終了後, DNS サーバを再起動する.

    gradis:~# /etc/init.d/named restart


== home 領域を old から new へ転送

* 当日にも同様の作業を行うが, その際の時間を短縮するために行う.

* 注意事項
  * EPA サーバは root でも公開鍵認証によるログインを許可しているが,
    任意のコマンドが実行されないように設定を行っている.
    (設定の詳細は ((<[EPA2008b]サーバと予備サーバでのバックアップの設定>))
    参照のこと)
    今回の作業の際には, この設定を一時的に変更して作業を行う.


=== 公開鍵認証の際のセキュリティ設定の変更

まず, 前提として, old ⇒ new では
((<[EPA2008b]サーバと予備サーバでのバックアップの設定>))
の設定が完了しているとする.

old が epa, new が epabk に対応している.

=== new 側の authorized_keys の変更

new にて以下の作業を行う.

  new:~# cd /root/.ssh/
  new:~# cp authorized_keys authorized_keys.org

/root/.ssh/authorized_keys の編集を行い, 鍵の記述の前に書いてある,
"command" などの記述を消す. 結果的に,

  ssh-dss .............

から始まるようにすれば OK である. これで new からの任意のコマンドを
実行可能となる.

=== rsync のインストール

転送には rsync コマンドを用いる. old と new の両方に rsync が
インストールされている必要があるため, 以下のコマンドでインストールを
行うこと.

  # apt-get install rsync


=== rsync で転送されるファイルの確認

いきなり rsync コマンドを実行すると予期せぬ間違い (転送元と転送先の設
定を間違って, 転送先のファイルを全て消してしまう, など) が起こりうるた
め, まずは rsync コマンドに -n オプションをつけて実行する. -n オプショ
ンをつけて実行すると, 実際のファイルの転送は行わずに, 転送されるはずの
ファイルのリストが出力される.

ここでは一度ファイルリストを /tmp ディレクトリ以下に出力し, 確認してから
実際の転送を行うこととする.

  root@old:~# rsync -n -av --delete -e ssh /home/ new.epa.scitec.kobe-u.ac.jp:/home/ 2>&1 | tee /tmp/rsync_old2new.log

rsync に関するオプション (-av, --delete, -e 等) については,
((<rsync(1)|URL:http://www.infoscience.co.jp/technical/rsync/rsync.html>))
等を参照のこと. また, "/home" と "/home/" では転送内容が異なるため
注意せよ.

外部から接続した端末にあるファイルが転送されることのないようにするには -x というオプションも加えるとよい.

上記コマンドの動作が終了したら, /tmp/rsync_old2new.log を確認し,
転送される予定のファイルを確認する. 予期しないファイルが削除, 転送
されてしまう場合には, --exclude オプションを使用してそのファイルは
転送対象から除外すること.


=== rsync でファイルの転送

((<URL:#rsync で転送されるファイルの確認>)) で確認したコマンドから -n
オプションを除いたコマンドを実行する.

実行後, new 内の /home 以下にファイルが転送されていることを確認すること.

=== new 側の authorized_keys を元に戻す

new にて以下の作業を行う.

  new# cd /root/.ssh/
  new# mv authorized_keys.org authorized_keys

== HTTPS用サーバ証明書などのコピー

oldに既に作成されているHTTPS用のサーバ証明書などをnewへコピーする.
HTTPS用のサーバ証明書, 鍵などは,

/usr/local/apache2/conf/{ca.der,server.crt,server.key}

の3つのファイルである.

これを行わずにサーバ交換作業後にhttpsでnewにアクセスすると,
oldにアクセスしていたときに保存したサーバ証明書とは異なる,
newで新規に作成されたサーバ証明書を参照するため,
Webページを閲覧できなくなる(ことが多い. ブラウザの取扱いによるが).

= 入替え当日作業

入替え当日には以下の作業を行う.

* 入替えを開始する旨をユーザにメールで通知
* old のサービスを SSH 以外落す
* old の /home 領域のデータを new に転送
* "scitec.kobe-u.ac.jp" を管理する DNS サーバ (gradis) の
  "{epa,ahs,aoe,cps}.scitec.kobe-u.ac.jp" の権限委譲先を new に変更
* new の各サービスを上げる
* 入替え完了についてユーザにメールで通知

以下では, EPA サーバの old から new への移行の作業の
詳細を時系列順 (phase 0 -- 4) にまとめる.
phase 0 -- 4 内のそれぞれの項目は順不同.

入替え作業時間は 3 時間あたりをメドしておくと良い (経験的に).
(ただし, 大抵は何かかにかでトラぶって時間延びるため,
実際には 6 時間ぐらいになったりする).


== phase 0  (入替え前)

入れ替えを開始する (サービスを停止する) 30 分前には告知.

== phase 1  (入替え開始)

サービス停止前の下準備

* old と new 自身の DNS 設定 /etc/resolv.conf を以下のように
  書き換える. なお, 133.30.104.1 は scitec の DNS サーバ,
  133.30.8.2 は神戸大での DNS サーバである.

    search epa.scitec.kobe-u.ac.jp
    nameserver 133.30.104.1
    nameserver 133.30.8.2
    nameserver 133.30.109.22
    nameserver 133.30.109.21

oldのサービスを停止する.

* http (https), dns, tcpserver (smtp), inetd (pop3)
  * サービス停止作業
    * apache2, bind, qmail, tcpserver, openbsd-inetd に関して,
      以下のコマンドで, サービスを一時的に停止する.
      ただし, 再起動すると再びこれらのサービスも起動してしまうため,
      作業途中で再起動の必要性が出てしまった場合は注意.
      永続的にサービスを停止する作業は ((<phase 3>)) にて行う.

        # /etc/init.d/<service> stop

* old から new への /home/epalab などの領域の転送を止める.
  * /etc/cron.local/daily/230_rsync_epabk を削除

* ssh などでのログインユーザが居る場合, プロセスを削除

  * ps aux コマンドで確認後, そのようなプロセスがある場合に,
    kill <プロセスID> とする.

== phase 2

old から new へ各種データをコピー

  * /home ディレクトリを old から new へ rsync
    * 作業については ((<home 領域を old から new へ転送>)) を参照のこと.
    * ただし, この段階では既に DNS を停止しているため, 以下の点に注意
      * new にアクセスする際にホスト名ではなく IP アドレスで指定する.

    * 作業後には, old ⇒ new への転送は許可しないよう,
      /etc/ssh/sshd_config の PermitRootLogin を no とし,
      /root/.ssh/authorized_keys を /root/.ssh/authorized_keys.bk へ
      リネームする.

  * old の /var/spool/cron/crontabs 以下の各ファイルを new へコピー
    * scp コマンドで移す際には, パーミッションの設定を変えて
      しまわないように注意.

  * old の /etc/shadow のユーザ部分を new へコピー
    * old, newに別々の仮想端末でログインする.
      new の /etc/shadow を/etc/shadow~にバックアップ.
      old の /etc/shadow のユーザー部分 (UID が 1000 〜 29999 までのもの.
      UID とユーザ名の対応については /etc/passwd) を参照のこと.
      new の /etc/shadow にコピー.

  * old の /usr/local/qpopper/pop.auth を new へコピー
     old$ cd /usr/local/qpopper/
     old$ sudo cp pop.auth ~/
     old$ sudo chown noda:noda pop.auth
     old$ scp pop.auth new:
     old$ slogin new
     new$ cd /usr/local/qpopper
     new$ sudo mv pop.auth pop.auth~
     new$ sudo mv ~/pop.auth .
     new$ sudo chown mail:pop pop.auth
     new$ ls -l
     new$ rm pop.auth~
     new$ exit
     old$ rm pop.auth

== phase 3

old の設定変更

* bind

  * newのセカンダリに設定
  
      old$ cd /usr/local/bind/etc/
      old$ cp -r namedb/ namedb-20080825
      old$ cd namedb
      old$ vi named.conf

    zone "ahs.scitec.kobe-u.ac.jp"で始まる行以下を次のように変更.

      zone "ahs.scitec.kobe-u.ac.jp" {
              type slave;
              file "slave/ahs.zone";
              allow-query { any; };
              masters {
                     133.30.109.21;
              };
      };
      
      zone "epa.scitec.kobe-u.ac.jp" {
              type slave;
              file "slave/epa.zone";
              allow-query { any; };
              masters {
                     133.30.109.21;
              };
      };
      
      zone "0/25.109.30.133.in-addr.arpa" {
              type master;
              file "slave/ahs.rev";
              allow-query { any ; } ;
              allow-transfer {
                       133.30.104.1 ;
              } ;
      };

  * named-checkconf named.conf を実行してフォーマットをチェック.
  * 要らないファイルを消す.
     rm epa.zone ahs.zone epa.zone epa.zone.bk \
     PROTO.* named.root.old-20080521 *.BAK make-localhost
     rm -r work localhost-v6.rev
  * slave ディレクトリを作成, パーミッションを bind:bind にする.
     old$ cd /usr/local/bind/etc/namedb/
     old$ mkdir slave
     old$ chown bind:bind slave
  * 移行が終ったら起動
     /etc/rc.d/bind restart

* qmail

  * 外から来たメールを受け取らないように, and
    ログメールを飛ばすのに必要な設定だけにするため,
    /var/qmail/control 以下の locals, rcpthosts を以下のように
    変更する. 移行が終わったら起動する.

    * locals, rcpthosts (両方とも中身は同じ)

        localhost

* 再起動しても以下のサービスが立ち上がらないようにする.

  * http (https), pop3
    * apache2, openbsd-inetd に関して,
      以下のコマンドによって OS が起動する際に立ち上がらないように
      しておく.
      <service> には上記のサービス名を与える.

        # cd /etc/init.d
        # update-rc.d -f <service> remove
        # chmod 644 <service>

    * 余談だが, これら停止したサービスを再開する場合には,
      以下のようにするとよい.

        # cd /etc/init.d
        # update-rc.d <service> defaults
        # chmod 755 <service>

  * 確認作業
    * 再起動を行い, ps aux コマンドで停止したはずのサービスが
      立ち上がっていないことを確認する.


newの設定を変更

* ((<[EPA2008b]サーバと予備サーバでのバックアップの設定>))
  の作業を行う. ここでは epa が new, epabk が old に対応する.

* bind

  これまでのファイルをバックアップ.

     new$ cd /usr/local/bind/etc
     new$ cp -r namedb namedb-20080825
    
  要らないファイルを消す.
  
   new$ rm epa.zone.bk PROTO.* named.root.old-20080521 *.BAK make-localhost
   new$ rm -r work localhost-v6.rev
   new$ vi named.conf
  
  allow-transfer に新しいセカンダリである 133.30.109.22 (old) を追加.

    zone "ahs.scitec.kobe-u.ac.jp" {
            type master;
            file "ahs.zone";
            allow-query { any ; } ;
            allow-transfer {
                    133.30.109.22 ;
                    133.30.104.1 ;
                    133.3.8.211 ;
            } ;
    };
    
    zone "epa.scitec.kobe-u.ac.jp" {
            type master;
            file "epa.zone";
            allow-query { any ; } ;
            allow-transfer {
                    133.30.109.22 ;
                    133.30.104.1 ;
            } ;
    };
    
    zone "0/25.109.30.133.in-addr.arpa" {
            type master;
            file "ahs.rev";
            allow-query { any ; } ;
            allow-transfer {
                    133.30.109.22 ;
                    133.30.104.1 ;
            } ;
    };

  * ゾーンファイルの修正.    
    * ahs.rev,ahs.zone,epa.zoneのシリアルを更新.

  * epa.scitec.kobe-u.ac.jp が new を指すようになっていることを確認.
  
    終わったら再起動する.

      new$ /etc/rc.d/bind start

* qmail
  * /var/qmail/control 以下の locals, rcpthosts を以下のように
    変更する.

    * locals, rcpthosts (両方とも中身は同じ)

        localhost
        new.epa.scitec.kobe-u.ac.jp
        epa.scitec.kobe-u.ac.jp
        new.ahs.scitec.kobe-u.ac.jp
        ahs.scitec.kobe-u.ac.jp
        new.aoe.scitec.kobe-u.ac.jp
        aoe.scitec.kobe-u.ac.jp
        new.cps.scitec.kobe-u.ac.jp
        cps.scitec.kobe-u.ac.jp

* 以下のサービスが定常的に立ち上がるように設定する.
  * http (https), dns, tcpserver (smtp), inetd (pop3)


gradis の設定を変更

* gradisの指す{epa,cps,aoe}.scitec.kobe-u.ac.jpのネームサーバを
  old の IPアドレス(133.30.109.22) から
  newの IPアドレス(133.30.109.21) に変更.

    gradis$ cd /var/named/
    gradis$ cp scitec.zone scitec.zone.20080825
    gradis$ vi scitec.zone

    ;; for 133.30.109.22 doold
    ; ahs
    ahs.scitec.kobe-u.ac.jp.        300 IN  NS      old.epa.scitec.kobe-u.ac.jp.
    old.epa.scitec.kobe-u.ac.jp.    300 IN  A       133.30.109.22
    ahs.scitec.kobe-u.ac.jp.        300 IN  NS      gradis.scitec.kobe-u.ac.jp.
    ; epa
    epa.scitec.kobe-u.ac.jp.        300 IN  NS      ns.epa.scitec.kobe-u.ac.jp.
    ns.epa.scitec.kobe-u.ac.jp.     300 IN  A       133.30.109.22
    epa.scitec.kobe-u.ac.jp.        300 IN  NS      gradis.scitec.kobe-u.ac.jp.
    ; aoe
    aoe.scitec.kobe-u.ac.jp.        300 IN  A       133.30.109.22
    ; cps
    cps.scitec.kobe-u.ac.jp.        300 IN  A       133.30.109.22

  を,

    ;; for 133.30.109.22 doold
    ; ahs
    ahs.scitec.kobe-u.ac.jp.        300 IN  NS      new.epa.scitec.kobe-u.ac.jp.
    new.epa.scitec.kobe-u.ac.jp.   300 IN  A       133.30.109.21
    ahs.scitec.kobe-u.ac.jp.        300 IN  NS      gradis.scitec.kobe-u.ac.jp.
    ; epa
    epa.scitec.kobe-u.ac.jp.        300 IN  NS      ns.epa.scitec.kobe-u.ac.jp.
    ns.epa.scitec.kobe-u.ac.jp.     300 IN  A       133.30.109.21
    epa.scitec.kobe-u.ac.jp.        300 IN  NS      gradis.scitec.kobe-u.ac.jp.
    ; aoe
    aoe.scitec.kobe-u.ac.jp.        300 IN  A       133.30.109.21
    ; cps
    cps.scitec.kobe-u.ac.jp.        300 IN  A       133.30.109.21

  として, その下のMXレコード

    aoe.scitec.kobe-u.ac.jp.        300 IN  MX      10      old.epa.scitec.kobe-u.ac.jp.
    cps.scitec.kobe-u.ac.jp.        300 IN  MX      10      old.epa.scitec.kobe-u.ac.jp.

  を

    aoe.scitec.kobe-u.ac.jp.        300 IN  MX      10      new.epa.scitec.kobe-u.ac.jp.
    cps.scitec.kobe-u.ac.jp.        300 IN  MX      10      new.epa.scitec.kobe-u.ac.jp.

  とする. serial を更新する.
  /etc/named.conf をまずバックアップ
  
    gradis$ cd /etc/
    gradis$ sudo cp named.conf named.conf.20080825

  /etc/named.conf の {ahs,epa}.scitec.kobe-u.ac.jpの
  ゾーン情報にあるmastersの IP 133.30.109.22 を 21 に書き換える.

  終ったら再起動する.

    gradis$ sudo /etc/init.d/named restart

電脳サーバの設定を変更

  * /GFD_Dennou_Club/dc-arch/kobe/.ssh/known_hosts から,
    これまでの EPA サーバのホスト鍵を削除し, 再度アクセスして
    新 EPA サーバ (new) のホスト鍵を保存する.


== phase 4

移行の最終チェック

* new
  * http: 表示できるか, hikiに書き込めるか, gate による
    登録や変更は可能か
  * pop: メールをとってこれるか
  * smtp: メールを出せるか, 受け取れるか
  * mailing list: メールが配送されるか
  * dns: 問い合わせに応じるか, 正しいデータを返すか
    * dig epa.scitec.kobe-u.ac.jp で133.30.109.21を返すか

* old
  * http: 無効になっているか
  * pop: 無効になっているか
  * smtp: submitは有効にするが, 受け取らない設定になっているか
    * mail spool 内の再送待ちなどのメールを再送信するため, という
      意味もある.
  * dns: newのセカンダリとして設定されていることを確認する
    * dig epa.scitec.kobe-u.ac.jp で133.30.109.21を返すか
    * /usr/local/bind/etc/namedb/slave 以下にゾーンファイルが
      できているか
* 電脳サーバへのバックアップの確認
  * epa サーバの資源が電脳サーバへ正常にバックアップされているか.


== phase 5  (移行完了)

* 終了報告をユーザにメールする.
  * 障害報告はitpass@ 宛まで, とする.
  * ssh でアクセスする際のホスト鍵が変更されていることをアナウンスする.


= 翌日の作業

* old, new, gradis の DNS の TTL を元に戻す.

  old:
    変更なし.

  new:
    (1) /usr/local/bind/etc/namedb のバックアップとして
        /usr/local/bind/etc/namedb-2008???? (バックアップする日時) を作成.
    (2) /usr/local/bind/etc/namedb/{epa.zone,ahs.zone,ahs.rev}
        の$TTLを300から3600に変更. シリアル更新.
    (3) 再起動.

  gradis:
    (1) /var/named/scitec.zone のバックアップとして
        /var/named/scitec.zone.2008???? (バックアップする日時) を作成
    (2) /var/named/scitec.zoneに記載されているepa,ahs,aoe,cpsなどの
        レコードで指定しているTTL部分を削除(これでデフォルト値が
        使われる).
        シリアル更新.
    (3) おまけ.
        /etc/named.confのバックアップとして/etc/named.conf.2008????
        (バックアップする日時) を作成.
        /etc/named.confに書かれている 109.30.133.in-addr.arpa ゾーンの
        ファイル置場を /var/named/master/ahs/ahs.revから
        /var/named/master/epa/epa.rev に変更.
        実際の置場もそのように変更.
    (4) 再起動

= 後日の片付け

  * new のサーバ構築用のアカウント chikuwa*
    の削除. (ホームディレクトリも消し, /etc/sudoers からも消すこと)
    * userdel -r (アカウント名) でホームディレクトリも削除される
  * 移行作業に関連するログ作業を Hiki 上にまとめる.
  * ドキュメント本体も必要な部分には修正を行う.
  * 運用開始 1 週間後をめどに namedb のバックアップファイルを削除する.
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]