Centos7からUbuntuServer16.04.2LTSにマシンごと引っ越しした記録

仮想サーバーやVPSなら簡単にまるっと引越しできるのでしょうが

実機サーバーでのOS違いのサーバー引っ越しという、聞くだけで禿げ上がりそうな作業行ってみました。

ubuntu16.04.2のコード・ネームはXenial Xerusです。

引っ越し要件

引っ越しするソフトウェアは

  • nginx
  • php7
  • hhvm
  • mariadb
  • monitorix
  • wp-cli
  • letsencrypt

です。

無線LANと有線LAN設定

http://dorapon2000.hatenablog.com/entry/2016/09/17/075920

 

注意事項

$ sudo wpa_supplicant -iwlp3s0b1 -c/etc/wpa_supplicant/wpa_supplicant.conf

で接続できない場合は

pairwise=TKIP # ユニキャスト用暗号化方式
group=TKIP # ブロードキャスト/マルチキャスト用の暗号化方式

にしてみたらいけたりする

$ sudo vi /etc/network/interfaces
---

auto lo
iface lo inet loopback

#無線LAN
auto wlp5s0
allow-hotplug wlp5s0
iface wlp5s0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant-starg.conf

#有線LAN
auto enp7s0
iface enp7s0 inet dhcp

有線LAN接続

  1. sudo vi /etc/network/interfaces
    で、↑の有線LANの設定
  2. ifdown enp7s0 && ifup enp7s0
    これで接続する。

無線LAN接続

  1. wpa_supplicant.confを↑の方法で作成
  2. ifdown wlp5s0 && ifup wlp5s0

で接続する。認証ファイルを作成してあることが有線との違い。

 

sshdの設定

https://www.server-world.info/query?os=Ubuntu_16.04&p=ssh

これができたらsshで接続してそっちから作業

ファイアーウォールの設定

firewall-cmdがCentOSですが、ubuntuはufwです。簡単

ufw allow https

こんな感じで開けていこう

PHP7インストール

https://www.howtoforge.com/tutorial/install-apache-with-php-and-mysql-on-ubuntu-16-04-lamp/

この辺を参考に

lampじゃなくて、lnmh(読めない(笑))で構成するので、あくまでPHPとMariaDBだけを参考に。

apt-cache search php7

apt-get -y install php7.0 libapache2-mod-php7.0

MariaDBインストール

apt-get -y install mariadb-server mariadb-client

Now we set a root password for MariaDB.

mysql_secure_installation

mysql -u root -p

quit;

MariaDB support in PHP

apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

Install the Opcache + APCu PHP cache to speed up PHP

apt-get -y install php7.0-opcache php-apcu

Nginxのインストール

初期aptだと少し古いのが入るので、レポジトリから取ってきます。

nginx=stable # use nginx=development for latest development version
add-apt-repository ppa:nginx/$nginx
apt-get update
apt-get install nginx

monitorixインストール

http://idroot.net/linux/install-monitorix-ubuntu-16-04/

ちょいと面倒くさいですね。apacheいるのかな?

HHVMインストール

Facebook社がメイン開発し、社内でも使われているHHVM。

現在オープンソース化され、開発も進んでいます。

個人的な使用感では、非力なPCほどPHP7よりも恩恵があり、是非にでも使用したいソフトウェアです。

公式にサポートしているのはubuntuだけであり、これがCentOSからubuntuserverに乗り換えた大きな動機です。

もちろんCentOSでも自身でコンパイルしてビルドすれば利用可能ですし、安定バージョンなら既にビルドされたバイナリが配布されています。

https://docs.hhvm.com/hhvm/installation/linux#ubuntu-16.10-yakkety

apt-get install software-properties-common

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"
sudo apt-get update
sudo apt-get install hhvm

WP-CLIインストール

http://wp-cli.org/ja/

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp

タブ補完機能

cd ~/

wget https://raw.githubusercontent.com/wp-cli/wp-cli/master/utils/wp-completion.bash

source ~/wp-completion.bash

 

ソフトウェアの各種設定

引っ越し作業、なので、CentOSから持ってきた設定ファイルを移植していく作業になります。

自動起動設定

必要なソフトウェアは集まったので、自動起動の設定をしていきます。

現在デフォルトの状態では、php-fpm7.0が起動しています。

systemctl disable php7.0-fpm

systemctl stop php7.0-fpm

systemctl start hhvm

systemctl enable hhvm

/homeと/etcと/usrをまるっとダウンロード

cd /

tar zcvf home.tar.gz /home

tar zcvf etc.tar.gz /etc

tar zcvf usr.tar.gz /usr

などでひとまとまりのファイルにし、FTPs等でダウンロードしておきます。

設定ファイルの精査

OSが違うので、まるっと上書きするわけにいきません。

