系统版本及各软件版本预备
IP | 角色 |
服务器配置 # cat /etc/centos-release |
说明 |
192.168.11.98/23 | nginx worker 1 | #rpm -qi nginx Name : nginx Epoch : 1 Version : 1.16.1 |
nginx工作机 realserver |
192.168.11.99/23 | nginx worker2 | #rpm -qi nginx Name : nginx Epoch : 1 Version : 1.16.1 |
nginx工作机、 realserver |
192.168.11.100/23 | nginx worker3 | # rpm -qi nginx Name : nginx Epoch : 1 Version : 1.16.1 |
nginx工作机 realserver |
192.168.11.101/23 | LVS Master + keepalived | Name : keepalived Version : 1.3.5 Release : 19.el7 Architecture: x86_64 |
调度器主服务器 virtualserver |
192.168.10.173/23 | LVS BACKUP + keepalived | Name : keepalived Version : 1.3.5 Release : 19.el7 Architecture: x86_64 |
调度器热备 virtualserver |
其他预备工作:
每台集群机器上安装 net-tools.
安装epel-release库
工作机和调度器安装
1)在三个nginx服务器上分别安装nginx
2)在二台调度器上安装keepalived
lvs模块是系统默认自带的,通过下述命令 查询,可以看到ip_vs模块
各角色的配置
调度器上的配置,这里注意的是我们使用DR模式作为lvs的转发模式,这样最大程度的降低调度器的网络消耗。DR模式的解析在文章最后,请仔细阅读。
调度机器上配置如下文件,根据文件里的说明修改并在二台调度器上都需要。
在工作机器上修改nginx的首页,为了查看轮询的效果,三台机器上都需要执行。
三台woker机器上启动nginx
在其他的linux机器上进行测试,nginx正常工作。
根据DR模式的原来,需要在realserver,工作机上,安装如下脚本,禁止realserver响应关于VIP的请求。
三台nginx(realserver) 启动脚本,为调度器调度过来的数据做好准备。
在三台realserver ,查看lo:0的地址是否绑定了VIP,结果是3台都已经绑定了VIP
在二台调度器上启用keepalived
在主调度器上,通过如下命令看VIP是否有显示
停掉主调度器上的keepalived,到备机(192.168.10.173)去检查,发现VIP已经漂移。
如果没有漂移
1)检查主上的优先级是否大于备上的优先级
2)virutal_router_id 是不是相同,如果不同,改成相同
3) VIP是否已经被网络上的其他机器使用。重启主调度器上的keepalived, 运行如下程序看DR 下rr调度的结果。
轮询正确。高可用及负载均衡实现。
DR模式(
Virtual Server via Direct Routing)DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,
DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调
度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。DR模式是互联网使用比较多的一种模式。
DR模式原理图:
LVS-DR数据流向图
DR模式原理过程简述:
如下图:当客户端请求VIP时,会将请求先发给Director(调度器),调度器发现请求的是一组集群服务,根据调度算法将这一请求转发给RealServer,
注意在转发的过程中,仅仅是修改了数据报文中的MAC地址,所以这也是为什么我们要求DR和RS必须在同一个物理网络内,就是为了保证可以通过修改MAC
地址而进行数据报文的转发。当RealServer处理请求,响应数据,发送响应数据给客户端,按理说此时的数据包的源IP为RIP,目标IP为CIP,虽然能找到客户端,
但是客户端是不收该数据包的,因为并没有请求该RIP ,现在的做法就是进行IP欺骗,即就是修改源 IP 为 VIP,但是不可以将VIP设置在出口网卡上,否则会响
应客户端的arp request,造成client/gateway arp table紊乱,以至于整个load balance都不能正常工作。要在lo接口上配置VIP,并将此 VIP 屏蔽,但是出去时候
的数据包被路由转换,转换后的 IP不再是 VIP,所以要重新设置路由。
另外关于各服务器网络的配置,首先每个服务有一个独立网卡即可。在DR上将DIP配置eth0上,将VIP配置在网络别名上,这样是为了以后调度器做高可用
方便VIP做IP地址飘移。在各RS上同样需要配置好VIP,这样个RS就可以直接响应Client,而不需要再经过DR,但是一个物理网络之内是不允许有多个同名IP的,
所以需要修改RS的内核参数,并且将VIP配置在LO上,让其保留VIP但是不允许对外进行广播,这样从RS出去的报文源地址就是VIP,当然这需要从真实的物理
网卡出去,所以必须加一条路由,让访问VIP的数据包请求,对其响应的是配置了VIP的网卡,这样响应出去的报文源地址就是VIP,可以被Client接受。
2.下面对LVS-DR的配置参数
在如上图的VS/DR应用模型中(所有机器都在同一个物理网络),所有机器(包括Director和RealServer)都使用了一个额外的IP地址,即VIP。
当一个客户端向VIP发出一个连接请求时,此请求必须要连接至Director的VIP,而不能是RealServer的,因为LVS的主要目标就是要Director负责
调度这些连接请求至RealServer的。因此,在Client发出至VIP的连接请求后,只能由Director将其MAC地址响应给客户端(也可能是直接与Director连
接的路由设备),而Director则会相应的更新其ipvsadm table以追踪此连接,而后将其转发至后端的RealServer之一。