IP规划
- lvs-master(DIP) : 192.168.10.177
- lvs-backup(DIP) : 192.168.10.178
- nginx-1 (RIP): 192.168.10.133
- nginx-2(RIP) : 192.168.10.138
- tomcat-1 : 192.168.10.134
- tomcat-2 : 192.168.10.135
- tomcat-3 : 192.168.10.136
- VIP : 192.168.10.150
目标
- 通过keepalived,VIP绑定在LVS的两个节点上
- 用户请求VIP,即请求LVS节点的服务器(也是DIP节点的服务器),此时通过DIP转发请求到RIP的节点
- LVS节点只负责接收和转发请求,RIP处理请求之后,直接将报文返回
基础预设
- 已有3台tomcat节点,已分别部署应用“clusterTest”,http://192.168.10.134:8088/clusterTest/choc/hello,发送get请求,可以返回“hello choc”
- 已有2台nginx节点,已经分别配置好3台tomcat节点的集群,http://192.168.10.133:8088/clusterTest/choc/hello,发送get请求,可以返回“hello choc”
- 访问端口均为8088
- 本次集群采用LVS三种模式(NAT|DR|TUN)的DR
- lvs的负载均衡策略选定为轮询
具体配置
-
配置lvs-master 192.168.10.177
-
安装keepalived,安装之后注册下系统服务,并修改下keepalived.conf,vim /etc/keepalived/keepalived.conf,如下
! Configuration File for keepalived global_defs { #路由ID:当前安装keepalived节点的主机标志符,要保证全局唯一,即主备节点不能相同 router_id keep_177 } vrrp_instance VI_1 { #主节点:MASTER;备节点:BACKUP;固定的两种类型 state MASTER #此服务器网卡名,要通过ip addr进行确认, interface ens33 #虚拟路由ID,主备节点的此标志符要相同,keepalived就是根据当前服务器IP,虚拟一个同网段的IP, virtual_router_id 77 #优先级,值越大,虚拟IP就先绑定到哪个服务器上;所以,主节点的优先级要大于备节点 priority 100 #心跳检测时间间隔,每隔1秒,检测virtual_router_id相同的主备节点服务器,是否有挂掉的,有的话,则虚拟IP根据优先级进行转移 advert_int 1 #认证的权限密码,防止非法节点接入 authentication { auth_type PASS auth_pass 1111 } #虚拟IP,可定义多个 virtual_ipaddress { 192.168.10.150 } } #配置集群访问的IP+端口,此处的端口需要和nginx访问的端口一致 virtual_server 192.168.10.150 8088{ #健康检测,间隔时间 delay_loop 6 #LVS负载均衡算法类型,默认轮询 lb_algo rr #LVS模式,NAT|DR|TUN lb_kind DR #会话持久时间 persistence_timeout 5 #协议 protocol TCP #负载均衡的真实服务器,nginx的真实IP地址 real_server 192.168.10.133 8088{ #权重,轮询的权重默认为1,和其他节点相同 weight 1 #TCP健康检查 TCP_CHECK{ #连接端口 connect_port 8088 #连接超时时间 connect_timeout 2 #重试次数 nb_get_retry 2 #重试间隔时间 delay_before_retry 3 } } #负载均衡的真实服务器,nginx的真实IP地址 real_server 192.168.10.138 8088{ #权重,轮询的权重默认为1,和其他节点相同 weight 1 #TCP健康检查 TCP_CHECK{ #连接端口 connect_port 8088 #连接超时时间 connect_timeout 2 #重试次数 nb_get_retry 2 #重试间隔时间 delay_before_retry 3 } }
-
-
配置lvs-backup 192.168.10.178
- 安装keepalived,安装之后注册下系统服务,并修改下keepalived.conf,vim /etc/keepalived/keepalived.conf,如下
! Configuration File for keepalived global_defs { #路由ID:当前安装keepalived节点的主机标志符,要保证全局唯一,即主备节点不能相同 router_id keep_178 } vrrp_instance VI_1 { #主节点:MASTER;备节点:BACKUP;固定的两种类型 state BACKUP #此服务器网卡名,要通过ip addr进行确认, interface ens33 #虚拟路由ID,主备节点的此标志符要相同,keepalived就是根据当前服务器IP,虚拟一个同网段的IP, virtual_router_id 77 #优先级,值越大,虚拟IP就先绑定到哪个服务器上;所以,主节点的优先级要大于备节点 priority 80 #心跳检测时间间隔,每隔1秒,检测virtual_router_id相同的主备节点服务器,是否有挂掉的,有的话,则虚拟IP根据优先级进行转移 advert_int 1 #认证的权限密码,防止非法节点接入 authentication { auth_type PASS auth_pass 1111 } #虚拟IP,可定义多个 virtual_ipaddress { 192.168.10.150 } } #配置集群访问的IP+端口,此处的端口需要和nginx访问的端口一致 virtual_server 192.168.10.150 8088{ #健康检测,间隔时间 delay_loop 6 #LVS负载均衡算法类型,默认轮询 lb_algo rr #LVS模式,NAT|DR|TUN lb_kind DR #会话持久时间 persistence_timeout 5 #协议 protocol TCP #负载均衡的真实服务器,nginx的真实IP地址 real_server 192.168.10.133 8088{ #权重,轮询的权重默认为1,和其他节点相同 weight 1 #TCP健康检查 TCP_CHECK{ #连接端口 connect_port 8088 #连接超时时间 connect_timeout 2 #重试次数 nb_get_retry 2 #重试间隔时间 delay_before_retry 3 } } #负载均衡的真实服务器,nginx的真实IP地址 real_server 192.168.10.138 8088{ #权重,轮询的权重默认为1,和其他节点相同 weight 1 #TCP健康检查 TCP_CHECK{ #连接端口 connect_port 8088 #连接超时时间 connect_timeout 2 #重试次数 nb_get_retry 2 #重试间隔时间 delay_before_retry 3 } } }
- 安装keepalived,安装之后注册下系统服务,并修改下keepalived.conf,vim /etc/keepalived/keepalived.conf,如下
-
配置nginx-1 192.168.10.133
-
cd /etc/sysconfig/network-scripts/
-
cp ifcfg-lo ifcfg-lo:1
-
修改ifcfg-lo:1,如下,保存保存退出
DEVICE=lo:1 IPADDR=192.168.10.150 NETMASK=255.255.255.255 NETWORK=127.0.0.0 BROADCAST=127.255.255.255 ONBOOT=yes NAME=loopback
-
重启网络服务,service network restart,查看IP信息,ip addr
-
-
配置nginx-2 192.168.10.133
-
cd /etc/sysconfig/network-scripts/
-
cp ifcfg-lo ifcfg-lo:1
-
修改ifcfg-lo:1,如下,保存保存退出
DEVICE=lo:1 IPADDR=192.168.10.150 NETMASK=255.255.255.255 NETWORK=127.0.0.0 BROADCAST=127.255.255.255 ONBOOT=yes NAME=loopback
-
重启网络服务,service network restart,查看IP信息,ip addr
-
-
lvs-master 安装ipvs管理工具,
yum install -y ipvsadm
,安装后查看ipvs集群信息,ipvsadm -Ln
,目前暂无集群信息
-
nginx-1和nginx-2两个节点安装配置ARP
- ARP响应级别与通告行为 的概念
- arp-ignore:ARP响应级别(处理请求)
- 只要本机配置了ip,就能响应请求
- 请求的目标地址到达对应的网络接口,才会响应请求
- arp-announce:ARP通告行为(返回响应)
- 本机上任何网络接口都向外通告,所有的网卡都能接受到通告
- 尽可能避免本网卡与不匹配的目标进行通告
- 只在本网卡通告
- arp-ignore:ARP响应级别(处理请求)
- 配置ARP,
vim /etc/sysctl.conf
,配置所有网卡、默认网卡以及虚拟网卡的arp响应级别和通告行为,分别对应:all,default,lo:
# configration for lvs net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2
- 刷新配置,
sysctl -p
- 增加一个网关,
route add -host 192.168.10.150 dev lo:1
,用于接收数据报文,当有请求到本机后,会交给lo去处理增加后,如下:
- 防止重启失效,
echo "route add -host 192.168.10.150 dev lo:1" >> /etc/rc.local
,查看,vim /etc/rc.local
- ARP响应级别与通告行为 的概念
-
lvs-master,使用ipvsadm配置集群规则
- 创建LVS节点,用户访问的集群调度者,
ipvsadm -A -t 192.168.10.150:8088 -s rr -p 5
- -A:添加集群
- -t:tcp协议
- ip地址:设定集群的访问ip,也就是LVS的虚拟ip
- -s:设置负载均衡的算法,rr表示轮询
- -p:设置连接持久化的时间
- 集群添加nginx两个节点,注意这里是端口对端口的,
ipvsadm -a -t 192.168.10.150:8088 -r 192.168.10.133:8088 -g
,ipvsadm -a -t 192.168.10.150:8088 -r 192.168.10.138:8088 -g
- -a:添加真实服务器
- -t:tcp协议
- -r:真实服务器的ip地址
- -g:设定DR模式
- 保存到规则库,否则重启失效,
ipvsadm -S
- 检查集群,
ipvsadm -Ln
,查看集群状态,ipvsadm -Ln --stats
,如下则表示集群添加成功
- 创建LVS节点,用户访问的集群调度者,
-
启动lvs-master和lvs-backup的keepalived服务,
service keepalived restart
-
测试请求VIP(192.168.10.150),请求成功,如下,查看集群状态,
ipvsadm -Ln --stats
,可以看到lvs集群已经开始work了,nginx-2节点处理的,过5分钟再访问一次,可以看到是nginx-1节点处理的,因为lvs负载均衡策略是轮询,请求持久化时间是5分钟
-
关闭lvs-master的keepalived服务,service keepalived stop,查看lvs-backup的ip,测试请求VIP(192.168.10.150),如下,则OK,表示keepalived+lvs+nginx的高可用集群配置完成
后记
- 本文的目的在于记录如何快速搭建一个keepalived+lvs+nginx+tomcat的高可用集群
- 欢迎交流,1406843473@qq.com