溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Nginx生產(chǎn)環(huán)境平滑升級(jí)的方法是什么

發(fā)布時(shí)間:2023-03-06 15:54:44 來源:億速云 閱讀:117 作者:iii 欄目:開發(fā)技術(shù)

這篇“Nginx生產(chǎn)環(huán)境平滑升級(jí)的方法是什么”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Nginx生產(chǎn)環(huán)境平滑升級(jí)的方法是什么”文章吧。

一.背景

最近遇到一個(gè)比較尷尬而又實(shí)際的問題,那就是我們生產(chǎn)環(huán)境使用的Nginx是Centos6的老古董。業(yè)務(wù)需求需要加載Nginx的一個(gè)模塊來實(shí)現(xiàn),但是版本太老了,需要Nginx1.18之后才能支持,而我們的是Nginx1.12。 那升級(jí)Nginx是我們要做的事情。但是在生產(chǎn)環(huán)境你要考慮的東西很多,不像測(cè)試服,Nginx停掉服務(wù),重新編譯新的版本再啟動(dòng)。 我們線上的服務(wù)需要不間斷地提供服務(wù),否則會(huì)對(duì)業(yè)務(wù)產(chǎn)生經(jīng)濟(jì)損失. 那有什么方案能平滑升級(jí)Nginx版本呢?

二.升級(jí)方案

其實(shí)官方早就針對(duì)Nginx平滑升級(jí)做足了功夫,基本原理就是,啟動(dòng)新的Nginx(master+worker)進(jìn)程,之后給舊的master進(jìn)程發(fā)送-USER2指令,這樣就能同時(shí)讓新版和舊版本進(jìn)程同時(shí)接收處理請(qǐng)求。之后我們?cè)侔l(fā)送-WINCH給舊進(jìn)程,讓它停止工作服務(wù)(關(guān)閉所有舊worker進(jìn)程,但是舊的master進(jìn)程沒關(guān),防止后面你遇到問題回滾). 如果確認(rèn)新Nginx沒問題,那么再手動(dòng)Kill舊的master進(jìn)程即可完成平滑升級(jí).

三.操作流程

1.查看-舊版本【nginx 1.12.2】進(jìn)程信息

[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

主要進(jìn)程pid:  15180  worker進(jìn)程15181

2. nginx -V查看舊版本nginx的編譯參數(shù)

[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報(bào)錯(cuò),可以嘗試安裝:  yum install -y gcc-c++

3.備份舊版本二進(jìn)制nginx程序,  mv nginx nginx.old

mv nginx nginx.old

4.此時(shí)我們下載【nginx1.20.2】新版本重新編譯,按照舊版本的編譯參數(shù)(或者自己新增編譯模塊)

5.拷貝新生成的二進(jìn)制nginx, 移動(dòng)到之前舊版本的nginx路徑覆蓋.

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

make

&make install

6.發(fā)送nginx -USR2 15180(舊版nginx主進(jìn)程)進(jìn)行替換,此時(shí)存在4個(gè)進(jìn)程.  2個(gè)舊版nginx進(jìn)程  2個(gè)新版nginx進(jìn)程

Nginx生產(chǎn)環(huán)境平滑升級(jí)的方法是什么

此時(shí)請(qǐng)求經(jīng)過測(cè)試是負(fù)載均衡到這2個(gè)master上.

Nginx生產(chǎn)環(huán)境平滑升級(jí)的方法是什么

請(qǐng)求2次,第一次負(fù)載到新的master,第二次負(fù)載到舊的master.

7.確認(rèn)升級(jí)成功,-WINCH 信號(hào) 停止舊版master接收新的請(qǐng)求(此時(shí)舊版本nginx master進(jìn)程沒死,只是停止接收新的請(qǐng)求)

kill -winch 15180

Nginx生產(chǎn)環(huán)境平滑升級(jí)的方法是什么

舊版nginx只剩下master進(jìn)程, 子進(jìn)程不存在了.

此時(shí)多次訪問URL, 不會(huì)出現(xiàn)負(fù)載均衡的情況了.

Nginx生產(chǎn)環(huán)境平滑升級(jí)的方法是什么

沒有再出現(xiàn)hello world

8.若要回退版本也很簡(jiǎn)單,發(fā)送 kill -HUP 15180(舊nginx master進(jìn)程)即可

Nginx生產(chǎn)環(huán)境平滑升級(jí)的方法是什么

Nginx生產(chǎn)環(huán)境平滑升級(jí)的方法是什么

此時(shí)舊版和新版nginx都在負(fù)載均衡.  把新版本nginx master kill掉即可.

此時(shí)新版nginx已經(jīng)kill -QUIT 即可.

以上就是關(guān)于“Nginx生產(chǎn)環(huán)境平滑升級(jí)的方法是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI