ホームページ  >  記事  >  運用・保守  >  Nginx本番環境をスムーズにアップグレードする方法とは?

Nginx本番環境をスムーズにアップグレードする方法とは?

WBOY
WBOY転載
2023-05-13 17:58:061326ブラウズ

1. 背景

最近、私はかなり恥ずかしい現実的な問題に遭遇しました。それは、実稼働環境で使用されている Nginx が Centos6 の古い古いものであるということです。ビジネス要件は Nginx のモジュールをロードして実装する必要がありますが、バージョンが古すぎるためサポートするには Nginx1.18 以降が必要で、私たちのものは Nginx1.12 です。次に、Nginx をアップグレードする必要があります。ただし、本番環境では、テストサーバーとは異なり、Nginx がサービスを停止し、新しいバージョンを再コンパイルしてから再度開始するため、多くのことを考慮する必要があります。当社のオンライン サービスは中断なく提供する必要があります。そうしないと、ビジネスに経済的損失が発生します。そこで、Nginx のバージョンをスムーズにアップグレードする計画はありますか?

2. アップグレード計画

実際には、公式はすでに発表しています 「私たちは、Nginx のスムーズなアップグレードのために多くの作業を行ってきました。基本原則は、新しい Nginx (マスター ワーカー) プロセスを開始し、古いマスター プロセスに -USER2 コマンドを送信することです。新しいバージョンと古いバージョンのプロセスは、同時に処理要求を受け取ることができます。その後、古いプロセスに -WINCH を送信して動作中のサービスを停止します (古いワーカー プロセスはすべて閉じますが、後で問題が発生するのを防ぐために古いマスター プロセスは閉じません)。新しい Nginx を作成し、古いマスター プロセスを手動で強制終了して、スムーズなアップグレードを完了します。

3. 操作プロセス

1. 旧バージョン [nginx 1.12.2] プロセス情報の表示

[root@k8s-master nginx-1.12.2]# ps aux | grep 'nginx' | grep -v '7月' | grep -v 'grep'

root     15180  0.0  0.0  46136   920 ?        Ss   17:22   0:00 nginx: master process ./nginx-1.12.2/sbin/nginx

nobody   15181  0.0  0.1  46584  4344 ?        S    17:22   0:00 nginx: worker process

メイン プロセス pid: 15180 ワーカー プロセス 15181

2. nginx -V nginx

[root@k8s-master nginx-1.12.2]# nginx-1.12.2/sbin/nginx.old.1.12 -V

nginx version: nginx/1.12.2

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

built with OpenSSL 1.0.2k-fips  26 Jan 2017

TLS SNI support enabled

configure arguments: --prefix=nginx-1.12.2 --with-pcre=/root/nginx-test/pcre-8.45/ --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-stream

[root@k8s-master nginx-1.12.2]#
## の古いバージョンのコンパイル パラメーターを表示します。 #make または ./configure がエラーを報告した場合は、インストールを試行できます: yum install -y gcc-c

3. 古いバージョンのバイナリ nginx プログラム、mv nginx nginx.old

mv nginx nginx.old
をバックアップします。

4. この時点では、[nginx1.20.2] をダウンロードし、新しいバージョンを再コンパイルし、古いバージョンのコンパイル パラメーターに従います (または新しいコンパイル モジュールを自分で追加します)

5. 新しく生成されたバイナリをコピーします

./configure --prefix=/usr/local/ --with-stream  xxxx[模块列表]

make

&make install

6. nginx -USR2 15180 (古い nginx メイン プロセス) を送信して置き換えます。この時点でプロセスは 4 つあります。古い nginx プロセス 2 つの新しい nginx プロセス

Nginx本番環境をスムーズにアップグレードする方法とは?

This リクエストがテストされると、これら 2 つのマスターに負荷分散されます。

リクエストは 2 回行われ、1 回目は新しいマスターにロードされ、2 回目は古いマスターにロードされます。

7. アップグレードが成功したことを確認します (-WINCH)シグナルは、古いバージョンのマスターによる新しいリクエストの受信を停止します (現時点では、古いバージョンの nginx マスター プロセスは停止していませんが、新しいリクエストの受信を停止しているだけです)Nginx本番環境をスムーズにアップグレードする方法とは?

kill -winch 15180

古いバージョンの nginx マスター プロセスは停止しています。 nginx のバージョンにはマスター プロセスのみが残されており、子プロセスは存在しません。

このとき、URL に複数回アクセスすると負荷分散は行われません。Nginx本番環境をスムーズにアップグレードする方法とは?

#Hello world が再び表示されません

8. バージョンをロールバックする方法も非常に簡単で、kill -HUP 15180 (古い nginx マスター プロセス) を送信するだけです

Nginx本番環境をスムーズにアップグレードする方法とは?

現時点では、nginx の古いバージョンと新しいバージョンの両方が負荷分散されています。nginx マスターの新しいバージョンを強制終了するだけです。Nginx本番環境をスムーズにアップグレードする方法とは?

現時点では、新しいバージョンの nginx は強制終了されました。 -QUIT.

だけです。

以上がNginx本番環境をスムーズにアップグレードする方法とは?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。