/etc以下で必要な設定ファイル

必要な設定ファイル等を探していきます。

  • /etc
  • hosts
  • hhvm/
  • nginx/
  • letsencrypt/

mariadbだけ全然設定ファイル形式が違ったので移植しないことに。

旧サーバーでも軽いチューニング程度しかいじっていなかったはずなので大丈夫。

探しながら展開→上書きで移植できるようにディレクトリ構造をいじしつつ、設定ファイルをローカルでコピーしていきます。

ここはお好きな方法で。そのまま設定ファイルを編集してもええですし。

http://d.hatena.ne.jp/hachiilcane/20110330/1301501639

/etc/passwd, /etc/shadow, /etc/group, /etc/gshadow をコピーすればユーザアカウントパスワードをそのまま引き継げるようです。

ただし、これは同一OSの場合

大きくユーザー構成が違うため、必要なユーザーだけ各ファイルを参照しながら確認する。

nginx、hhvm、をwww-dataに割り当てられているか、割り当てられていないならユーザーを追記する。

nginxの動作確認

apache及び、nginxはCentOSとUbuntuで設定ファイルの構成が全く違うので要注意。

ただし、どちらの構成であろうと正しく設定されているのであれば当然動作する。

今回は、Ubuntuの中にCentOSでの設定ファイルをコピーしたので、共存はしていないが、同居している変な状態。

nginx.confでどの設定ファイルを読み込みに行っているのか、で大きく変わる。

 

vim /etc/nginx/nginx.conf

nginxのユーザー割当てはここで設定。

nginx -tで設定ファイル動作確認。現時点ではSSL関係は失敗するので、そこはスルーする。

動作確認したいなら/etc/nginx/conf.d/内に設定してあるSSL関係をすべて一時退避して確認する。

/homeはクローンしてok

/homeを覗いてみた所、環境依存な要素は一つもなかったので、そのままコピペします。

/usr配下も精査する

自分の場合はDiCEも入れていました。

手動でシコシコ入れ直します。

CentOSとは手順がちょっと違いました。

DiCEを構築する

先にhostsファイルを設定する

正しく自身のIPアドレスを認識できるようにしましょう。影響範囲はDiCEに限りません。

https://forums.ubuntulinux.jp/viewtopic.php?id=14835

なんとなくやってたので間違っていました。

DiCEのIPアドレス検出のテストでDiCEが落ちる場合はここを設定してみてね。

DiCEのインストール

http://qiita.com/toolate32/items/3fb008030ee4f2d3a2b6

wget http://www.hi-ho.ne.jp/yoshihiro_e/dice/diced01914.tar.gz
tar zxvf diced01914.tar.gz
rm -f diced01914.tar.gz
mv DiCE /usr/local/bin
sudo apt-get install lib32stdc++6 nkf -y
reboot

cd /usr/local/bin/DiCE/
./diced | nkf -uw

DiCEの設定

?
setup
2
http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip
IP検出には↑を入れる。
・・・
add
で実イベントを追加

DiCE自動起動の登録

CentOSとUbuntuではディレクトリ構成が違うので注意

http://jintaro.com/fedoracore5/fc5_dice.shtml#kidou

vim /etc/rc.local

に記述

/usr/local/bin/DiCE/diced -d -l
/usr/local/bin/DiCE/diced -s -l >> /usr/local/bin/DiCE/log/dice.log &

実行中のDiCEがやたら負荷が高い

前も遭遇したけど、忘れたなぁ。

http://enokis.dip.jp/2014/09/07/dice%E3%81%AEcpu%E4%BD%BF%E7%94%A8%E7%8E%87%E3%81%8C%E9%AB%98%E3%81%84%E4%BB%B6/

たぶん古い情報や、それをもとに書いた記事を参考しにして設定した人は、「/etc/rc.local」に↓のように追記しているはずです。

/usr/local/bin/DiCE/diced -d -l

 

その内容を↓に変えるだけ。

/usr/local/bin/DiCE/diced -s -l >> /usr/local/bin/DiCE/log/dice.log &

 

理屈としては、

・DiCEをデーモンとして起動していたところを、普通に前面で動くプロセスにするとCPU使用率が高くならない。

・OS起動時に「&」をつけてバックグラウンドで起動することで、常駐させる。

という感じ。

MariaDBのデータをまるっと引っ越し

http://qiita.com/diskshima/items/d80c74a1d85e44608db8

https://dev.mysql.com/doc/refman/5.6/ja/copying-databases.html

ダンプをファイルに保存して、そのファイルをターゲットマシンに転送し、そのファイルをそこのデータベースにロードすることもできます。たとえば、データベースをソースマシンの圧縮ファイルに次のようにダンプできます。

shell> mysqldump --quick db_name | gzip > db_name.gz

