CentOS 6 から 7 に Update を計画するメモ

本記事は最終更新日より 1 年以上経過しております。
スポンサーリンク

 そろそろ CentOS 6 を入れて動かして居るサーバーに SSD でも導入しようかと思って、HDD からのまるまる環境移行を考えて居た矢先、そういえば CentOS 7 が以前にリリースされていたなと思い出し、どうせなら新しい物を試してみようかなと思い立った。
 現状動かして居る状態から conf をコピって動けば楽で良いんだけど、例えば同じ httpd であっても yum で install 出来る apache は CentOS 6 だと 2.2 で CentOS 7 だと 2.4 になり扱いも大分変わってくるから、移行させる為にも検証が結構必要だなと。
 まだ作業中だけどちょっと簡単に何をどうするかのメモを書いてみよう。

基本的な操作の違い

 大きな所では service コマンドでデーモンの起動やらしていたけど、CentOS 7 では systemd を利用する形になるので例えば httpd であれば

# systemctl start httpd.service

 なんてコマンドを打つ必要がある。start と記述する位置が真ん中なのがちょっと怠いのだが次のような記述も出来たので楽になることもある。

# systemctl restart httpd php-fpm

 apache 2.4 + PHP-FPM で動かすテストをしていた時にやって見たら出来たのがこれ。apache と php-fpm の両方を再起動する必要があったが、systemctl コマンドを 2 回打たなくともこれ一回で済むので楽が出来るなと。尚かつ “.service” を省略しても正常に動作してくれるプログラムもある。

インストールするパッケージの違い

 これもまた悩ましい問題だけど、便利でより扱いやすいのであれば歓迎な所。基本的に yum からパッケージを入れる運用としているので限定的な話しになる。ソースをコンパイルして導入すればどうとでもなる部分だけど、バージョン管理や依存関係を解消するのが非常に面倒でシステムが汚れやすいから個人的にはあまり好まない。

NTP サーバー

 サーバー OS をインストールして初期設定を終えた後、先ず最初に入れる事にしているのが NTPD。
 その名の通り今までなら ntpd が標準で入っていたから conf 弄って起動すれば良かったのだが、CentOS 7 ではそれがない。動作するプログラムその物が違うパッケージとなっており chrony と言う様だ。
 違うプログラムであっても設定ファイルの書式は非常に似ており、尚かつ簡潔であったため逆に楽出来た感じに終わった。
 次のコマンドにて同期状況を詳しく見ることが出来る。表示される記号の意味も出力されるので見やすい。以下の例は NICT と ISP と現在動かして居るホストを設定した物。

# chronyc sources -v
210 Number of sources = 4

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||                                                /   xxxx = adjusted offset,
||         Log2(Polling interval) -.             |    yyyy = measured offset,
||                                  \            |    zzzz = estimated error.
||                                   |           |
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? ntp-a3.nict.go.jp             0  10     0   10y     +0ns[   +0ns] +/-    0ns
^? ntp-a2.nict.go.jp             0  10     0   10y     +0ns[   +0ns] +/-    0ns
^+ orion.asahi-net.or.jp         2  10   377   514    +93us[ +109us] +/-   26ms
^* ******.bp7.org                2   8   377    28    -90us[  -59us] +/-   23ms

Web サーバー

 上にも書いたが Apache は 2.2 から 2.4 系になっている。Apache 2.4 とはなんぞやと調べると目玉は event MPM と言う並列にリクエストを処理していくモデルが正式にサポートされており標準とされている事だそうだ。yum でいれると prefork を使うように設定された conf になっていたが、折角なので event MPM で動かしたい。nginx ほどでないにしろ静的コンテンツを裁く速度も向上しているようだし。
 しかし、event MPM だと PHP の動作としてよくある mod_php はマルチスレッドで扱うことを非推奨としているので FastCGI を用いる必要がある。よって今回は PHP-FPM を利用して PHP を動かすことの出来る環境を作った。逆に PHP-FPM を用いる事で実効ユーザーを一般ユーザー権限による動作も可能にしつつ、OPcache を効かせることも出来る。今の環境であれば mod_php で動かしているホストには OPcache を効かせることが出来ているけど、suphp を用いてユーザー権限で動作させているホストには OPcache を効かせることが出来ないので PHP-FPM はかなり柔軟性のある動作モデルだと思った。ただ、PHP-FPM をデーモンとして待たせておく必要があるから、その分プロセスを食ってしまうから余りにユーザーが多いとそれはそれで問題が起きるかもしれない。
 一応 Nginx も視野に入れて動作テストを行ったが、Apache の .htaccess を捨てきれないので止めた。

PHP

 Web サーバー絡みで個人的に重要な所。Apache の動作モデルからして mod_php を使わないので php-fpm を用いて動作させる。
 httpd から “\.php$” にマッチするリクエストを php-fpm に投げて処理させる。

 例えば php-fpm の設定で

[USERNAME]
listen = /var/run/php-fpm/php-fpm_USERNAME.sock
listen.mode = 0666
user = USERNAME
group = USERGROUP
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

 等として UNIX Socket で Listen させているところへ httpd から

