centos7 搭载DR模式LVS(负载均衡器)+keepalived处理高并发实验

介绍

当lvs和若干realServer一定程度上处理了高并发的时候,便出现了新的问题
1:lvs出现问题怎么办
2:realServer其中一台出现问题怎么办
我们采用keepalived解决这些问题

问题1解决:keepalived帮助主LVS在时间间隔内向外发布数据包证明自己是存活的,致使备用LVS不启用,当备用LVS几次(自己设置)没有接收到主LVS发送的数据包的时候,备用LVS认为主LVS出现故障,自己接手(ip(vip)漂移)主LVS的工作。当主LVS修复好之后,备用LVS又接到的来自主LVS的存活数据包,便把工作又交换给主LVS

问题2解决:keepalived会监控RealServer的健康状况,如果某一台RealServer出现问题,keepalived会把这台server从LVS服务中剔除掉,当server修复好之后,再把它加会到LVS服务中

我在本地搭建了四台虚拟机分别为node01(ip:192.168.179.101),node02(ip:192.168.179.102),node03(ip:192.168.179.103),node04(ip:192.168.179.104)。其中node01做主LVS,node04做备用LVS。node02和node04做realServer。

安装配置keepalived

为node01和node04安装keepalived

yum install keepalived -y
``
[root@localhost node01]# cd /etc/keepalived/
[root@localhost keepalived]# vi keepalived.conf

配置keepalived.conf文件
node01(主要部分)

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.179.100/24
    }
}

virtual_server 192.168.179.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

real_server 192.168.179.102 80 {    #realserver的真实IP
        weight 1                      #权重
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.179.103 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

node04(主要部分)

vrrp_instance VI_1 {
    state BACKUP              #keepalived角色,MASTER和BACKUP
    interface ens33            #通信接口,下面的virtual_ipaddress(VIP)绑定到这个网卡
    virtual_router_id 51      #vrrp_instance的唯一标识
    priority 100              #keepalived权重,数值越大权重越大,MASTER应大于BACKUP
    advert_int 1              #发送心跳间隔,如果backup1秒收不到心跳就接管,单位是秒
    authentication {          #每个keepalived节点通过这里设置的验证通信,必须得设置成一样
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.179.100/24       #VIP
    }
}

##################LVS配置##############
#添加虚拟服务器
#相当于 ipvsadm -A -t 192.168.0.89:80 -s wrr
virtual_server 192.168.179.100 80 {
    delay_loop 6             #服务健康检查周期,单位是秒
    lb_algo rr                 #调度算法
    lb_kind DR                 #模式
    nat_mask 255.255.255.0
    persistence_timeout 0   #回话保持时间,单位是秒
    protocol TCP             #TCP协议转发
#添加后端realserver
#相当于 ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.93:80 -w 1
    real_server 192.168.179.102 80 {    #realserver的真实IP
        weight 1                      #权重
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.179.103 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            }
       }
 }

配置完毕我们稍等配置完RealServer再启动

配置RealServer

node02

#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

绑定vip到还回接口

#ip addr add 192.168.179.100/32 dev lo label lo:1

node03

#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

绑定vip到还回接口

#ip addr add 192.168.179.100/32 dev lo label lo:1

通过httpd测试

我们通过修改httpd的根目录为其创建一个index.html文件,让我们通过浏览器更直观的感受
node02

#vi /var/www/html/index.html
编辑文件为:from 192.168.179.102

node03

#vi /var/www/html/index.html
 编辑文件为:from 192.168.179.103

然后启动node1-4的所有服务
node02 node03启动httpd

#systemctl start https.service

node01 nnode04启动keepalived

systemctl start keepalived.service

我们通过浏览器访问VIP:192.168.179.100来看一下情况
在这里插入图片描述
在这里插入图片描述
我们看到两次访问的是不同的realServer

验证问题

我们先来验证RealServer出问题的情况
我把node2的httpd服务关闭之后可见LVS挂载把node2踢掉了
在这里插入图片描述
当再次启动node02的httpd服务后,LVS又把node02加了回来
在这里插入图片描述
我们再来验证当lvs出问题的情况
我们来把node01的网卡关掉模拟主LVS故障,然后看node04LVS的情况
在这里插入图片描述
我们可以看到备用LVS已经接手了主LVS的工作。从客户端浏览器访问VIP是没有影响的
在这里插入图片描述
在这里插入图片描述
当我们霸王卡打开再次启动keepAlived服务,可以看到备用LVS把工作又交还给主LVS
在这里插入图片描述
我们可以看到keepAlived已经解决了开始叙述的两个问题。当然也有一些小bug。所以引出了后来的zookeeper。后面我会再写一篇文章来实验。

这样,我们就可以利用LVS连接多个Nginx,然后每个Nginx连接多个Tomcat来达到百万级并发。当然Nginx与Tomcat之间又会涉及session的一致性问题,解决这等问题又加入Redis来存储session。这些问题我们以后再说。
以上为我个人理解。如有不足请指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值