文章目录
- 一、负载均衡介绍
- 二、nginx的平滑升级和版本回滚
- 1.平滑升级
- 2.版本回滚
- 3.本实验纯代码过程
- 三、反向代理负载均衡
- 总结
一、负载均衡介绍
四层负载均衡
所谓四层负载均衡是指OSI七层模型中的传输层, 那么传输层Nginx已经支持TCP/IP的控制, 所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载, 那么他的好处是性能非常快, 只需要底层进行应用处理,而不需要进行一些复杂的逻辑.
七层负载均衡
七层负载均衡是在应用层,那么他可以完成后很多应用方面的协议请求,
当然四层有四层的好处,七层七层的好处,四层就不支持协议的转发,(http,https,DNS等)只支持IP,但是它的速度快.
应用层虽然没有四层负载快,但是支持很多功能,比如说他支持http信息的改写、头部信息的改写、(意识是,七层代理着用户往后请求的时候把我们用户请求的头部信息加上,长连接协议也可以修改等)、
安全应用规则控制、URL匹配规则控制、以及转发、rewrite等一些规则,
所以在应用层的服务里面,可以做的内容就更多了。Nginx是一个典型的七层负载均衡
四层和七层的区别
四层负载均衡数据在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发,由此可以看出,七层负载均衡效率没有四层负载均衡高。
但是七层负载均衡更贴近于服务,如HTTP协议就是七层协议,我们可以用Nginx可以作会话保持,URL路径规则匹配,head头改写等等,这些都是四层负载均衡无法实现的。
注意:四层负载均衡不识别域名,七层负载均衡识别域名
二、nginx的平滑升级和版本回滚
1.平滑升级
有些时候我们使用的nginx版本需要更新,但是我们又因为某些原因不能关闭nginx,所以就需要进行平滑升级,在开启nginx的同时,对其进行升级
软件下载:https://nginx.org/en/download.html
首先tar新的版本,进入目录之后进行源码编译,因为我们是进行升级,所以不用进行make install;
以防万一,对原来的二进制nginx文件进行备份为nginx.old;接着对原来的nginx进行覆盖,但是在覆盖的过程中会发现显示在忙,这个时候我们可以采取-f强制覆盖,加\的原因是忽略隐藏,直接执行现在的命令;
我们在覆盖之后再次查看依旧是原来的版本,这是因为这些都存在于内存中,内存中并未改变,所以我们需要使用kill -USR2 加进程号来唤醒(开启)新版本进程,并且用kill -WINCH 加进程号回收(终止)原来的worker进程master负责接收,分配给下面的worker,worker数量越多,nginx负载均衡的能力更强,处理的并发数更多
注:后续实验为重新做,故进程数有变化
2.版本回滚
如果在我们升级之后又需要用到老版本,那么就要进行回滚;我们首先将原来复制的nginx.old复制给nginx然后用kill -HUP唤醒原进程,并且采用kill -WINCH 来回收新进程中的worker进程,这个时候就完成了版本回滚
3.本实验纯代码过程
##平滑升级
软件下载:https://nginx.org/en/download.html
[root@server1 ~]# tar zxf nginx-1.23.3.tar.gz
[root@server1 ~]# cd nginx-1.23.3/
[root@server1 nginx-1.23.3]# vim auto/cc/gcc
[root@server1 nginx-1.23.3]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
[root@server1 nginx-1.23.3]# make
备份原程序
[root@server1 nginx-1.23.3]# cd /usr/local/nginx/sbin/
[root@server1 sbin]# cp nginx nginx.old
拷贝新程序
[root@server1 sbin]# \cp -f /root/nginx-1.23.3/objs/nginx nginx
获取nginx进程Pid
[root@server1 sbin]# ps ax |grep nginx
唤醒新程序进程
[root@server1 objs]# kill -USR2 19100
[root@server1 objs]# ps ax |grep nginx ##此时依然是旧版本
回收旧版本进程
[root@server1 objs]# kill -WINCH 19100
[root@server1 objs]# ps ax |grep nginx ##完成平滑升级
##版本回退
拷贝原程序
[root@server1 objs]# cd /usr/local/nginx/sbin/
[root@server1 sbin]# \cp -f nginx.old nginx
唤醒原版本
[root@server1 sbin]# kill -HUP 19100
[root@server1 sbin]# ps ax |grep nginx ##此时还是新版本
回收新版本
[root@server1 sbin]# kill -WINCH 19129
[root@server1 sbin]# ps ax |grep nginx 完成回滚
删除不需要的进程
[root@server1 sbin]# kill -9 19129
[root@server1 sbin]# ps ax |grep nginx