构建基于LVS+OSPF+FULLNAT的前端负载均衡架构

2016年2月26日16:14:32 发表评论 2,725 views
本文最后更新于2018年1月19日,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!

介绍

提到负载均衡,基本任何一个访问大点的网站都会用到,负载均衡的意义就不说了。现在的负载均衡无非是两种实现,一种是TCP层的负载均衡,一种是 HTTP层的负载均衡,TCP四层负载均衡比HTTP 七层负载均衡性能强N倍,但是它运行在TCP层自然没办法对HTTP请求进行匹配、转发等操作,还有一个缺点是,TCP负载均衡的后端可能没法直接拿到 HTTP请求的源IP

市面上四层负载均衡有LVS,七层负载均衡有Haproxy、Nginx,目前用的最多的就是这三种了。另外,aws也提供四层和七层负载均衡,七 层负载均衡会设置 X-Forwarded-For,后端就能拿到源IP,对于四层负载均衡,也有办法拿到源IP,有兴趣的参考文章:http://nosa.me/?p=91

剩下LVS 和 Nginx了, LVS具有极高的转发性能,而Nginx也是性能极高的Web服务器,如果我们只用LVS,就没法对HTTP请求做转发处理,如果只用Nginx,频繁修 改Nginx配置 即使是reload在大流量下也可能会影响请求的正常处理。所以我们一起用了,即:

请求 —> 网络 —> LVS集群 —> Nginx 集群 —> APP 

模式

来看一下用什么LVS的什么模式比较好,我了解的人一般用DR 和 NAT两种模式:

1. DR模式性能是最好的,LVS改写了目的MAC地址,直接从二层转发到后端,三层的目的IP地址还是VIP,所以为了能够正常工作,要在lo上配置 VIP。而且,因为LVS机器和后端机器是通过二层转发的,没法跨三层网络(路由器),所以LVS和后端机器要在一个二层网络里,扩展性不好。

2. NAT模式的原理是LVS会修改IP包目的地址,后端机器的网关要设置成LVS的IP,否则数据没法返回。网关这个事有点坑爹,还是不要用NAT模式。DR和NAT都不够好,我觉得最好的是FULLNAT模式,配合OSPF,就组成了LVS+OSPF+FULLNAT集群,棒死了。

 先简单说下OSPF,抄下小米博客(http://noops.me/?p=974,很好的文章,可以参考,LVS用的是DR模式)的架构图:

构建基于LVS+OSPF+FULLNAT的前端负载均衡架构

好处有:

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

这里不说三层设备的OSPF配置和LVS机器的OSPF配置了,参考小米博客吧,哈哈哈。


小米博客中用到的是DR模式,我们用到的是FULLNAT模式,FULLNAT模式要重编LVS机器内核,这里说说如何重编。

1). 准备环境

2).  拿到源码

 

对于LVS,最好增加 HASH SIZE,否则请求量大的时候可能出现丢包情况。

 

3). 增加patch

4).改下内核子版本号。

5).修改内核启动参数
default=0,并在kernel一行中,添加“nohz=off ”(如果不关闭nohz,大压力下CPU0可能会消耗过高,压力不均匀)到/etc/grub.conf,重启。

编译内核重启之后,开始安装LVS TOOLS(编译完内核先重启机器加载新的内核,否则下面模块无法安装)

1). keepalived install

2). ipvsadm install

3). quaage install

4). 卸载有提权漏洞的gcc(在某些centos版本上有提权漏洞,最好卸载)

 因为我们用FULLNAT模式,所以在每台LVS机器上配置了28个local ip,对于一个请求LVS会选取一个IP和一个端口和后端机器(我们是NGINX)建立连接和转发数据,这样其实后端机器只能看到LVS的一个 local ip了,对了让后端机器看到源请求IP,后端机器要装toa模块,和LVS一样要重编内核,来看看编译过程。

重复一下编译LVS内核的1) 和2) 步骤,然后:

1). 增加patch

2). 编译和安装

3). 修改内核启动参数default=0,并在kernel一行中,添加“nohz=off ”(如果不关闭nohz,大压力下CPU0可能会消耗过高,压力不均匀)/etc/grub.conf,重启。

4).加载toa,把 modprobe toa 写在/etc/rc.d/rc.local

5). 卸载有提权漏洞的gcc(在某些centos版本上有提权漏洞,最好卸载)

 

  • 微信小程序
  • 关注微信小程序
  • weinxin
  • 微信公众号
  • 关注微信公众号
  • weinxin
Honest1y

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: