最近项目上需要使用到IPVS进行负载均衡,针对外部传来的HTTP请求,分摊到多台服务器上进行处理,所以看了一下这方面的资料,在这里纪录一下。

Lvs是基于IP层和内容分发请求的负载均衡方法(所以也可以叫IPVS)。所谓负载均衡,就是分担给多个服务器进行处理。

IPVS有三种常见的负载均衡技术,NAT/DR/TUN 三种方式。也算是有各自的优劣点吧。

_ VS/NAT VS/TUN VS/DR
Server any Tunneling Non-arp device
server network private LAN/WAN LAN
server number low (10~20) High (100) High (100)
server gateway load balancer own router Own router
先放出官方对比的表。
因为是在内部网络下搭建的,所以我们使用的方法是在一台机器上面创建多个虚拟机的方式进行模拟多个机器的方式进行测试,这样可以避免中间因为网络情况复杂,而且对实践还不太明白的时候出现太多错误。

1.IPVS/NAT模式:这种模式下由一台负载均衡服务器充当网关,将消息转发给后台几台web server进行处理,后台服务器将对应的response回应给负载均衡服务器,再返回给各个用户,这样用户也不会感知到有实际服务器的存在,类似于反向代理。但是这种模式下的负载均衡服务器容易成为瓶颈。

在这里,我直接使用了负载均衡服务器充当了网关,所以后面几台服务器的路由都要指向它。

中间遇到的坑是:

(1)由于在虚拟机中按NAT分配的时候,会自动给虚拟网络的路由表分配一条指向默认网关的路由规则,如果直接添加的时候,会出现curl: (56) Recv failure: Connection reset by peer, 这种情况需要仔细检查下路由表。

2.IPVS/DR模式,这种模式下需要将负载均衡服务器和后台的real server在物理上在一个网段内。在负载均衡服务器接受到请求之后,可以直接将数据帧的MAC地址写成对应的选出的real server的mac地址。并且由该服务器直接返回给对应的请求者。

配置的时候主要要记得关闭real server的arp表发现和更新功能,这样可以避免request无法转发到合适的服务器。

3 IPVS/TUN模式,这种模式运用IP隧道模式,甚至可以直接在IP包外层封装IP包,再将对应的链接转发给指定的real server, 由对应的real server将IP包处理,关于包的细节可以用wireshark进行监听查看。

中间用WireShark抓的包如下图所示。

这里主要的坑是在设置webServer的时候,记得将 rp_filter  参数关闭掉。rp_filter的作用是控制系统是否开启对数据包源地址的校验,会检测反向路径是否是最佳路由路径(严格)/或者是否能通(宽松),不是就丢掉。如果不关掉可能会出现有些请求显示被转发给real server,但是对应的real server并没有响应纪录。

关于IPVS的几种负载均衡算法,这里只测试了rr/wrr/lc/wlc方式,而其他两种针对访问的目的地址去做负载均衡的方法,找了很多资料之后实在无法理解到,先纪录在这里。

关于IPVS的一些调试方法:

1、使用route和ping,tcpdump等工具检查对应的网络连接情况。

2、使用ipvsadm的命令查看转发情况和转发tcp/UDP状态

root@roaddb-VirtualBox:/home/roaddb# ipvsadm -l --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 10.69.142.28:http 100 564 432 40110 83556
-> 10.0.2.4:http 33 231 165 16995 37290
-> 10.0.2.5:http 33 231 165 16995 37290
-> 10.0.2.15:http 34 102 102 6120 8976
root@roaddb-VirtualBox:/home/roaddb# ipvsadm -l -c
IPVS connection entries
pro expire state source virtual destination
TCP 00:52 SYN_RECV 10.69.142.70:57004 10.69.142.80:http 10.69.142.73:http
3.检查对应的Nginx log确认转发的情况。

关于keepalived,keepalived主要用来做前端负载均衡服务器的备份,可以在负载均衡服务器挂掉的时候自动使用backup机进行替换,并且对后端的真实服务器可以起监督作用,当有真实服务器挂掉的时候,通过把权重置位0的方式迅速的切换过来。keepalived的原理是路由选举算法。文档地址:http://www.keepalived.org/doc/

keepalived的配置项中主要有两个配置要注意:

(1)inhibit_on_failure 这个参数主要是为了监视真实服务器的情况,在挂掉的情况下可以不转发给这个服务器,起起来的时候也可以重新配回规则

(2)persistence_timeout 这个是连接的粘连参数,可以在一段时间内把链接都转发给选定的服务器。

进一步进行备份的还有heartbeat等,说是比keepalived的功能更强大[doing]

参考连接网页:https://www.cnblogs.com/kevingrace/p/6248941.html
————————————————
版权声明:本文为CSDN博主「skiworld」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yanxiaobugyunsan/article/details/79265105

