最近项目上需要使用到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. 51nod 1577 异或凑数 线性基的妙用

    \(OTZgengyf\)..当场被吊打\(QwQ\) 思路:线性基 提交:\(3\)次 错因:往里面加数时\(tmp.p\)与\(i\)区分不清(还是我太菜了) 题解: 我们对每个位置的线性基如此操 ...

  2. MongoDB Wiredtiger存储引擎实现原理

    Mongodb-3.2已经WiredTiger设置为了默认的存储引擎,最近通过阅读wiredtiger源代码(在不了解其内部实现的情况下,读代码难度相当大,代码量太大,强烈建议官方多出些介绍文章),理 ...

  3. 十五.DNS子域授权、分离解析、缓存DNS服务器

    1.搭建基本DNS服务器 pc7: 1.1 安装软件包 ]# yum -y install bind-chroot bind bind         //域名服务包 bind-chroot  //提 ...

  4. Python2.7学习

    网上很多代码都不适用于python3版本,所以还是转回版本2来学习了 install 安装模块特别简单 E:\01_SOFT\Python27\python  -m easy_install sunb ...

  5. linux系列(五):rm命令

    rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf).所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西 ...

  6. python下载后出现python 已停止工作

    背景: 在执行IDLE或者在terminal窗口执行 python命令时出现如下提示,修改了防火墙关闭也不行,找不到解决办法? 如图: [解决方案] 1.卸载重装python,确保python版本与系 ...

  7. c++ 将字符串转换为数字

    int string2int(string x); int string2int(string x){ int a; string res=x; stringstream ss; ss << ...

  8. codeforces#1228E. Another Filling the Grid(容斥定理,思维)

    题目链接: https://codeforces.com/contest/1228/problem/E 题意: 给n*n的矩阵填数,使得每行和每列最小值都是1 矩阵中可以填1到$k$的数 数据范围: ...

  9. GitHub发卡系统zfaka配置历程

    GitHub发卡系统zfaka配置历程 1项目介绍 ​ ZFAKA发卡系统(本系统基于yaf+layui开发) ​ 项目地址 https://github.com/zlkbdotnet/zfaka 我 ...

  10. Lasso回归的坐标下降法推导

    目标函数 Lasso相当于带有L1正则化项的线性回归.先看下目标函数:RSS(w)+λ∥w∥1=∑Ni=0(yi−∑Dj=0wjhj(xi))2+λ∑Dj=0∣wj∣RSS(w)+λ∥w∥1=∑i=0 ...