从官网获取源码,设置模块,编译,替换
/usr/sbin/
下的二进制文件即可。环境:阿里云轻量服务器1核2G,CentOS Linux release 7.6.1810 (Core)
1.安装源码安装需要的第三方包
yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel
2. 去官网获取软件源码。
建议使用主线版本nginx。理由:nginx的“主线”和“稳定”分支之间有什么区别?
进入一个你觉得合适的文件夹。
wget https://nginx.org/download/nginx-1.17.3.tar.gz
解压
tar xf nginx-1.17.3.tar.gz
进入解压文件夹
cd nginx-1.17.3
3. 查看对应configure
[root@nginx ~]# nginx -V
nginx version: nginx/1.17.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
......
--add-module=/usr/local/src/ngx_cache_purge-2.3
4. 增加对应的模块
以ngx_cache_purge-2.3
为例复制nginx -V
之后出现的configure arguments:的内容,在前头加上./configure ,在后头加上--add-module=..../ngx_cache_purge-2.3
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log ... --add-module=..../ngx_cache_purge-2.3
5. 编译
make就好,不需要make install
make
6. 对与二进制文件进行备份与替换
cp /usr/sbin/nginx /usr/sbin/nginx.old #备份原nginx文件
cp ./objs/nginx /usr/sbin/nginx #替换nginx文件
7. 重启升级或者平滑升级
重启升级
nginx会关闭一会,网站会在很短的时间内无法访问。
systemctl restart nginx #重启 nginx 服务
平滑升级
杀掉旧进程,过程中网站可以依旧可以正常访问。
[root@nginx objs]# ps -ef|grep nginx
root 888 1 0 22:01 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www 891 888 0 22:01 ? 00:00:00 nginx: worker process
www 892 888 0 22:01 ? 00:00:00 nginx: cache manager process
root 7051 1967 0 23:49 pts/0 00:00:00 grep --color=auto nginx
[root@nginx objs]# kill -USR2 888
[root@nginx objs]# ps -ef|grep nginx
root 888 1 0 22:01 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www 891 888 0 22:01 ? 00:00:00 nginx: worker process
www 892 888 0 22:01 ? 00:00:00 nginx: cache manager process
root 7053 888 0 23:49 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www 7054 7053 0 23:49 ? 00:00:00 nginx: worker process
www 7055 7053 0 23:49 ? 00:00:00 nginx: cache manager process
www 7056 7053 0 23:49 ? 00:00:00 nginx: cache loader process
root 7058 1967 0 23:49 pts/0 00:00:00 grep --color=auto nginx
这时新的master进程已经正常开启,但老的work进程也存在,所以我们使用下面的命令,将老的work进程发出平滑停止的信号,如下:
[root@nginx objs]# kill -WINCH 888
[root@nginx objs]# ps -ef|grep nginx
root 888 1 0 22:01 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
root 7053 888 0 23:49 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www 7054 7053 0 23:49 ? 00:00:00 nginx: worker process
www 7055 7053 0 23:49 ? 00:00:00 nginx: cache manager process
root 7086 1967 0 23:51 pts/0 00:00:00 grep --color=auto nginx
此时,老的work进程已经停止,其实这一平滑升级的动作,对访问用户来说是完全感知不到,所以nginx热部署就已经完成了。
此时查看nginx版本
[root@nginx ~]# nginx -V
nginx version: nginx/1.17.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
......
--add-module=/usr/local/src/ngx_cache_purge-2.3
注:如果在版本升级完成后,没有任何问题,需要关闭老的master进程的话,可以使用下面的命令:
[root@nginx objs]# kill -QUIT 888
[root@nginx objs]# ps -ef|grep nginx
root 7053 1 0 23:49 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www 7054 7053 0 23:49 ? 00:00:00 nginx: worker process
www 7055 7053 0 23:49 ? 00:00:00 nginx: cache manager process
root 7089 1967 0 23:51 pts/0 00:00:00 grep --color=auto nginx
nginx的进程也可以通过nginx.pid获得
[root@nginx objs]# find / -name "nginx.pid" -print
/run/nginx.pid
[root@nginx objs]# cat /run/nginx.pid
945
[root@nginx objs]# kill -USR2 `cat /run/nginx.pid`
[root@nginx objs]# kill -WINCH `cat /run/nginx.pid`
[root@nginx objs]# kill -QUIT `cat /run/nginx.pid`
版本回滚
对于升级来说,最难的不是升级,而是回滚,因为在实际生产环境回滚的机率是存在,比如:新版本由于某些未知bug导致与现有应用不兼容、或出现运行不稳定的情况等等。
所以,对运维工程师来说,故障回滚是重点。
在上面的结果中,我们也能看到老的master进程是一直存在,在没有手工关闭前,它是不会自已关闭的,这种设计是有好处的,好处就是为了升级新版本后,如果出现问题能及时快速的回滚到上一个稳定版本。
回滚也就是替换原nginx文件,重复一次升级。
参考网站:
Comments | NOTHING