ubuntu 12.04 下LVS的一些搭建心得和资料整理的更多相关文章

  1. Ubuntu 12.04下PHP环境的搭建(LAMP)

    1.首先打开命令行,切换到root身份,获得最新的软件包 su root sudo apt-get install update 2.安装MySQL数据库 sudo apt-get install m ...

  2. Ubuntu 12.04下LAMP环境的搭建

    首先 apt-get install update 一下 sudo apt-get install update 安装MySQL 的服务端和客户端 sudo apt-get install mysql ...

  3. Angularjs学习---angularjs环境搭建,ubuntu 12.04下安装nodejs、npm和karma

    1.下载angularjs 进入其官网下载:https://angularjs.org/‎,建议下载最新版的:https://ajax.googleapis.com/ajax/libs/angular ...

  4. Ubuntu 12.04下Hadoop 2.2.0 集群搭建(原创)

    现在大家可以跟我一起来实现Ubuntu 12.04下Hadoop 2.2.0 集群搭建,在这里我使用了两台服务器,一台作为master即namenode主机,另一台作为slave即datanode主机 ...

  5. Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程

    Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程Linux版本:Ubuntu 12.04 内核版本:Linux 3.5.0 交叉编译器版本:arm-linux-gcc-4. ...

  6. 升级Ubuntu 12.04下的gcc到4.7

    我们知道C++11标准开始支持类内初始化(in-class initializer),Qt creator编译出现error,不支持这个特性,原因在于,Ubuntu12.04默认的是使用gcc4.6, ...

  7. 在Ubuntu 12.04下采用apt-get的方法安装Qt4

    在Ubuntu 12.04下采用apt-get的方法安装Qt4 注:之前发表的一篇博客是采用编译源码的方式安装Qt4,这是很有用的方式,因为源码安装对于所有系统都是通用的,其次,在使用交叉编译器的时候 ...

  8. Ubuntu 12.04下GAMIT10.40安装说明

    转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0225/164.html?1456481297 Ubuntu 12.04下GAMIT10.40安装步 ...

  9. [转]ubuntu(12.04)下, 命令 ,内核 源代码的获取

    [转]ubuntu(12.04)下, 命令 ,内核 源代码的获取 http://blog.chinaunix.net/uid-18905703-id-3446099.html 1.命令:例如:要查看l ...

随机推荐

  1. 织梦cms导航高亮显示栏目及首页的方法

    直奔主题了,高亮显示教程适用于您具有一定的CSS基础才可以了,前提把高亮显示的样式写好,然后再开始高亮显示标签适用. <li {dede:field name=typeid runphp=&qu ...

  2. UWB DWM1000 开源项目框架

    UWB 目前比较火热,不论国内还是国外目前都掀起一股热潮. 但是实际工程代码很少,开源代码更少. 目前代码主要有 1 DecaWave Release的定位源码,代码基于TWR,一个非常大的状态机. ...

  3. hive优化,控制map、reduce数量

    一.调整hive作业中的map数 1.通常情况下,作业会通过input的目录产生一个或者多个map任务.主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为1 ...

  4. 23 | MySQL是怎么保证数据不丢的?

    今天这篇文章,我会继续和你介绍在业务高峰期临时提升性能的方法.从文章标题“MySQL是怎么保证数据不丢的?”,你就可以看出来,今天我和你介绍的方法,跟数据的可靠性有关. 在专栏前面文章和答疑篇中,我都 ...

  5. Codeforces Round #574 (Div. 2)

    目录 Contest Info Solutions A. Drinks Choosing B. Sport Mafia C. Basketball Exercise D1. Submarine in ...

  6. @Autowired 与@Resource的区别详解

    spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...

  7. (转)实验文档5:企业级kubernetes容器云自动化运维平台

    部署对象式存储minio 运维主机HDSS7-200.host.com上: 准备docker镜像 镜像下载地址 复制 12345678910111213141516 [root@hdss7-200 ~ ...

  8. VM 虚拟机 CentOS 7 设置 桥接网络

    桥接网络的设置:   安装时设置网络为桥接网络!   找到 ip 地址,设置如下   注意ip地址并不是一样的,用以区分   然后在关闭 windows 防火墙,打开 cmd 使用 ping 命令 O ...

  9. Intellij IDEA常用配置记录

    换个IDE试试. 一个地址 http://intellij.mandroid.cn/ http://idea.imsxm.com/ http://idea.iteblog.com/key.php TO ...

  10. 【知识点】Java常用类库

    1.字符串 修改字符串内容用StringBuffer,没有“+”,需要用append(),否则用String 2.JVM 相关 Runtime,单例模式,通过getRuntime()获取实例,可以调用 ...