最近、私はかなり恥ずかしい現実的な問題に遭遇しました。それは、実稼働環境で使用されている Nginx が Centos6 の古い古いものであるということです。ビジネス要件は Nginx のモジュールをロードして実装する必要がありますが、バージョンが古すぎるためサポートするには Nginx1.18 以降が必要で、私たちのものは Nginx1.12 です。次に、Nginx をアップグレードする必要があります。ただし、本番環境では、テストサーバーとは異なり、Nginx がサービスを停止し、新しいバージョンを再コンパイルしてから再度開始するため、多くのことを考慮する必要があります。当社のオンライン サービスは中断なく提供する必要があります。そうしないと、ビジネスに経済的損失が発生します。そこで、Nginx のバージョンをスムーズにアップグレードする計画はありますか?
実際には、公式はすでに発表しています 「私たちは、Nginx のスムーズなアップグレードのために多くの作業を行ってきました。基本原則は、新しい Nginx (マスター ワーカー) プロセスを開始し、古いマスター プロセスに -USER2 コマンドを送信することです。新しいバージョンと古いバージョンのプロセスは、同時に処理要求を受け取ることができます。その後、古いプロセスに -WINCH を送信して動作中のサービスを停止します (古いワーカー プロセスはすべて閉じますが、後で問題が発生するのを防ぐために古いマスター プロセスは閉じません)。新しい Nginx を作成し、古いマスター プロセスを手動で強制終了して、スムーズなアップグレードを完了します。
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]#
mv nginx nginx.old
./configure --prefix=/usr/local/ --with-stream xxxx[模块列表] make &make install
リクエストは 2 回行われ、1 回目は新しいマスターにロードされ、2 回目は古いマスターにロードされます。
7. アップグレードが成功したことを確認します (-WINCH)シグナルは、古いバージョンのマスターによる新しいリクエストの受信を停止します (現時点では、古いバージョンの nginx マスター プロセスは停止していませんが、新しいリクエストの受信を停止しているだけです)
kill -winch 15180
古いバージョンの nginx マスター プロセスは停止しています。 nginx のバージョンにはマスター プロセスのみが残されており、子プロセスは存在しません。
このとき、URL に複数回アクセスすると負荷分散は行われません。
#Hello world が再び表示されません8. バージョンをロールバックする方法も非常に簡単で、kill -HUP 15180 (古い nginx マスター プロセス) を送信するだけです現時点では、nginx の古いバージョンと新しいバージョンの両方が負荷分散されています。nginx マスターの新しいバージョンを強制終了するだけです。
現時点では、新しいバージョンの nginx は強制終了されました。 -QUIT.だけです。
以上がNginx本番環境をスムーズにアップグレードする方法とは?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。