さくらの VPS でサーバーを移行してみた


さくらの VPS の SSD プランが初期費用無料キャンペーンやってる!これは乗換え時では?ということでサーバーを移行してみました。OSは CentOS 6.7 を使用しています。

以下のサイトを参考にさせていただきました。

さくらのVPSで上位プランに移行するための手順 – さくらインターネット創業日記
http://tanaka.sakura.ad.jp/2011/03/sakura-vps-upgrade.html

さくらVPS の契約を追加して rsync でまるっと移行してみた – HAM MEDIA MEMO
http://h2ham.net/vps-rsync

rsync でまるっと移行してみたと思ったらまるっと移行できていなかったので対応を加えた(特定のコマンドだけtty無しのsudoを許可する方法) – HAM MEDIA MEMO
http://h2ham.net/vps-rsync-2nd

おおまかな流れ

  1. DNS の TTL を 60 に
  2. 旧鯖と新鯖のOSバージョンを合わせる
  3. 旧鯖でrsyncコマンドを打つ(要 root)
  4. 待機
  5. 再起動
  6. httpd、 mysql、 screen のエラー解消
  7. サービスの停止
  8. 再度 rsync
  9. 再起動
  10. DNS レコード変更(IP アドレスと TTL)
  11. 旧鯖停止

最近はサーバーのことを鯖と言うのだろうか・・・

DNS の TTL を 60 に

ドメインの DNS レコードの変更をできるだけ早く浸透させるため、キャッシュの期間を事前に 60 秒に設定しておきます。だいたい 3600 に設定してあることが多いと思うので、サーバーの移行が完了したころには TTL 60 が浸透しているでしょう。

旧鯖と新鯖の Linux のバージョンを合わせる

旧鯖のインストール時に使用したディスクがあればそれを利用した方がよいのでしょうが、私は新鯖と旧鯖で yum update を実行し最新にそろえました。これをやらないと、後々 Kernel Panic になります。なりました。

旧鯖で rsync を打つ

旧鯖と新鯖に rsync がインストールされていることを確認してください。私の環境では最初から入っていました。

私はコピー元、コピー先のどちらで rsync を打てばいいのか分からないくらいの rsync 初心者です。今回は旧鯖で以下のコマンドを打てばよいらしいです。***.***.***.*** は新サーバーの IP に置き換えてください。コマンドを実行すると、新鯖の root のパスワードを聞かれます。

※ コマンドを打つ前に旧鯖から新鯖へ ssh でアクセスできるように設定する必要があります。PasswordAuthentication が no になっている場合は鍵の設定をしましょう。PermitRootLogin が no になっている場合は、後で出てくるコマンドを使用してください。

rsync -rtlzvogpHAX --delete --exclude /boot/ --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e ssh / ***.***.***.***:/

待機

まちましょう

さくらのVPS のお試し期間中はネットワーク帯域が制限されるので、本登録してから行うとよいです。

再起動

rsync が終了したら新鯖を再起動します。緊張の一瞬です。私は2回トラブりました。

httpd、 mysql、 screen のエラー解消

なんとか起動すると彼らがエラーをはいていました。rsync で除外した /var/run 配下のディレクトリが不足しているようです。私の環境では以下のコマンドで治りました。旧鯖と比較しながら足りないディレクトリを探し、パーミッションやパスは適切に変更してください。終わったら再起動して各サービスが正しく動作するか確認しましょう。

httpd の場合

mkdir /var/run/httpd/
chmod 710 /var/run/httpd/
chown -R root:apache /var/run/httpd/

mysql の場合

mkdir /var/run/mysqld
chmod 755 /var/run/mysqld/
chown -R mysql:mysql /var/run/mysqld/

screen

mkdir /var/run/screen/
chmod 775 /var/run/screen/
chown -R root:screen /var/run/screen/

サービスの停止

旧鯖のサービスを停止します。httpd、postfix、minecraft 等全てです。サーバーのファイルが書き変わらないようにしましょう。ここからは外部からはサーバーが停止しているように見えます。

再度 rsync

旧鯖から新鯖へもう一度 rsync します。最初の rsync で旧鯖の設定が新鯖へ受け継がれているので、私の環境では ssh の root でログインができなくなりました。ssh のポート番号も変わっています。ですのでコマンドを一部変更しました。[username] は sudo をパスワードなしで使用できるユーザー、[port] は新鯖の ssh のポート番号です。

rsync -rtlzvogpHAX --rsync-path="sudo /usr/bin/rsync" --delete --exclude /boot/ --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e "ssh -l [username] -p [port]" / ***.***.***.***:/

再度再起動

新鯖を再起動し、各サービスが正常に動作しているか試験します。クライアントの hosts を設定して、ホスト名を使用し試験するのが最良でしょう。

DNS レコードを変更

DNS レコードを変更し、旧鯖から新鯖へ IP アドレスを変更します。同時に TTL を元の数字へ戻します。その後、各 DNS サーバーに新しい設定が浸透するまでしばし待ちます。

旧鯖停止

ドメインを使用して新鯖へアクセスできたら、移行は完了です。新鯖の逆引き DNS も設定しておきましょう。旧鯖さん、今までありがとうございました。