今日は、企業の実際の本番環境でよく遭遇する、Nginx を新しいバージョンにアップグレードし、古いバージョンにロールバックする方法についてお話しします。 1. 環境の紹介 本日準備された 2 つの nginx バージョンは次のとおりです。 [root@nginx ~]# cd /download/nginx/ [root@nginx nginx]# ll 合計 1952 -rw-r--r-- 1 ルート ルート 981687 2017年10月17日 nginx-1.12.2.tar.gz -rw-r--r-- 1 ルート ルート 1015384 12月4日 09:58 nginx-1.14.2.tar.gz 2. 古いバージョンと新しいバージョンをコンパイルしてインストールする nginx-1.12.2をコンパイルしてインストールする [root@nginx nginx]# tar zxf nginx-1.12.2.tar.gz [root@nginx nginx]# cd nginx-1.12.2 [root@nginx nginx-1.12.2]# ./configure --prefix=/usr/local/nginx-1.12.2 [root@nginx nginx-1.12.2]# echo $? 0 [root@nginx nginx-1.12.2]# make && make install [root@nginx nginx-1.12.2]# echo $? 0 [root@nginx nginx-1.12.2]# ll /usr/local/nginx-1.12.2/ 合計 0 drwxr-xr-x 2 ルート ルート 333 3月1日 09:01 conf drwxr-xr-x 2 ルート ルート 40 3月 1 09:01 html drwxr-xr-x 2 ルート ルート 6 3月 1 09:01 ログ drwxr-xr-x 2 ルート ルート 19 3月 1 09:01 sbin nginx-1.14.2をコンパイルしてインストールする [root@nginx ~]# cd /download/nginx/ [root@nginx nginx]# tar zxf nginx-1.14.2.tar.gz [root@nginx nginx]# cd nginx-1.14.2 [root@nginx nginx-1.14.2]# ./configure --prefix=/usr/local/nginx-1.14.2 [root@nginx nginx-1.14.2]# echo $? 0 [root@nginx nginx-1.14.2]# make && make install [root@nginx nginx-1.14.2]# echo $? 0 [root@nginx nginx-1.14.2]# ls -l /usr/local/nginx-1.14.2/ 合計 0 drwxr-xr-x 2 ルート ルート 333 3月 1 09:03 conf drwxr-xr-x 2 ルート ルート 40 3月 1 09:03 html drwxr-xr-x 2 ルート ルート 6 3月 1 09:03 ログ drwxr-xr-x 2 ルート ルート 19 3月 1 09:03 sbin この時点で、 nginx ソフトウェアの 2 つのバージョンが展開されています。 3. 古いバージョンのnginxを起動する [root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -t nginx: 設定ファイル /usr/local/nginx-1.12.2/conf/nginx.conf の構文は正常です nginx: 設定ファイル /usr/local/nginx-1.12.2/conf/nginx.conf のテストが成功しました [root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx [root@nginx ~]# ps -ef|grep nginx root 6324 1 0 09:06 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx-1.12.2/sbin/nginx 誰も 6325 6324 0 09:06 ? 00:00:00 nginx: ワーカープロセス ルート 6327 1244 0 09:06 pts/0 00:00:00 grep --color=auto nginx [root@nginx ~]# lsof -i :80 コマンド PID ユーザー FD タイプ デバイス サイズ/オフ ノード名 nginx 6324 ルート 6u IPv4 26324 0t0 TCP *:http (LISTEN) nginx 6325 誰も 6u IPv4 26324 0t0 TCP *:http (LISTEN) 4. 最新バージョンにアップグレードする バージョン アップグレードは、実際にはバイナリ ファイルのアップグレードです。プロセスは次のとおりです。 [root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -v nginx バージョン: nginx/1.12.2 [root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/ [root@nginx sbin]# mv nginx nginx-1.12.2 #まず、元の古いバージョンのnginxバイナリファイル[root@nginx sbin]をバックアップします# cp /usr/local/nginx-1.14.2/sbin/nginx ./ #バイナリファイルの新しいバージョンを現在のディレクトリにコピーします 次に、スムーズなアップグレード操作を実行します [root@nginx ~]# ps -ef|grep nginx root 6324 1 0 09:06 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx-1.12.2/sbin/nginx 誰も 6325 6324 0 09:06 ? 00:00:00 nginx: ワーカープロセス ルート 6338 1244 0 09:11 pts/0 00:00:00 grep --color=auto nginx [root@nginx ~]# kill -USR2 6324 [root@nginx ~]# ps -ef|grep nginx root 6324 1 0 09:06 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx-1.12.2/sbin/nginx 誰も 6325 6324 0 09:06 ? 00:00:00 nginx: ワーカープロセス root 6340 6324 0 09:12 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx-1.12.2/sbin/nginx 誰も 6341 6340 0 09:12 ? 00:00:00 nginx: ワーカープロセス ルート 6343 1244 0 09:12 pts/0 00:00:00 grep --color=auto nginx この時点で、新しいマスター プロセスは正常に開始されていますが、古いワーカー プロセスはまだ存在しているため、次のコマンドを使用して、古いワーカー プロセスにスムーズに停止するように通知します。 [root@nginx ~]# kill -WINCH 6324 [root@nginx ~]# ps -ef|grep nginx root 6324 1 0 09:06 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx-1.12.2/sbin/nginx root 6340 6324 0 09:12 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx-1.12.2/sbin/nginx 誰も 6341 6340 0 09:12 ? 00:00:00 nginx: ワーカープロセス ルート 6346 1244 0 09:14 pts/0 00:00:00 grep --color=auto nginx この時点で、古いワーカー プロセスは停止しています。次に、正常にアクセスできるかどうかをテストします。 正常にアクセスできます。実際、このスムーズなアップグレードはアクセスしているユーザーにはまったく気づかれないため、nginx のホット デプロイメントが完了しました。 [root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -v nginx バージョン: nginx/1.14.2 バージョンを確認すると最新バージョンなので、アップグレードは完了です。 注: バージョン アップグレードが完了した後に問題がなく、古いマスター プロセスをシャットダウンする必要がある場合は、次のコマンドを使用できます。 強制終了 -QUIT 古いマスターPID 5. バージョンのロールバック アップグレードで最も難しいのはアップグレードではなく、ロールバックです。実際の運用環境ではロールバックの可能性があるためです。たとえば、新しいバージョンが何らかの未知のバグのために既存のアプリケーションと互換性がなかったり、動作が不安定になったりするなどです。 したがって、運用保守エンジニアにとって、障害ロールバックは重要なポイントとなります。 上記の結果では、古いマスター プロセスが常に存在していることもわかります。手動でシャットダウンしない限り、自動的にシャットダウンすることはありません。この設計は有益です。利点は、新しいバージョンにアップグレードした後、問題が発生した場合に、タイムリーかつ迅速に以前の安定したバージョンにロールバックできることです。 [root@nginx ~]# ps -ef|grep nginx root 6324 1 0 09:06 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx-1.12.2/sbin/nginx root 6340 6324 0 09:12 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx-1.12.2/sbin/nginx 誰も 6341 6340 0 09:12 ? 00:00:00 nginx: ワーカープロセス ルート 6350 1244 0 09:23 pts/0 00:00:00 grep --color=auto nginx [root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/ [root@nginx sbin]# mv nginx nginx-1.14.2 [root@nginx sbin]# mv nginx-1.12.2 nginx [root@nginx sbin]# kill -USR1 6324 [root@nginx sbin]# ps -ef|grep nginx root 6324 1 0 09:06 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx-1.12.2/sbin/nginx root 6340 6324 0 09:12 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx-1.12.2/sbin/nginx 誰も 6341 6340 0 09:12 ? 00:00:00 nginx: ワーカープロセス ルート 6355 1244 0 09:24 pts/0 00:00:00 grep --color=auto nginx [root@nginx sbin]# ./nginx -v nginx バージョン: nginx/1.12.2 上記の結果から、以前のバージョンにスムーズにロールバックできたことがわかります。次に、正常にアクセスできるかどうかをテストします。 通常どおりアクセス可能なので、ロールバック操作もユーザーにはわかりません。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Vueのコンポーネント値の転送から始まるオブザーバーモードの詳細な説明
目次1. はじめに2. es5メソッド3. 非同期関数のシリアル実行4. 非同期関数の並列実行5. ...
GitHub アドレス: https://github.com/dmhsq/dmhsq-mysql-...
中国語チュートリアルhttps://www.ncnynl.com/category/turtlebo...
目次序文zxライブラリ$`コマンド` CD()フェッチ()質問()寝る()スローしない()チョークフ...
序文ほとんどの人は、システム ディスク ストレージが少ないときにこの操作を実行するか、Linux シ...
今日、フラッシュ広告のコードを書いていたとき、フラッシュに付属するリンクはポップアップ広告と間違われ...
日々の最適化プロセス中に、奇妙なことに気付きました。同じ SQL にまったく異なる 2 つの実行プラ...
mysql コマンドを入力します: mysql -u+(ユーザー名) -p+(パスワード) mysq...
テキストの長さに応じて、左側のテキストの幅を自動調整できる状況を実現したい。1行が表示できない場合、...
2 端揃えを実現する div+css レイアウトは、Web ページの組版でよく使用されます。この記事...
MySQL の通常のソート、カスタム ソート、中国語のピンイン文字によるソート。実際の SQL を記...
目次背景表領域の断片化とは何ですか?表領域の断片化を確認する方法表スペースの断片化問題を解決する方法...
以前、Markdown をレンダリングするときに、mavonEditor のプレビュー モードを使用...
最近、プロジェクトで問題が発生しました。サーバー側のプログラムが突然クラッシュして終了しました。クラ...
これはウェブサイトのユーザビリティに関する記事です。著者は自身の経験に基づいて、ウェブサイトのデザイ...