昨日、さくらのVPS 4Gプランを契約しました。
となると、早速環境構築をしないといけないのですが、最近なんだかんだと環境構築しまくっているので食傷気味・・・。
ということで、手っ取り早く、いま最も良く出来ている環境を移行することにしました。
VPSは安いけど・・・
実は、Amazon EC2とか、さくらのクラウドといった、IaaS型のクラウドサービスであれば、このような環境移行の話は出てきません。
同じサーバ契約のまま、スペックだけを上げるということが出来るからです。
しかし、VPSの場合、スペックは契約時点で決まってしまうので、今回のようにサーバのスペックを上げようとすると、別のサーバを契約しないといけないんですね。そのため、今回のような環境構築・移行の手間がかかるわけです。
だったら、最初からクラウドを使えば・・・と思うのですが、そうも行きません。クラウドとVPSは値段が随分違います。
単純比較で、私が今回契約したVPS 4Gプランと同程度のスペックのサーバを、さくらのクラウドで使おうとすると、5倍くらいお金がかかるのです。(HDDは、さくらのクラウドでHDD 400GBだけという構成に出来ないので、近似値ということで。)
プラン | コア | メモリ | HDD容量 | 価格 | 合計 |
---|---|---|---|---|---|
さくらのVPS 4G HDD | 4コア | 4GB | 400GB | 4,094円 | 4,094円 |
さくらのクラウド | 4コア | 4GB | SSD 20GB | 8,532円 | 19,332円 |
追加500GB | 10,800円 |
いざ、移行!
移行の方法は、さくらインターネットの田中社長のブログで「さくらのVPSで上位プランに移行するための手順」として、紹介されています。
新サーバに旧サーバと同じOSをセットアップ
旧サーバはScientificLinux 6.5 x86_64(CentOSと同じRHELクローンです)なので、新サーバ側にもインストールします。
さくらのVPSでは、デフォルトでCentOS 6.5 x86_64になっていますが、カスタムOSインストールからインストールするOSを選択することが出来ます。
ここで、私は新サーバ側のLVMを暗号化する設定にしたのですが、旧サーバ側は暗号化しない設定だったので、後で問題を引き起こします・・・。
DNSのTTLを60にする
移行後に、即座に新サーバ側にアクセスが来るようにDNSの設定を変えておきます。
ただ、私がドメインを取得しているサービス(enom)では、TTLの設定が出来ないようなので、やりませんでした。
そのため、数日は新旧両方のサーバを起動させておく必要がありそうです。
rsyncのインストール
SceientificLinuxには最初からrsyncが入っていました。
ファイルのコピー
rsyncを使って旧サーバから新サーバにファイルをコピーします。
ここは、田中社長のブログと同じコマンドで・・・。
rsync -rtlzvogpHAX --delete --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e ssh / (新サーバのIPアドレス):/
新サーバの再起動
ファイルのコピーが終わったら、新サーバを再起動します。
でも、再起動出来なかったんですね。私は。さくらのVPSのコンソール表示を見ていると、kernel panicを起こしている!んー。
理由は、先に挙げたとおり旧サーバはLVMの暗号化をしない設定、新サーバはLVMの暗号化をする設定だからです。
いろいろ調べたところ、/etc/crypttabと/boot/grub/grub.confを設定すれば良さそう。
でも、サーバが起動しないのに、どうやってファイルを編集するのか?
ここで、VPSの管理画面からもう一度、OSカスタムインストールをやります。
かならずカスタムインストールです。普通に再インストールすると全自動で処理が進んで真新しい環境になるだけなので、意味がありません。
OSは既に新サーバに導入されているものと同じものにしましょう。
画面を進めていくと、こういう画面になるので、「HTML5モードで開く」をクリックして、VNC画面を開きます。
ここでInstall or upgrade…を選んではいけません。やっぱり、OSが再インストールされてしまうので。
Rescue installed systemを選択します。
画面を適当に進めていって、ここまで来たら、Continueです。これで、新サーバのLVM環境が、/mnt/sysimage配下にマウントされるので、ファイルが編集出来るようになります。(マウントする際、LVMのパスワードが聞かれるので、入力します。)
で、後続画面のメニューからShellを開いて、ファイルを編集します。
/mnt/sysimage/etc/crypttab
luks-(luksUUID) UUID=(luksUUID) none
luksUUIDは、下記のコマンドで取得できます。
cryptsetup luksUUID /dev/vda2
/mnt/sysimage/boot/grub/grub.conf
kernel /vmlinuz-2.6.32-431.20.3.el6.x86_64 ro root=/dev/mapper/vg_srv01-lv_root rd_NO_LUKS rd_LVM_LV=vg_srv01/lv_swap rd_NO_MD rd_LVM_LV=vg_srv01/lv_root crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 SYSFONT=latarcyrheb-sun16 rd_NO_DM rhgb quiet nomodeset clocksource=hpet console=tty0 console=ttyS0,115200n8r
この、「rd_NO_LUKS」という部分を削除します。
あとは、再起動すればコンソールでパスワードを聞かれて、普通に起動できるようになるでしょう。
旧サーバのデーモンの停止
service https stop・・・
とかで、起動しているデーモンをバシバシ停止させます。
ファイルの再コピー
もう一度、旧サーバから新サーバにファイルをコピーするのですが、ここで先と同じ轍を踏んではいけません。crypttab.confとgrub.confはコピーしないようにします。
rsync -rtlzvogpHAX --delete --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --exclude crypttab --exclude grub.conf --block-size=4096 -e ssh / (新サーバのIPアドレス):/
まぁ、最初のコピー時からこのコマンドでやれば良かったような・・・。
あと、SSHポートを変えていた場合、この時点でデフォルトポートではSSH接続出来なくなっているはずなので、-e ssh
を、-e "ssh -p 10022"
とかに変えます。
/var/runにディレクトリを作る
rsyncでのコピー時、/var/run
は対象外にしているので、ApacheやMySQLで必要なディレクトリが出来ません。そのため、起動に失敗するはずです。
mkdir /var/run/httpd
chown root:apache /var/run/httpd
mkdir /var/rub/mysqld
chown mysql:mysql /var/run/mysqld
これで大丈夫なはず。
DNSのAレコードを新サーバに振り向ける
これで移行完了なので、DNSのAレコードを新サーバに振り向けます。TTLの変更を行っている場合は、元に戻しておきます。
まとめ
LVMの暗号化のあたりで手こずってしまいましたが、無事、4Gプランへの移行が完了しました。
おそらく、この記事が公開される頃には新サーバ側からレスポンスされていることでしょう。
高性能サーバで快適なINOCCU VISIONを、よろしくお願いします!