IT pass HikiWiki - [ITPASS2009]サーバ交換作業(DNS, gate) Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
{{toc}}
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]
= 前日作業
== home 領域を old から new へ転送
当日にも同様の作業を行うが, その際の時間を短縮するために行う.
=== 公開鍵認証の際のセキュリティ設定の変更 (通信許可)
まず new 側の old に対する通信許可の設定を行う.
最近の OpenSSH では, デフォルトでは root のログインを許可しないため, 設定を変更する. new の /etc/ssh/sshd_config で,
PermitRootLogin no
という部分を
PermitRootLogin yes
に変更する.
さらに, 任意のコマンドを実行出来るように,
PermitRootLogin forced-commands-only
という部分をコメントアウトする. その後,
new# /etc/init.d/ssh restart
として設定を反映すること. これにより, root のログインを許可することとなる.
=== rsync で転送されるファイルの確認
/root/.ssh/ の秘密鍵でログインするため, まず以下の作業を行う.
old$ sudo -s -H
old# cd /root
いきなり rsync コマンドを実行すると予期せぬ間違い (転送元と転送先の設定を間違って, 転送先のファイルを全て消してしまう等) が起こりうるため, まずは rsync コマンドに -n オプションをつけて実行する. -n オプションをつけて実行すると, 実際のファイルの転送は行わずに, 転送されるはずのファイルのリストが出力される.
* rsync する際, gate の home 領域や, new のみに存在する chikuwa* の home, aquota.user ファイルまで old に同期してしまわないよう オプション --exclude で除外する.
* 外部記憶装置にあるファイルが転送されることのないように -x というオプションを加える.
* ここでは一度ファイルリストを /tmp ディレクトリ以下に出力し, 確認してから実際の転送を行うこととする.
root@old:~# rsync -n -av --delete -e ssh --exclude chikuwa* -x \\
--exclude=aquota.user --exclude=gate /home/new-itpass.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/" では転送内容が異なるため注意せよ.
上記コマンドの動作が終了したら, /tmp/rsync_old2new.log を見て, 転送される予定のファイルを確認する. もしも予期しないファイルが削除, 転送されてしまう場合には, --exclude オプションを使用してそのファイルは転送対象から除外すること.
=== rsync でファイルの転送
((<URL:#rsync で転送されるファイルの確認>)) で確認したコマンドから -n オプションを除いたコマンドを実行する.
実行後, new 内の /home 以下にファイルが転送されていることを確認すること.
=== 公開鍵認証の際のセキュリティ設定を変更する (通信制限)
new 側の old に対する通信制限の設定を行う.
先ほど, old から new に rsync でファイルを転送するために, root のログインを許可したので, 設定を変更して元に戻す.
/etc/ssh/sshd_config の
PermitRootLogin yes
という部分を
PermitRootLogin no
に変更したのち,
old# /etc/init.d/ssh restart
として設定を反映することにより元に戻る.
= 入替え当日作業
== phase 0
=== new の DNS キャッシュの TTL を変更
TTL を入替え作業時間よりも十分に短い時間に変更する.
* localhost.rev, localhost.zone
$TTL 3600
を
$TTL 300
に変更する.
* 各ファイルの serial を 更新する.
== phase 1 (入替え開始)
サービス停止前の下準備
* new の DNS 設定 /etc/resolv.conf が以下のようになっていることを確認する.
nameserver 133.30.14.2
nameserver 133.30.14.3
nameserver 133.30.8.2
search scitec.kobe-u.ac.jp
上記では nameserver として神戸大・学術基盤センターの DNS サーバを指定している.
== phase 2
=== old から new へ各種データをコピー
* root のログインを許可するため, 設定を変更する.
new の /etc/ssh/sshd_config で,
PermitRootLogin no
という部分を
PermitRootLogin yes
に変更する.
さらに, 任意のコマンドを実行出来るように,
PermitRootLogin forced-commands-only
という部分をコメントアウトする. その後,
new# /etc/init.d/ssh restart
として設定を反映すること. これにより, root のログインを許可することとなる.
* /home ディレクトリを rsync する
* 作業については ((<URL:#home 領域を old から new へ転送>)) を参照.
* 作業後に,new 側の old に対する通信制限の設定を行う.
先ほど, old から new に rsync でファイルを転送するために,
root のログインを許可したので, 設定を変更して元に戻す. /etc/ssh/sshd_config の
PermitRootLogin yes
という部分を
PermitRootLogin no
に変更したのち,
old# /etc/init.d/ssh restart
として設定を反映することにより元に戻る.
* old の authorized_keys を編集
* new-itpass の公開鍵の行の冒頭に以下を加える.
command="rsync --server -vlogDtpr --delete . /home/",no-pty,
from="ika-itpass.scitec.kobe-u.ac.jp",no-port-forwarding,
no-X11-forwarding,no-agent-forwarding
* ファイル名を authorized_keys.bk に変更し, root ログインを完全に拒否するようにする.
=== ホスト名と IP アドレスの変更
old と new のホスト名と IP アドレスを入れ替える.
* ホスト名の変更
編集するファイル
* /etc/hostname
* /etc/hosts
* /etc/mailname
* /etc/gate/gate.conf
* /etc/exim4/update-exim4.conf.conf
* /usr/local/bind/etc/namedb/localhost.zone
* /usr/local/bind/etc/namedb/localhost.rev
# grep tako (または ika) /etc/*
等で古い名前が残っていないか検索しながら作業すること.
* IP アドレスの変更
/etc/hosts と /etc/network/interfaces 内の IP アドレスを入れ替える.
設定後
old --> 133.30.109.21
new --> 133.30.109.22
* ネットワークの再起動
設定の変更後, ネットワークを再起動する.
# /etc/init.d/networking restart
=== new 側の old に対する通信制限の設定
先ほど, old から new に rsync でファイルを転送するために, root のログインを許可したので, 設定を変更して元に戻す.
/etc/ssh/sshd_config の
PermitRootLogin yes
という部分を
PermitRootLogin no
に変更したのち,
new# /etc/init.d/ssh restart
として設定を反映することにより元に戻る.
== phase 3
* bind
* これまでのファイルをバックアップする.
new$ cd /usr/local/bind/etc
new$ cp -r namedb namedb-20091023
* サーバ起動時に bind が立ち上がるよう, 起動スクリプトを変更する.
# update-rc.d bind defaults
* サーバ交換作業が終わったら, reboot して bind が起動することを確認する
== phase 4
移行の最終チェック
* old と new でそれぞれ問い合わせに応じるか, 正しいデータを返すかをチェックする.
$ dig itpass.scitec.kobe-u.ac.jp
--> 133.30.109.22を返せば OK.
$ dig old-itpass.scitec.kobe-u.ac.jp
--> 133.30.109.21を返せば OK.
$ dig new-itpass.scitec.kobe-u.ac.jp
--> 133.30.109.22を返せば OK.
= 後日の作業
* 要らないファイルの削除
運用開始から 1 週間をめどに, 参考のために old からコピーしたファイル類を削除する
* new の DNS の TTL を元に戻す.
この項目は DNS 管理者の意向によっては行わなくてもよい.
* /usr/local/bind/etc/namedb のバックアップとして /usr/local/bind/etc/namedb-XXXXXXXX (バックアップする日付) を作成.
* /usr/local/bind/etc/namedb/{localhost.zone, localhost.rev} の$TTLを300から3600に変更. serial も更新.
* 再起動.
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]
= 前日作業
== home 領域を old から new へ転送
当日にも同様の作業を行うが, その際の時間を短縮するために行う.
=== 公開鍵認証の際のセキュリティ設定の変更 (通信許可)
まず new 側の old に対する通信許可の設定を行う.
最近の OpenSSH では, デフォルトでは root のログインを許可しないため, 設定を変更する. new の /etc/ssh/sshd_config で,
PermitRootLogin no
という部分を
PermitRootLogin yes
に変更する.
さらに, 任意のコマンドを実行出来るように,
PermitRootLogin forced-commands-only
という部分をコメントアウトする. その後,
new# /etc/init.d/ssh restart
として設定を反映すること. これにより, root のログインを許可することとなる.
=== rsync で転送されるファイルの確認
/root/.ssh/ の秘密鍵でログインするため, まず以下の作業を行う.
old$ sudo -s -H
old# cd /root
いきなり rsync コマンドを実行すると予期せぬ間違い (転送元と転送先の設定を間違って, 転送先のファイルを全て消してしまう等) が起こりうるため, まずは rsync コマンドに -n オプションをつけて実行する. -n オプションをつけて実行すると, 実際のファイルの転送は行わずに, 転送されるはずのファイルのリストが出力される.
* rsync する際, gate の home 領域や, new のみに存在する chikuwa* の home, aquota.user ファイルまで old に同期してしまわないよう オプション --exclude で除外する.
* 外部記憶装置にあるファイルが転送されることのないように -x というオプションを加える.
* ここでは一度ファイルリストを /tmp ディレクトリ以下に出力し, 確認してから実際の転送を行うこととする.
root@old:~# rsync -n -av --delete -e ssh --exclude chikuwa* -x \\
--exclude=aquota.user --exclude=gate /home/new-itpass.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/" では転送内容が異なるため注意せよ.
上記コマンドの動作が終了したら, /tmp/rsync_old2new.log を見て, 転送される予定のファイルを確認する. もしも予期しないファイルが削除, 転送されてしまう場合には, --exclude オプションを使用してそのファイルは転送対象から除外すること.
=== rsync でファイルの転送
((<URL:#rsync で転送されるファイルの確認>)) で確認したコマンドから -n オプションを除いたコマンドを実行する.
実行後, new 内の /home 以下にファイルが転送されていることを確認すること.
=== 公開鍵認証の際のセキュリティ設定を変更する (通信制限)
new 側の old に対する通信制限の設定を行う.
先ほど, old から new に rsync でファイルを転送するために, root のログインを許可したので, 設定を変更して元に戻す.
/etc/ssh/sshd_config の
PermitRootLogin yes
という部分を
PermitRootLogin no
に変更したのち,
old# /etc/init.d/ssh restart
として設定を反映することにより元に戻る.
= 入替え当日作業
== phase 0
=== new の DNS キャッシュの TTL を変更
TTL を入替え作業時間よりも十分に短い時間に変更する.
* localhost.rev, localhost.zone
$TTL 3600
を
$TTL 300
に変更する.
* 各ファイルの serial を 更新する.
== phase 1 (入替え開始)
サービス停止前の下準備
* new の DNS 設定 /etc/resolv.conf が以下のようになっていることを確認する.
nameserver 133.30.14.2
nameserver 133.30.14.3
nameserver 133.30.8.2
search scitec.kobe-u.ac.jp
上記では nameserver として神戸大・学術基盤センターの DNS サーバを指定している.
== phase 2
=== old から new へ各種データをコピー
* root のログインを許可するため, 設定を変更する.
new の /etc/ssh/sshd_config で,
PermitRootLogin no
という部分を
PermitRootLogin yes
に変更する.
さらに, 任意のコマンドを実行出来るように,
PermitRootLogin forced-commands-only
という部分をコメントアウトする. その後,
new# /etc/init.d/ssh restart
として設定を反映すること. これにより, root のログインを許可することとなる.
* /home ディレクトリを rsync する
* 作業については ((<URL:#home 領域を old から new へ転送>)) を参照.
* 作業後に,new 側の old に対する通信制限の設定を行う.
先ほど, old から new に rsync でファイルを転送するために,
root のログインを許可したので, 設定を変更して元に戻す. /etc/ssh/sshd_config の
PermitRootLogin yes
という部分を
PermitRootLogin no
に変更したのち,
old# /etc/init.d/ssh restart
として設定を反映することにより元に戻る.
* old の authorized_keys を編集
* new-itpass の公開鍵の行の冒頭に以下を加える.
command="rsync --server -vlogDtpr --delete . /home/",no-pty,
from="ika-itpass.scitec.kobe-u.ac.jp",no-port-forwarding,
no-X11-forwarding,no-agent-forwarding
* ファイル名を authorized_keys.bk に変更し, root ログインを完全に拒否するようにする.
=== ホスト名と IP アドレスの変更
old と new のホスト名と IP アドレスを入れ替える.
* ホスト名の変更
編集するファイル
* /etc/hostname
* /etc/hosts
* /etc/mailname
* /etc/gate/gate.conf
* /etc/exim4/update-exim4.conf.conf
* /usr/local/bind/etc/namedb/localhost.zone
* /usr/local/bind/etc/namedb/localhost.rev
# grep tako (または ika) /etc/*
等で古い名前が残っていないか検索しながら作業すること.
* IP アドレスの変更
/etc/hosts と /etc/network/interfaces 内の IP アドレスを入れ替える.
設定後
old --> 133.30.109.21
new --> 133.30.109.22
* ネットワークの再起動
設定の変更後, ネットワークを再起動する.
# /etc/init.d/networking restart
=== new 側の old に対する通信制限の設定
先ほど, old から new に rsync でファイルを転送するために, root のログインを許可したので, 設定を変更して元に戻す.
/etc/ssh/sshd_config の
PermitRootLogin yes
という部分を
PermitRootLogin no
に変更したのち,
new# /etc/init.d/ssh restart
として設定を反映することにより元に戻る.
== phase 3
* bind
* これまでのファイルをバックアップする.
new$ cd /usr/local/bind/etc
new$ cp -r namedb namedb-20091023
* サーバ起動時に bind が立ち上がるよう, 起動スクリプトを変更する.
# update-rc.d bind defaults
* サーバ交換作業が終わったら, reboot して bind が起動することを確認する
== phase 4
移行の最終チェック
* old と new でそれぞれ問い合わせに応じるか, 正しいデータを返すかをチェックする.
$ dig itpass.scitec.kobe-u.ac.jp
--> 133.30.109.22を返せば OK.
$ dig old-itpass.scitec.kobe-u.ac.jp
--> 133.30.109.21を返せば OK.
$ dig new-itpass.scitec.kobe-u.ac.jp
--> 133.30.109.22を返せば OK.
= 後日の作業
* 要らないファイルの削除
運用開始から 1 週間をめどに, 参考のために old からコピーしたファイル類を削除する
* new の DNS の TTL を元に戻す.
この項目は DNS 管理者の意向によっては行わなくてもよい.
* /usr/local/bind/etc/namedb のバックアップとして /usr/local/bind/etc/namedb-XXXXXXXX (バックアップする日付) を作成.
* /usr/local/bind/etc/namedb/{localhost.zone, localhost.rev} の$TTLを300から3600に変更. serial も更新.
* 再起動.
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]