データベースのコンテンツを含んだファイルをターゲットマシンに転送し、そこで次のコマンドを実行します。

shell> mysqladmin create db_name
shell> gunzip < db_name.gz | mysql db_name

 

https://weblabo.oscasierra.net/mysql-mysqldump-01/

全てのデータベースをバックアップする方法

また、MySQL の全てのデータベースを dump バックアップするには、次のコマンドで行います。

$ mysqldump --single-transaction -u root -p -x --all-databases > 出力ファイル名

オプション -x は、全てのデータベースの全てのテーブルをロックするためのオプションです。 バックアップ中のデータの操作を禁止します。

例えば、DB ユーザー root で全てのデータベースを /tmp/mysqldump_all_database.dump というファイル名でバックアップしたい場合は、次のようになります。

$ mysqldump --single-transaction -u root -p -x --all-databases > /tmp/mysqldump_all_database.dump

全てのデータベースを復元する方法

全てのデータベースの dump ファイルを、データベースに復元する方法は次のコマンドでできます。

$ mysql -u ユーザー名 -p < dumpファイル名

例としては次のような感じです。

$ mysql -u root -p < /tmp/mysqldump_all_database.dump

今回はこの方法を取りたいと思います。

mysqldump –single-transaction -u root -p –all-databases | gzip > /tmp/mysqldump_all_database.gz

gzipでダンプ。引越し先に転送後、

gzip -d mysqldump_all_database.gz

で解凍

mysql -u root -p < /tmp/mysqldump_all_database

crontabの確認

SSLの自動更新などをcrontab -eで確認しておく。必要なら追記。

モニターを閉じるとサスペンドされるのを防止

http://qiita.com/tukiyo3/items/9db97f9ffea8a26b364b

/etc/systemd/logind.conf
- #HandleLidSwitch=suspend
+ HandleLidSwitch=ignore

設定反映

sudo systemctl restart systemd-logind

旧サーバーとのリプレイス作業

ここからは切り替える作業を行う

ルーター経由なので、各PCにそれぞれプライベートIPを割り当てる

例)旧サーバー192.168.0.10

新サーバー192.168.0.11

  1. 10に受けていた全てのポートを11に割り当ててみる。
  2. 動作確認する。うまく動けばそれで終了。うまくいかなければ10に戻して、11を修正する。
  3. これを繰り返す

うん、全然動かない。

sshで作業する端末から、

vim /etc/hosts

で新サーバーのドメインをプライベートIPに設定。

で、httpとhttpsでアクセス。

真っ白なページが表示される。

まずマシンが変わったので、dparamを生成、再設定する

openssl dhparam 2048 -out dhparam.pem
で生成し、ファイルへのpathを各種SSLを参照するconfigファイル群に書き込んでいく。

→いらんかもw

SSLは正しくファイルがコピー出来ていて、nginxでファイルへのpathが通っているなら大丈夫?かな・・・

nginx -t

で設定ファイルに間違いがないか、SSLでエラーが出ていないかを確認。

hhvmのログを見ながら一つずつ治していく…

tail -f /var/log/hhvm/erroe.log

Can’t connect to local MySQL server through socket

HHVMの設定がCENTOSのものになっていた。MySQLのソケットを読み込む場所が間違っていた。

http://www.hi-ho.ne.jp/tsumiki/book_sup2.html
hhvmのmysqlへのソケットの場所を修正

以上でほぼ終了。

  • letsencryptの動作確認や、
  • wp-cliの動作確認や、
  • DiCEの動作確認が残っている

けれど、運用中にでも対処できるのでここまで。

ベンチマークテスト

ab -n 10 -c 10 -B 127.0.0.1 https://ukisystem.com/

-B オプションはIPv6対応していない場合に使う。CentOSではいらなかったから戸惑った。

before

Requests per second: 43くらい [#/sec] (mean)

after

Server Software: nginx
Server Hostname: ukisystem.com
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256

Document Path: /
Document Length: 87326 bytes

Concurrency Level: 10
Time taken for tests: 0.049 seconds
Complete requests: 10
Failed requests: 0
Total transferred: 875890 bytes
HTML transferred: 873260 bytes
Requests per second: 202.34 [#/sec] (mean)
Time per request: 49.422 [ms] (mean)
Time per request: 4.942 [ms] (mean, across all concurrent requests)
Transfer rate: 17307.30 [Kbytes/sec] received

感想

  • CPU:1.2G→2.2G
  • メモリ容量:2GB→4GB
  • SSD:PATA66?→SATA150

と、全ての能力がほぼ倍になるPCへのリプレースだった。

性能的には倍になればいいなーと考えていたので約4倍になったのは嬉しい誤算。

まだまだ充分に以降完了してないから続けて頑張る。