文章目录
- 前言
- 一、LVS+keepalived实现高可用负载均衡
- 二、三种不同模式实现负载均衡的区别与优缺点
- NAT模式
- DR直连路由模式
- TUN隧道模式
- 三、Nginx之编译、负载均衡实现
- rr算法实现负载均衡
- ip_hash算法
- 四、nginx平滑升级
前言
一、LVS+keepalived实现高可用负载均衡
C/S架构和B/S架构:
C/S架构就是客户机->服务器之间的请求和响应
B/S架构就是客户机->WEB服务器->数据库服务器之间的请求与操作
我们首先开启三台虚拟机,第一台作为调度器,需要安装ipvsadm,它是用户用来写入策略的,其他两台安装httpd服务并且设置开机自启
首先给每台主机添加VIP,确保测试机在测试的时候每台主机都能够响应,但是两台real server需要安装arptables,且对外响应的时候以自身原来的ip对外显示,否则会造成ip地址冲突,我们要做的只是让他们能够识别我们测试所用的ip,是属于自己就足够。
我们在测试机进行测试,发现实现了负载均衡
DR模式实现负载均衡最核心的部分就是数据包经过调度器的时候,Mac地址被更改,更改为RS的Mac地址,并且以轮叫的方式实现负载均衡;在数据包到达RS之后我们需要对VIP进行屏蔽,以防止ip地址冲突
如果某台RS down了我们该怎么办,这个时候就需要健康检测,每隔一段时间对主机进行检测
安装keepalived之后,down掉的RS就不会被分配数据包,数据包会由健康的RS来完成,而不会出现被分配然后报错的结果
如果LVS本身down了,我们该怎么办,我们就要做LVS冗余
我们还要在添加一台和LVS配置相同的server,不同点是它是作为BACKUP来防止LVS down掉之后业务瘫痪,在MASTER down掉之后,会由BACKUP接替原来的MASTER,直到MASTER恢复健康状态,所以LVS+keepalived共同实现了负载均衡以及高可用
二、三种不同模式实现负载均衡的区别与优缺点
NAT模式
首先将数据包解析到第四层网络层(LVS是基于第四层的负载均衡器),但是在网络层只是获取端口号,而不是建立连接。负载均衡器要将数据分发给RS,只要将目标ip地址替换为RS的ip,数据包要返回客户,首先要配置RS的默认网关为 负载均衡器,这样数据就可以到达负载均衡器,然后由负载均衡器将源ip地址替换为VIP,最后返回客户端。
弊:
非对称
消耗算力,返回客户端的数据都要经过负载均衡服务器,但是现如今硬件水平的提升也让这个缺点不那么明显
DR直连路由模式
负载均衡器在转发数据包的时候,只需要将封装的目标Mac地址修改为RS的Mac地址,这样数据就能从客户端到达RS,RS上有我们设置的VIP,所以可以直接向客户端返回数据包,而不需要经过负载均衡服务器。
修改Mac地址的模式是基于2层链路层,没有修改三层网络层,缺点是不能跨越网络,必须在同一个vlan下;优点是速度快,成本低,缺点是安全性相对比较低,NAT模式更加安全
TUN隧道模式
我们用到的PPPOE协议、VPN、翻墙就是这种技术。
三、Nginx之编译、负载均衡实现
编译三部曲:(先解压)./configrue make make install
Nginx的启动只需要nginx即可,如果修改了配置文件就要reload重载,想要关闭Nginx直接nginx -s stop即可
这里访问本机,可以看到nginx已经成功启动,查看端口也可以看到80端口
我们这里是两核的cpu,worker_cpu_affinity参数是为了充分利用多核CPU的性能
使用epoll作为IO复用的系统调用
nginx是基于epoll的异步非阻塞的服务器程序,所以,nginx可以轻松处理百万级的并发连接;
epoll是select和poll的增强版本,它更加灵活,没有描述符限制,无需轮询,当有I/O流事件发生的时候,epoll就会告诉进程哪个连接有I/O流事件产生,然后就会去处理这个进程。
rr算法实现负载均衡
当我们访问指定的域名的时候,就会被调度器分发给定义的server,并且nginx自带健康检测,某台server down不会影响用户体验,如果server全部down,就会访问到调度器本身,但是由于调度器一般不足以满足大量的访问需求,所以我们可以设定显示网站正在维护中
ip_hash算法
一般同一个ip的访问会由一个server来完成响应,以防止之前提交表单的丢失等问题出现
我们可以看到同一个ip访问只会由一台server进行响应,并不是其他server出了问题,整体上来看依旧是负载均衡的状态
四、nginx平滑升级
首先解压一份新版本的nginx tar包,并且./configure make之后将二进制程序放在/usr/local/nginx/sbin/底下,当然在这之前我们要对旧版本的进行备份,便于后续版本回退
我们可以看到已经完成了版本的升级,我们采用平滑升级的原因是在升级的过程中nginx服务不会停止,用户对升级无感知,更加贴近于生产环境,当然我们也可以进行版本的回退
我们到这也实现了版本的回退,同样也是在nginx服务没有停止的状态下完成的
我们在nginx中有许多的操作,比如对数据传输进行控制,限制速率、限制带宽、限制并发量等等,以及nginx重定向,可以设置当我们访问某一地址时直接重定向到另一个地址,当然有这些需求的时候;以及日志的可视化监测等等
nginx也有防盗链功能,当然更多的内容可以直接在nginx官网进行查看,就不一一赘述