一、安装LVS

LVS的编译安装参考本站文章:http://www.linuxe.cn/post-192.html,对于LVS这种功能性软件,在生产中用yum安装也是没有问题的。

1 yum install ipvsadmin -y

LVS工具ipvsadm常用选项:

-l:列出所有负载均衡规则

-n:不进行dns解析

-C:清空所有规则

-A:增加一个虚拟服务器

-a:增加一个真实服务器

-S:保存规则

1 ipvsadm -Sn > /root/lvsrules.txt  #保存规则
2 cat /root/lvsrules.txt | ipvsadm -R  #恢复规则

二、LVS工作模式介绍

LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。

NAT模式:网络地址转换 
NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,数据的进出都要经过LVS的处理。LVS需要作为Real Server(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为Real Server的IP。Real Server接收到包以后,仿佛是客户端直接发给它的一样。Real Server处理完返回响应时,源IP是Real Server IP,目标IP是客户端的IP。这时Real Server的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端Real Server的存在。

DR模式:直接路由模式

请求由LVS接受,但是由Real Server返还给用户信息,不经过LVS转发。这里引申一个问题:当用户请求时,源IP是CIP,目标地址是VIP;LVS调度器将请求转发给Real Server处理后再发送给用户,这个时候源IP是RIP,目标地址是CIP,但是CIP在一开始并没有请求RIP,而用RIP去响应请求时CIP是不会接受的,所以就需要用VIP响应请求。

具体实现方法:DR模式下LVS和Real server都需要配备一样的VIP(VIP的MAC地址和物理网卡是一样的)(Real Server通过将VIP绑定在loopback实现),问题又来了,在一个网段内多台服务器出现同样IP地址会引起冲突,那么如何工作下去呢?需要在调度服务器上设置一个VIP一个DIP,每个Real Server也有一个RIP和一个VIP,但是Real Server的VIP地址做了隐藏,做了ARP抑制,不会应答广播,只在响应CIP时作为源地址使用。当产生请求时LVS将目标MAC地址修改为某台Real Server的MAC,该包就会被转发到相应的Real Server处理,此时源IP和目标IP都没变。Real Server收到LVS转发来的包时发现MAC是自己的,IP也是自己的,于是这个包被合法地接受。当Real Server返回响应时,只要直接向CIP返回即可,不再经过LVS。

三、LVS  DR模式搭建流程:

模拟环境如下:

DIP:192.168.36.10

VIP:192.168.36.100

RIP:192.168.36.15、192.168.36.16

1、首先Director服务器外网卡上配置VIP,并且添加一个路由条目,指明接收到该VIP的请求后交给谁处理

01 <pre class="brush: bash;auto-links: false;">ifconfig eth0:1 192.168.36.100 broadcast 192.168.36.100 netmask 255.255.255.255 up  #添加VIP,广播地址和VIP一样,注意子网掩码不要写错
02 route add -host 192.168.36.100 dev eth0:1 
03  
04 ifconfig
05 eth0      Link encap:Ethernet  HWaddr 00:0C:29:B1:5B:03 
06           inet addr:192.168.36.10  Bcast:192.168.36.255  Mask:255.255.255.0
07  
08 eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:B1:5B:03 
09           inet addr:192.168.36.100  Bcast:192.168.36.100  Mask:255.255.255.255
10  
11 lo        Link encap:Local Loopback 
12           inet addr:127.0.0.1  Mask:255.0.0.0
13           inet6 addr: ::1/128 Scope:Host
14           UP LOOPBACK RUNNING  MTU:65536  Metric:1
15           RX packets:29 errors:0 dropped:0 overruns:0 frame:0
16           TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
17           collisions:0 txqueuelen:0
18           RX bytes:2440 (2.3 KiB)  TX bytes:2440 (2.3 KiB)
19  
20 ping 192.168.36.100    #验证是否畅通
21 64 bytes from 192.168.36.100: icmp_seq=1 ttl=64 time=0.057 ms
22  
23 route add -host 192.168.36.100 dev eth0:1    #增加路由条目</pre>
24 <br>
25 <br>

2、使用ipvsadm工具配置Director和Real Server信息

1 [root@Server01 ipvsadm-1.26]# ipvsadm -A -t 192.168.36.100:80 -s rr    #指定LVS调度器的地址以及算法,-t代表tcp协议             
2 [root@Server01 ipvsadm-1.26]# ipvsadm -a -t 192.168.36.100:80 -r 192.168.36.15:80 -g    #指定Real Server的地址以及工作模式,-g代表DR模式
3 [root@Server01 ipvsadm-1.26]# ipvsadm -a -t 192.168.36.100:80 -r 192.168.36.16:80 -g

3、使用ipvsadm -L 可以检查一下配置结果

 

4、在每台Real Server上绑定VIP到回环网卡上,并增加路由条目

1 ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
2 route add -host $VIP dev lo:0

5、在每台Real Server上做ARP抑制,其中2个参数为arp_ignore、arp_announce。

arp_ignore(接收到ARP请求后的响应级别):

0:本地有相应地址就相应,无论在哪个接口

1:仅对请求的目标地址是在本地接口上才作响应,这样后端服务器回环地址上的IP不会去响应广播

arp_announce(向外回应自己网络地址):

0:在任意网络接口上的本地地址都向外响应

1:尽量使用与本地接口匹配的地址向外响应

2:仅使用与本地接口匹配的网络向外响应,效果和arp_ignore类似也是避免响应

ARP抑制的配置方法(也可以配置在/etc/sysctl.conf中):

1 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
2 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
3 echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
4 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

6、访问VIP地址测试,可以看到分别访问到了两台不同的服务器,实际生产环境中两个服务器上文件应该是一致的,这里为了测试效果,所以放了不同的文件区分,如果无法正常打开页面,查看下iptables的规则是否有清空

四、LVS NAT模式部署

使用LVS NAT模式需要保证集群中的服务器处于NAT网络中,下面是Centos部署NAT的方法

1、在后端每台服务器上将网关设置为LVS服务器地址

route add default gw 192.168.36.10

2、在LVS服务器上开启网络转发

echo net.ipv4.ip_forward =1 > /etc/sysctl.conf

sysctl -p

3、使用iptables转发

iptables -t nat -A POSTROUTING -s 192.168.36.0/24 -o ens33 -j MASQUERADE

4、NAT模式下无需配置ARP抑制

1 ifconfig ens33:1 192.168.36.100 netmask 255.255.255.0 up
2  
3 ipvsadm -A -t 192.168.36.100 -s rr
4 ipvsadm -a -t 192.168.36.100 -r 192.168.36.110  -m
5 ipvsadm -a -t 192.168.36.100 -r 192.168.36.120  -m

LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。的更多相关文章

  1. Lvs之NAT、DR、TUN三种模式的应用配置案例

    LVS 一.LVS简介     LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的 ...

  2. LVS负载均衡的三种模式和八种算法总结

    三种LVS负载均衡模式 调度器的实现技术中,IP负载均衡技术是效率最高的,IP虚拟服务器软件(IPVS)是在linux内核中实现的。 LVS负载均衡模式---1.NAT模式 NAT用法本来是因为网络I ...

  3. 三种LVS负载均衡技术的优缺点----负载均衡调度算法

    三种LVS负载均衡技术的优缺点归纳以下表: VS/NATVS/TUNVS/DR 服务器操作系统任意支持隧道多数(支持Non-arp) 服务器网络私有网络局域网/广域网局域网 服务器数目(100M网络) ...

  4. LVS负载均衡机制之LVS-DR模式工作原理以及简单配置

    本博文主要简单介绍一下LVS负载均衡集群的一个基本负载均衡机制:LVS-DR:如有汇总不当之处,请各位在评论中多多指出. LVS-DR原理: LVS的英文全称是Linux Virtual Server ...

  5. LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

    一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现 ...

  6. LVS负载均衡工作模式和调度算法

    原文链接:https://blog.csdn.net/weixin_40470303/article/details/80541639 一.LVS简介 LVS(Linux Virtual Server ...

  7. LVS负载均衡软件使用及(LVS简介、三种工作模式、十种调度算法)

    一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案, ...

  8. LVS 负载均衡 三种工作模式 十种调度算法

    原文链接:https://blog.csdn.net/weixin_40470303/article/details/80541639 一.LVS简介 LVS(Linux Virtual Server ...

  9. LVS负载均衡IP隧道模式原理介绍以及配置实战

    LVS 基本工作原理 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP,将数 ...

随机推荐

  1. HTMLHint 配置文件

    HTMLHint 工具可以对 HTML 代码做静态代码检查,从而保证 HTML 代码的规范和质量.HTMLHint 工具内置 23 条规则,建议在 .htmlhintrc 配置文件中将规则尽可能都打开 ...

  2. tps吞吐量映射的问题

    tps随着时间增加,吞吐量增加,但到达一定时间,吞吐不变,出现瓶颈,可能是以下原因 1/反应宽带问题 2/连接数释放问题 3/cpu占有率超出问题 4/内存不够问题 5/数据库连接屏蔽 用jmeter ...

  3. HashMap如何实现序列化

    /** * Save the state of the <tt>HashMap</tt> instance to a stream (i.e., * serialize it) ...

  4. [论文理解] Spatial Transformer Networks

    Spatial Transformer Networks 简介 本文提出了能够学习feature仿射变换的一种结构,并且该结构不需要给其他额外的监督信息,网络自己就能学习到对预测结果有用的仿射变换.因 ...

  5. leetcode-easy-design-384 Shuffle an Array

    mycode class Solution(object): def __init__(self, nums): """ :type nums: List[int] &q ...

  6. 全面解读php-php会话控制技术

    一.PHP会话控制技术 1.为什么要使用会话控制技术? 因为http协议是无状态协议,所以同一个用户在请求同一个页面两次的时候,http协议不会认为这两次请求都来自于同一个用户,会把它们当做是两次请求 ...

  7. CocoaPods 安装及使用(亲测有效)

    一.What is CocoaPods? CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It ...

  8. leetcode 分割回文串

    这个方法有问题,这是计算所有子串组成的所有回文子串:而不是所有分割的回文子串: class Solution { public: vector<vector<string>> ...

  9. 小程序的autocomplete

    1.别做单个组件的autocomplete了,很坑,牵扯的坑太多,最后碰到原生组件canvas会让人欲哭无泪 2.单个组件的路走不通,走新页面吧,点击input框,进入到下个页面,搜所后选择,点击完成 ...

  10. Python基本语法_函数_参数的多类型传值

    前言 上一篇主要介绍了Python函数的参数类型,本篇继续学习Python函数多类型传值. 目录 前言 目录 软件环境 参数的多类型传值 向函数传递Tuple 向函数传递List 向函数传递Dicti ...