2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WebサーバーをCentOS 7からRHEL 9に移行した話

Last updated at Posted at 2024-02-27

CentOS 7のサポートが2024年6月30日までとなったので、移行先のOSとしてRed Hat Enterprise Linux 9(RHEL 9)を選びました。備忘録として残します。

環境はGoogle Cloud Platform(GCP)のCompute Engine上で動いているWeb-DBサーバーです。

現在の構成

ロードバランサの後ろに本番Web-DBサーバーが1台と、メンテサーバーが1台あります。メンテナンス時はメンテサーバーのインスタンスを起動してロードバランサの振り分けをメンテサーバーに向けます。

今回は本番Web-DBサーバーをCentOS 7からRHEL 9に移行します。

ミドルウェア

主なミドルウェアはApache, PHP, Python, MariaDBです。あとは画像系でImageMagick, OpenCVなどを使います。

ミドルウェアはdnfでインストールするので、RHEL 9がサポートしているバージョンをインストールします。

移行前 CentOS 7 移行後 RHEL 9
PHP 5.4.16 8.0.30
MariaDB 5.5.68 10.5.22
ImageMagick 6.9.10 6.9.12
Python 2.7.5 3.9.18
Apache 2.4.6 2.4.57

PHPのバージョンがかなり上がるので、ちゃんと動くか心配でした:dizzy_face:

なぜRHEL 9か

アプリケーション開発に集中したいので、あまりサーバー移行はやりたくありません。コンバートツールを使ってRHEL 7に移行して延長サポートを受ける手もありますが、PHPなどのミドルウェアも古くなってきたので、思い切ってRHEL 9に移行することに決めました。

あと、GCPならRed Hatと個別でライセンス契約しなくても、従量課金制で導入することができます。

ざっくりスケジュール

  1. Dockerの開発環境で動作確認
  2. GCPのステージング環境で動作確認
  3. 新しいWebサーバーに切り替え

開発環境はDockerを使います。ステージングはGCPの環境を使います。本番はロードバランサの振り分けを切り替えて新しいWebサーバーにリクエストがいくようにします。

稼働中のサービスなので無停止で本番切り替えします。

開発環境構築

開発環境はDockerを使います。Red Hatが提供しているQuay.ioというサイトからCentOS Stream 9のコンテナイメージをダウンロードします。

docker pull quay.io/centos/centos:stream9

タイムゾーンを設定して必要なミドルウェアをダウンロードしていきます。

timedatectl set-timezone Asia/Tokyo

dnf -y install httpd
dnf -y install php
: その他諸々

httpd.confやphp.iniなどの設定ファイルを編集して、ソースコードを設置して、あとはひたすら動作確認です。

PHP5からPHP8で動かなかったところ

フレームワークを使わず素のPHPプログラムなのですが、そこまで修正する箇所はありませんでした。決済で使っているStripeのライブラリのバージョンをアップデートする必要があったのと、WebAPIにファイルをPOSTするときのcURLの挙動をちょっと修正しました。

Python2からPython3で動かなかったところ

Pythonのプログラムは少しだけなので、修正箇所はprint文に括弧が必要になったことだけでした。あと、コマンドの実行方法がpythonからpython3に変更になりました。

ステージング環境構築

ステージングはGCPのロードバランサの後ろに新しくRHEL 9のインスタンスを作成します。ロードバランサはホスト名でサーバーを振り分けます。例えば本番は(www.example.com)ステージングは(staging.example.com)でページを見れるようにします。

あとはひたすら動作確認をします。

Webの本番切り替え

ステージングの動作確認が終わったらステージングを本番Webサーバーに昇格させます。

本番Web-DBをそっくり移行しようかと思ったのですが、DBのデータを移してトラブルがあったときの切り戻しが面倒なので、本番Web-DBサーバーをひとまず本番DBサーバーとして動かすことにしました。

図があれですが、本番Webサーバーが本番DBサーバーのデータを見にいきます。Webからのリクエストは本番Webサーバーが応答します。

DBの移行

Webの本番切り替えが問題なさそうなので、落ち着いたら本番DBサーバーのデータを移行して完了です。

最後に

CentOS 7のインスタンスを作成したのが2018年7月なので、サービスを続けていくと時々こういう作業をやらないといけません。なんだかんだで結構時間かかりました。やり始めたら楽しい作業でもあるんですけどね:clap:

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?