<FilesMatch \.php$>
  SetHandler "proxy:unix:/var/run/php-fpm/php-fpm_USERNAME.sock|fcgi://localhost"
</FilesMatch>

 とすることで PHP が実行される形になる。nginx そっくりな設定だ。
 この時、php-fpm の設定で user, group を httpd の実行している apache にすれば mod_php みたいな感じにも出来るし、別途一般ユーザーを指定すれば指定したユーザー権限で動作が出来るから mod_suphp も不要。尚かつ別途 “yum install php-pecl-zendopcache” とすれば Zend の OPcache をインストール出来て一度実行したコードをキャッシュ出来るので高速化も可能。
 最初の設定と動作の概念を理解するのが面倒だけど、その後は割りと良いことしか見つからないが怖いところ。デメリット的な物もまた調べておかないとだ。

Database

 MySQL を先ず入れたくなるんだけど、”yum search mysql” なんてしても見つからない。MySQL 互換の MariaDB に移行しているからだそうで素直に MariaDB を install する。触り心地は同じで、MySQL の DB を Dump して MariaDB に食わせても問題無かったからこれと言った心配も無い。

# rpm -qa | grep mariadb
mariadb-libs-5.5.41-2.el7_0.x86_64
mariadb-5.5.41-2.el7_0.x86_64
mariadb-devel-5.5.41-2.el7_0.x86_64
mariadb-server-5.5.41-2.el7_0.x86_64

Firewall

 CentOS 4, 5, 6 と iptables が標準だったけど、firewalld に変更された。コアは iptables なんだけども chain の管理方法とかが細かくカテゴリ分けされおり、ごちゃごちゃし易い記述の可読性を上げたような感じと思えた。
 しかし、設定をシェルスクリプト 1 発設定にしている関係上、また書き直すのが面倒なので systemctl disable firewalld した。
 以後は yum install iptables-services とすれば systemctl start iptables なんて感じに出来る様になる。その内、気が向いたら firewalld に移行できたら良いなぁとは思うけど面倒だ。
 一応 iptables の設定するシェルを書いておけば、どのホストへ持って行っても一発設定 & 起動だからかなり楽なんだよね……と。

DNS

 DNS に関しては bind 9.8 から 9.9 への違いなので設定まるまる scp で飛ばして問題無く動いたから良しとする。ただそれだけじゃなんだかなーだったから、折角なので chroot させるようにした。
 依存関係含めてこのくらい入った。

# rpm -qa | grep bind
bind-chroot-9.9.4-14.el7_0.1.x86_64
bind-license-9.9.4-14.el7_0.1.noarch
bind-9.9.4-14.el7_0.1.x86_64
bind-devel-9.9.4-14.el7_0.1.x86_64
bind-libs-9.9.4-14.el7_0.1.x86_64
bind-utils-9.9.4-14.el7_0.1.x86_64
bind-libs-lite-9.9.4-14.el7_0.1.x86_64

その他未検証項目

 Postfix 2.6 + Dovecot + MySQL で動かしている MTA 周りを Postfix 2.10 にする必要があるのでテストしなきゃいけない。
 特に Dovecot は設定が細切れに一杯あるから時間がかかりそうで後回しにしている状態。

おわりに

 こういう記事は全部終わってから書けばいいんだけど、どうにも途中で忘れそうになったから大筋だけ記録しておこうと言うことで書いてみた。
 別に CentOS 6 のまま使っていてもまだ問題は無いんだけど、やっぱ新しい物には興味が湧いてしまう。好きたい放題出来る自宅サーバーだしやる気のあるときの勢いも大事だなってな事で。

 検証全て終わったら余った Crucial C300 64GB を鼻毛鯖に載せて CentOS 7 をインストールし、テストした事をそのまま実行する形で速攻復旧出来る様に作業を進めようと思う。
 尚、動作検証を行っているのは FX-8350 マシンで動かしている Win8.1 上にて VMware Player 7 を用いた仮想環境としている。CPU を 4core 割り当ててメモリも 4GB 程使わせてあげると鼻毛鯖実機 (core i3-550 + 8GB) なみに快適な動作をしてくれている。

2015/02/14 追記

 Postfix と Dovecot に関しては DB 作って PostfixAdmin をインストール後、openDKIM と SPF 関連を止めた状態で設定を conf 上書きでなく、稼働ホスト側の conf と同じ様に入れ込んでいったら無事に同じ様な挙動をしたので検証は大体終わった。
 しかし、この Postfix, Dovecot, MySQL の三つ巴な設定が非常に怠くて面倒だから上の空でやった関係上、もう一度精査をしなくちゃいけない。面倒で仕方が無いんだけど動いた後が楽しいからまだ頑張れるorz
 ついでに Apache の VirtualHost でいくつか動かしたい物が増えたけど、委譲とかめんどいし内向きの DNS RR に

vmhoge		IN A		192.168.1.xxx
*.vmhoge	IN CNAME	vmhoge

 なんて様な物を追加して楽をした。
 全体をもう一度か二度位は見なおしをしたら本番環境のサーバーを半日位とめる予定で SSD に入れ替えだな。

スポンサーリンク