先日(といっても結構日が経ってしまいましたが)、さくらVPS に「絶対お得な新プラン」が登場しましたね。
開始当初は申し込みが殺到し、一次申込み停止になりましたが現在は安定しているようです。
というわけで、旧プラン の 「さくらのVPS 512」を、同じ金額でグレードアップした「さくらのVPS 1G」に移行してみました。
新プランでは CentOS 6 がインストールされています。新OSも気になりますが、ひとまずココは旧プランの CentOS 5 の環境をそのまま移行することにしました。
作業の流れ
作業の流れは大体下記のような感じになります。
- DNS の TTL を変更
- OS再インストール
- データ転送
- 調整
- 動作確認
- 再データ転送
- DNS の A レコード を変更
- 後始末
前提条件・事前準備
ここで紹介する方法は、まるごと移行してしまう方法ですので、下記の前提条件と、事前準備を実施します。
前提条件
- 両サーバとも同じOS及びバージョンで行うこと(ここでは CentOS 5)
事前準備 作業時間:15分程度
DNS の TTL を変更
サーバ切り替えが即座に反映されるようにするため、DNS の TTL を短め(60など)に設定しておきます。
この DNS の設定変更タイミングは、現在設定されている TTL を目安に考えます。
例えば、現在の TTL が 3600 だとすると、3600秒前(1時間前)までに DNS の変更をしておくのが望ましいです。
OS再インストール
両サーバとも同じOS及びバージョンで行うことが条件なので、まずは VPS コントロールパネル から OS再インストール を実施します。
カスタムOSインストール から、 CentOS 5 x86_64 を選択して OS 再インストールを実行します。
カスタムOSインストール は、ブラウザの Java アプレット上から手動で実施します。公式サポートマニュアルを参考に進めてください。
なお、カスタムOSインストール実行中に表示される、ホスト名やIPアドレスなどが記載された画面は、後ほどまで確認するので閉じないようにします。念のためメモ帳などにコピペしておくのがいいです。
カスタムOSインストールガイド|さくらのVPS|さくらインターネット公式サポートサイト
再インストールが完了したら、VPS ホームよりサーバを起動しておきます。
移行作業
データ転送 作業時間:約1G の転送で30分程度
サーバの再インストールが完了したら、いよいよデータの移行です。
データの移行は、旧サーバ の root ユーザから下記のコマンドで一括転送します。
[new_server_ip] は新サーバの IP アドレスに置き換えてください
# rsync -rtlzvogpHAX --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 / new_server_ip:/
コマンドの意味やオプションなどについては、下記を参考にしてください。
- オプション
- 動作内容
- -r
- ディレクトリ内容を再帰的にコピーします
- -t
- 更新日時を保持します
- -l
- ソフトリンクを保持します
- -z
- 転送時に圧縮します
- -v
- 処理状況を表示します
- -o
- 所有者を保持します
- -g
- グループを保持します
- -p
- パーミッションを保持します
- -H
- ハードリンクを保持します
- -A
- ACLを保持します
- -X
- 拡張パーミッションを保持します
- --exclude
- 除外するファイルの名前を指定します
- --block-size=
- チェックサムをとる際のブロックサイズを指定します
- -e ssh
- ssh経由でコピーします
転送が完了したら、VPS コントロールパネルよりサーバを再起動します。
新サーバのネットワーク設定 作業時間:5分程度
GATEWAY の追記
再起動後、SSH で接続できない場合は、VPS コントロールパネルの リモートコンソール から下記のようにネットワークの設定を修正します。
GATEWAY の設定を追記します。
[GATEWAY=***.***.***.***] は新サーバの ゲートウェイ アドレスに置き換えてください
/etc/sysconfig/network-scripts/ifcfg-eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=static
DHCPCLASS=
HWADDR=**:**:**:**:**:**
IPADDR=***.***.***.***
NETMASK=255.255.254.0
ONBOOT=yes
GATEWAY=***.***.***.***
# /etc/init.d/network restart
SSH の許可
旧サーバの SSH の設定は、外部からの接続は 鍵認証のみ root ログイン不可 になっているので、一時的にこれを変更します。
/etc/ssh/sshd_config
#vi /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
/etc/hosts.allow
/etc/hosts.allow, deny で接続制限をしている場合は、こちらも旧サーバを許可する。
/etc/hosts.allow
# vi /etc/hosts.allow
sshd: 旧サーバのIPアドレス
IP アドレスに依存する設定の修正 作業時間:それぞれ
ネットワークの設定が完了したら、IP アドレスに依存する設定などを修正していきます。
旧サーバのユーザ情報などそのまま移行しているので、SSH クライアント の設定も IP アドレスの変更だけで OK でした。
- NameVirtualHost での Apache 設定
- MySQL の pid 置場
バックアップ無し
$ sudo find /etc/httpd/conf.d -type f -name '*.conf' | xargs sudo perl -i -pe 's/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g'
$ sudo find /var/www/vhosts -type f -name '*.conf' | xargs sudo perl -i -pe 's/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g'
バックアップをとっておく場合(*.bak というバックアップファイルが作成されます)
$ sudo find /etc/httpd/conf.d -type f -name '*.conf' | xargs sudo perl -i.bak -pe 's/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g'
$ sudo find /var/www/vhosts -type f -name '*.conf' | xargs sudo perl -i.bak -pe 's/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g'
/var/run 以下は転送から除外しているので、/var/rub/mysqld を作成しておく
$ sudo mkdir /var/run/mysqld
$ sudo chgrp mysql /var/run/mysqld/
$ sudo chmod g+w /var/run/mysqld/
$ sudo /etc/rc.d/init.d/mysqld start
動作確認
ここまでで既に殆どの環境が移行できているはずなので、自分のマシンの hosts を設定して動作を確認してみます。
なお、 hosts ファイルは管理者権限で起動したメモ帳などで編集します。
スタートメニュー > 全てのプログラム > アクセサリ > メモ帳 から右クリックで管理者として実行。その後メニューの開くからファイルを開きます。
C:\Windows\System32\drivers\etc\hosts
新サーバIPアドレス ドメイン名
xxx.xxx.xxx.xxx www.test.com
再度データ転送
確認作業をしている間などの差分ファイルを転送します。
転送中にファイルが変更されないように、旧サーバの主要なサービスは予め停止しておきます。
サービスを停止している間は、外部からの閲覧もダウンしている状態になります。
コマンドは最初の転送と同じですが、旧サーバで SSH のポートを変更している場合はポートの指定を入れます。
# /etc/init.d/httpd stop
# /etc/init.d/mysqld stop
# rsync -rtlzvogpHAX --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 / new_server_ip:/
ポートを指定する場合
# rsync -rtlzvogpHAX --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 -p 10022" / new_server_ip:/
IP アドレスに依存する設定の修正
転送で修正ファイルが上書きされてますので、上記の設定を再度実施します。
DNS の A レコードを変更
いよいよです。
DNS の A レコードを変更することで、外部からの接続が新サーバに振られることになります。
各ネームサービスの指示に従って変更してください。
TTL の設定を変更した場合は、ついでに戻しておきましょう。
移行後
SSH の設定などを元に戻す
SSH の設定など、一時的に許可した設定を元に戻すのを忘れずに。
お疲れ様でした!
これで無事に移行が終わったかと思います。お疲れ様でした。
さくらのVPS 新プラン乗り換え優遇施策 は、2012年5月20日(日)までなので、まだ申し込みしていない方はお早めに!
参考サイト: