前面我们学会了nginx环境搭建,keeplived+nginx环境搭建,lvs+nginx环境搭建,这里进行终极搭建lvs+keepalived+nginx
背景
开始我们网站小,可能一个tomcat服务器就可以了
后面随着访问数上升,一个tomcat不行了,那么就用Nginx做个负载均衡
后面随着用户访问上升,一个Nginx也不行了,有单点故障
后面随着用户访问上升,需要对Nginx进行横向扩容,加入第四层的负载均衡解决方案LVS
用户继续上升,LVS又会达到瓶颈,需要用DNS轮询.这里可以根据机房,地域轮询等,已经是做到极致了。所以终极环境就是lvs+keepalived+nginx。lvs最终是多个主备。

准备
各种虚拟机准备克隆等
nginx-1.22.1在linux服务器上的安装和使用
keepalived+nginx实现高可用实战(双机主备,双主热备)
LVS+Nginx环境搭建(DR模式)
只需要对keepalived的配置文件进行修改即可,毕竟keepalived和lvs完美兼容
搭建lvs+keepalived+nginx跟lvs+nginx还是有点区别的,不需要在LVS服务器(DR)构建虚拟IP。keepalived会帮忙搞定。但是还是需要在在两台nginx(SR)构建虚拟IP。
主lvs
! Configuration File for keepalivedglobal_defs {router_id LVS_15}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 17priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.192.17}}#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)virtual_server 192.168.192.17 80 {#健康检查的时间,单位:秒delay_loop 6#配置负载均衡的算法:rr(轮询)lb_algo rr#设置lvs的模式:NAT/TUN/DR 我们用的是DRlb_kind DR#设置会话持久化时间persistence_timeout 5#协议,其实就是-tprotocol TCP#负载均衡的真实服务器 这个就是对应两台Ngixn(RS)real_server 192.168.192.11 80 {#轮询默认权重为1weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}real_server 192.168.192.12 80 {weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}}
备lvs
! Configuration File for keepalivedglobal_defs {router_id LVS_16}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 17priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.192.17}}#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)virtual_server 192.168.192.17 80 {#健康检查的时间,单位:秒delay_loop 6#配置负载均衡的算法:rr(轮询)lb_algo rr#设置lvs的模式:NAT/TUN/DR 我们用的是DRlb_kind DR#设置会话持久化时间persistence_timeout 5#协议,其实就是-tprotocol TCP#负载均衡的真实服务器 这个就是对应两台Ngixn(RS)real_server 192.168.192.11 80 {#轮询默认权重为1weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}real_server 192.168.192.12 80 {weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}}
重启测试
先把之前lvs+nginx的配置清除
ipvsadm -C
启动keepalived
systemctl start keepalived
查看效果
[root@localhost etc]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.192.17:80 rr persistent 5-> 192.168.192.11:80 Route 1 0 0-> 192.168.192.12:80 Route 1 0 0
双机热备
其实就是跟keepalived的双机热备差不多,只不过RS(两台Nginx)需要多加个虚拟IP,这里假设用的是192.168.192.18,则在两台nginx(11,12)进行如下操作
cd /etc/sysconfig/network-scripts/cp ifcfg-lo:1 ifcfg-lo:2vi ifcfg-lo:2
输入如下内容
DEVICE=lo:2IPADDR=192.168.192.18NETMASK=255.255.255.255NETWORK=127.0.0.0# If you're having problems with gated making 127.0.0.0/8 a martian,# you can change this to something else (255.255.255.255, for example)BROADCAST=127.255.255.255ONBOOT=yesNAME=loopback
进行刷新
ifup lo
依然需要添加路由
route add -host 192.168.192.18 dev lo:2
两台lvs的配置文件
lvs01
! Configuration File for keepalivedglobal_defs {router_id LVS_15}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 17priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.192.17}}vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 18priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.192.18}}#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)virtual_server 192.168.192.17 80 {#健康检查的时间,单位:秒delay_loop 6#配置负载均衡的算法:rr(轮询)lb_algo rr#设置lvs的模式:NAT/TUN/DR 我们用的是DRlb_kind DR#设置会话持久化时间persistence_timeout 5#协议,其实就是-tprotocol TCP#负载均衡的真实服务器 这个就是对应两台Ngixn(RS)real_server 192.168.192.11 80 {#轮询默认权重为1weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}real_server 192.168.192.12 80 {weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}}#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)virtual_server 192.168.192.18 80 {#健康检查的时间,单位:秒delay_loop 6#配置负载均衡的算法:rr(轮询)lb_algo rr#设置lvs的模式:NAT/TUN/DR 我们用的是DRlb_kind DR#设置会话持久化时间persistence_timeout 5#协议,其实就是-tprotocol TCP#负载均衡的真实服务器 这个就是对应两台Ngixn(RS)real_server 192.168.192.11 80 {#轮询默认权重为1weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}real_server 192.168.192.12 80 {weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}}
lvs02
! Configuration File for keepalivedglobal_defs {router_id LVS_16}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 17priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.192.17}}vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 18priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.192.18}}#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)virtual_server 192.168.192.17 80 {#健康检查的时间,单位:秒delay_loop 6#配置负载均衡的算法:rr(轮询)lb_algo rr#设置lvs的模式:NAT/TUN/DR 我们用的是DRlb_kind DR#设置会话持久化时间persistence_timeout 5#协议,其实就是-tprotocol TCP#负载均衡的真实服务器 这个就是对应两台Ngixn(RS)real_server 192.168.192.11 80 {#轮询默认权重为1weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}real_server 192.168.192.12 80 {weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}}#配置集群地址访问的IP+端口,端口和nginx保持一致,这个就是对应的LVS(DR)virtual_server 192.168.192.18 80 {#健康检查的时间,单位:秒delay_loop 6#配置负载均衡的算法:rr(轮询)lb_algo rr#设置lvs的模式:NAT/TUN/DR 我们用的是DRlb_kind DR#设置会话持久化时间persistence_timeout 5#协议,其实就是-tprotocol TCP#负载均衡的真实服务器 这个就是对应两台Ngixn(RS)real_server 192.168.192.11 80 {#轮询默认权重为1weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}real_server 192.168.192.12 80 {weight 1#设置健康检查TCP_CHECK {#检查的80端口connect_port 80#超时时间:秒connect_timeout 2#重试次数nb_get_retry 2#间隔时间:秒delay_before_retry 3}}}
然后重启keepalived即可
systemctl restart keepalived
查看目前的lvs配置
[root@localhost ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.192.17:80 rr persistent 5-> 192.168.192.11:80 Route 1 2 0-> 192.168.192.12:80 Route 1 0 0TCP 192.168.192.18:80 rr persistent 5-> 192.168.192.11:80 Route 1 0 0-> 192.168.192.12:80 Route 1 0 0
可以看到有两组了。
然后在浏览器访问VIP:http://192.168.192.17/和http://192.168.192.18/分别渠道了11和12.
完美!
