网站首页 > 博客文章 正文
基于业务新增一个UDP服务的需求,需要通过Nginx反向代理到后端的微服务集群,查阅资料Nginx在1.9.0版本开始就增加了四层转发模块,但不会被默认编译,需要在编译的时候通过参数 --with-stream 开启,此文记录平滑更新Nginx的全过程,同时也适用于Nginx版本的平滑升级。
1、重新编译Nginx
首先拿到原来编译的参数,在原来基础上增加--with-stream
$ cd local/nginx/sbin && ./nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/home/admin/local/nginx-1.18.0 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_geoip_module=dynamic --with-http_flv_module --with-http_mp4_module --with-http_auth_request_module --with-http_stub_status_module
重新编译Nginx,注意不要make install,另外这里建议保持一致的Nginx版本。
$ cd tmp/nginx-1.18.0/
$ ./configure --prefix=/home/admin/local/nginx-1.18.0 --with-stream --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_geoip_module=dynamic --with-http_flv_module --with-http_mp4_module --with-http_auth_request_module --with-http_stub_status_module
$ make -j 4
2、替换二进制文件
备份旧的二进制文件
$ mv /home/admin/local/nginx/sbin/nginx /home/admin/local/nginx/sbin/nginx.old
将重新编译好的二进制文件拷到sbin目录
$ cp objs/nginx /home/admin/local/nginx/sbin/
测试是否兼容或报其他异常,nginx -V查看编译参数是否符合预期
$ cd /home/apps/local/nginx/sbin/ && ./nginx -t
nginx: the configuration file /home/admin/local/nginx-1.18.0/conf/nginx.conf syntax is ok
nginx: configuration file /home/admin/local/nginx-1.18.0/conf/nginx.conf test is successful
3、发送USR2信号
向master进程发送USR2信号后,Nginx首先会重命名它的进程文件为带.oldbin后缀,然后启动一个新的master进程和对应的worker进程,跟旧的进程一起处理请求,具体可以参考官方文档的说明。
After that USR2 signal should be sent to the master process. The master process first renames its file with the process ID to a new file with the .oldbin suffix, e.g. /usr/local/nginx/logs/nginx.pid.oldbin, then starts a new executable file that in turn starts new worker processes
4、发送WINCH信号
向旧的master进程发送WINCH信号后,它会优雅的关闭worker进程,最后只剩下新的worker进程处理请求。
到这一步后,需要结合观察业务是否异常,如有问题可以立即回滚,可以查看官方文档(http://nginx.org/en/docs/control.html),具体有两个选择:
- 发送HUP信号给旧的master进程,再发QUIT信号给新的master进程
- 直接发送TERM信号给新的master进程
5、发送QUIT信号
步骤4结合观察业务确认没有问题后,就可以发送QUIT信号给旧的master进程,至此旧的进程全部关闭,只剩下新进程处理请求。
6、UDP转发配置
nginx配置文件增加stream配置,注意stream模块跟http模块一样,需要配置在nginx的main context里。
stream {
upstream dns {
server 192.168.100.61:53;
server 192.168.100.62:53;
}
server {
listen 53 udp;
proxy_timeout 20s;
proxy_pass dns;
}
}
- 上一篇: 面试问到UDP,这样回答offer拿到手软
- 下一篇: UDP分包与组包
猜你喜欢
- 2024-12-01 利用nginx搭建RTMP视频点播、直播、HLS服务器
- 2024-12-01 Nginx:为什么高性能?Master&worker如何配合?负载均衡了解吗?
- 2024-12-01 Linux网络编程面试题--tcp和udp的区别
- 2024-12-01 为什么 NGINX 的 reload 命令不是热加载?
- 2024-12-01 Docker实战-使用NGINX实现4层的负载均衡
- 2024-12-01 Linux网络编程-UDP和TCP协议详解
- 2024-12-01 nginx严重级别安全漏洞:DNS解析器不按堆大小写入漏洞
- 2024-12-01 Nginx的10个使用场景 # 强化学习
- 2024-12-01 Nginx如何实现四层负载均衡
- 2024-12-01 nginx服务器-四层代理与七层代理概要及应用场景
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)