最近项目上需要使用到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. linux系列(十九):firewall-cmd命令

    1.命令格式 firewall-cmd [选项] [参数] 2.命令功能: 简单来说是一个防火墙管理工具. 3.简单使用: systemctl start firewalld # 启动, system ...

  2. leetcode 198 动态规划

    题目意思是:给一组数组,要使选取的子数组和(不用连续)最大,但不能同时选取相邻. 我的思路: 对于a[i]来说,要么选取,要么不选取.假设选取a[i],那么肯定不能选取a[i-1],只能看前0~i-2 ...

  3. Shiro + Redis集成思路

    首先,确保Spring配置完毕了. 集成Shiro 1.在pom.xml中追加依赖 <dependency> <groupId>org.apache.shiro</gro ...

  4. CentOS7 升级Python2.x到3.x

    CentOS 7 中默认安装了 Python,版本比较低(2.7.5),为了使用新版 3.x,需要对旧版本进行升级.由于很多基本的命令.软件包都依赖旧版本,比如:yum.所以,在更新 Python 时 ...

  5. 如何利用awk累加第一列的值?

    以下是一个五行文件的例子: 1.[root@master yjt]# seq 5 |awk 'BEGIN{sum=0;print "总和:"}{if(NR<=4)printf ...

  6. A·F·O小记

    看过很多的游记,也看过很多的退役记.回忆录,而当自己真正去面对的那一刻,却又不知道从何说起,也不知道能用怎样的形式和语言,才能把这段珍贵的记忆封存起来,留作青春里的一颗璀璨明珠…… 还是随便写写吧…… ...

  7. LDAP的filter查询详解

    转: 等于(EQUAL TO):  =大于等于(Greater than):  >=小于等于(Less than):  <=通配符(wildcard):  *  逻辑运算符:逻辑与(log ...

  8. linux工程管理软件—make

    一.make概述     make是一种代码维护工具make工具会根据makefile文件定义的规则和步骤,完成整个软件项目的代码维护工作.一般用来简化编译工作,可以极大地提高软件开发的效率. win ...

  9. python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型

    线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...

  10. Android 定义和使用样式

    如图,在stryle.xml中定义样式 然后可以在布局文件中使用样式