さくらのVPSで上位プランに環境を移行する(LVM非暗号化環境からLVM暗号化環境に移行する)

昨日、さくらの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カスタムインストールをやります。

Vps cp install01

かならずカスタムインストールです。普通に再インストールすると全自動で処理が進んで真新しい環境になるだけなので、意味がありません。

Vps cp install02

OSは既に新サーバに導入されているものと同じものにしましょう。

Vps cp install03

画面を進めていくと、こういう画面になるので、「HTML5モードで開く」をクリックして、VNC画面を開きます。

Vps cp install04

ここでInstall or upgrade…を選んではいけません。やっぱり、OSが再インストールされてしまうので。
Rescue installed systemを選択します。

Vps cp install05

画面を適当に進めていって、ここまで来たら、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を、よろしくお願いします!

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。2018年、株式会社ビビンコを北九州市に創業。IoTソリューションの開発・導入や、画像認識モデルを活用したアプリの開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。