首页 > 系统应用 > LVS > LVS-ospf集群
2015
08-12

LVS-ospf集群

LVS目前除了本身的NAT、DR和TUN模式,还有淘宝开源的fullnat模式,个人了解(待确认)LVS在各大公司的使用情况是:
百度 – BVS(现淘宝的 普空 之前在百度搞得类似fullnat项目,未开源) 结构是fullnat模式+ospf等价多路径
阿里 – LVS(fullnat模式,已开源)结构是fullnat模式+ospf等价多路径,通过交换机ospf的一直性hash来避免session不一致的情况
腾讯 – TWG(也是类似于fullnat的项目,未开源)结构是fullnat模式+ospf等价多路径,通过LVS集群定期同步来实现session一致

LVS在小米的业务前端已经使用几年时间,从最开始的DR模式,到现在部分使用fullnat模式,整体上还是不错的:

DR模式下:CPU E3-1230 V2 @ 3.30GHz + 32G + Intel 82580 Gb网卡 + sata盘:单台极限pps能跑到接近200W,应对电商的抢购活动完全没有压力

但最近也现一些问题:抢购时入站流量将Gb网卡跑满,导致丢包;在HA模式下,主机宕机之后需要advert_int 秒(keepalived 配置项)来切换至备机,也就是说在切换的过程中,服务是不可用的;而且现有结构下,无法线性横向扩展(一个VIP只能由一台服务来提供服务),只能通过提升机器配置来应对流量的上涨

为了解决上面这些问题,所以我们开始尝试LVS(DR)通过ospfd,做lvs集群,实现一个VIP,多台LVS同时工作提供服务,不存在热备机器,如图:

LVS-ospf集群 - 第1张  | 大话运维

用户的访问过程是:

用户请求(VIP:42.xx.xx.100)到达三层交换机之后,通过对原地址、端口和目的地址、端口的hash,将链接分配到集群中的某一台LVS上,LVS通过内网(10.101.10.x)向后端转发请求,后端再将数据返回给用户,整个会话完成

 

Cluser模式的最大优势就在于:

  1. LVS调度机自由伸缩,横向线性扩展(最多机器数受限于三层设备允许的等价路由数目 maximum load-balancing );
  2. LVS机器同时工作,不存在备机,提高利用率;
  3. 做到了真正的高可用,某台LVS机器宕机后,不会影响服务(但因为华3设备ospfd调度算法的问题,一台宕机会使所有的长连接的断开重连,目前还无法解决;思科的设备已经支持一至性哈希算法,不会出现这个问题)。

 

部署过程:

1. 配置三层设备的ospf(这里以华3的设备为例):

交换机与LVS机器互连的端口号分别为2/9/0/19  2/9/0/20  2/9/0/21

第二个端口:

第三个端口:

2. LVS的ospf配置:

LVS机器两张网卡,一个与交换机用做ospf互连,一个与内网连接

安装ospf软件:

a.配置zerba.conf

b.配置ospfd.conf

与交换机的通讯主要是这个进程,通过它将自己的VIP(42.xx.xx.100)声明出去

其它的LVS机器ospf的配置修改一下hostname和 ospf router-id就可以了

开启转发:

开启服务:

可以看到这两个进程都启起来了;系统日志里,可以看到

LVS-ospf集群 - 第2张  | 大话运维

说明已经找到ospf邻居,正常宣告地址了

再在每台机器的LO上绑上宣告的VIP:

LVS-ospf集群 - 第3张  | 大话运维

这时候可以ping一下42.xx.xx.100这个地址,能通就说明ospf已经配置成功了

 

在测试时遇到一个问题,我们在LVS机器上新添加地址时,需要Reload ospfd这个进程,查看启动脚本,他里面的Reload就是stop再start,所有宣告的IP会断开,再启起来

但是通过telnet 连接机器的ospfd管理端口添加新地址会立即生效,且不影响现有的IP,所以写了个脚本:

保存为addip.sh;

这里是需要先安装expect,再执行:

 

Quagga软件还提供了类似supervise的进程监控软件watchquagga,可以监控并重启本机的zebra和ospfd进程,下面使用watchquagga来启zebra和ospfd服务:

大家可以手动kill掉ospf进程测试一下:

LVS-ospf集群 - 第4张  | 大话运维

3. 接下来就是LVS(DR)的配置:

因为使用了ospf来选择路由,LVS上所有的VIP是用32位掩码绑在lo的网卡上的,所以在配置keepalived.conf时,主配置项vrrp_instance、等都不需要了,只需要配置virtual_server对应的后端就行了

我们服务器上就只配置了:

三台LVS的keepalived配置完全一至,再启动keepalived:

然后再到后端的realserver上把VIP绑到LO网卡上,

再打开转发:

到此就都配置完成了,用户访问42.xx.xx.100这个IP,会落到10.101.10.14这台realserver上,再直接返回给用户

最后编辑:
作者:saunix
大型互联网公司linux系统运维攻城狮,专门担当消防员

留下一个回复