LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。
一、安装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模式性能最为优越,使用最为广泛。的更多相关文章
- Lvs之NAT、DR、TUN三种模式的应用配置案例
LVS 一.LVS简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的 ...
- LVS负载均衡的三种模式和八种算法总结
三种LVS负载均衡模式 调度器的实现技术中,IP负载均衡技术是效率最高的,IP虚拟服务器软件(IPVS)是在linux内核中实现的。 LVS负载均衡模式---1.NAT模式 NAT用法本来是因为网络I ...
- 三种LVS负载均衡技术的优缺点----负载均衡调度算法
三种LVS负载均衡技术的优缺点归纳以下表: VS/NATVS/TUNVS/DR 服务器操作系统任意支持隧道多数(支持Non-arp) 服务器网络私有网络局域网/广域网局域网 服务器数目(100M网络) ...
- LVS负载均衡机制之LVS-DR模式工作原理以及简单配置
本博文主要简单介绍一下LVS负载均衡集群的一个基本负载均衡机制:LVS-DR:如有汇总不当之处,请各位在评论中多多指出. LVS-DR原理: LVS的英文全称是Linux Virtual Server ...
- LVS负载均衡(LVS简介、三种工作模式、十种调度算法)
一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现 ...
- LVS负载均衡工作模式和调度算法
原文链接:https://blog.csdn.net/weixin_40470303/article/details/80541639 一.LVS简介 LVS(Linux Virtual Server ...
- LVS负载均衡软件使用及(LVS简介、三种工作模式、十种调度算法)
一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案, ...
- LVS 负载均衡 三种工作模式 十种调度算法
原文链接:https://blog.csdn.net/weixin_40470303/article/details/80541639 一.LVS简介 LVS(Linux Virtual Server ...
- LVS负载均衡IP隧道模式原理介绍以及配置实战
LVS 基本工作原理 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP,将数 ...
随机推荐
- HTMLHint 配置文件
HTMLHint 工具可以对 HTML 代码做静态代码检查,从而保证 HTML 代码的规范和质量.HTMLHint 工具内置 23 条规则,建议在 .htmlhintrc 配置文件中将规则尽可能都打开 ...
- tps吞吐量映射的问题
tps随着时间增加,吞吐量增加,但到达一定时间,吞吐不变,出现瓶颈,可能是以下原因 1/反应宽带问题 2/连接数释放问题 3/cpu占有率超出问题 4/内存不够问题 5/数据库连接屏蔽 用jmeter ...
- HashMap如何实现序列化
/** * Save the state of the <tt>HashMap</tt> instance to a stream (i.e., * serialize it) ...
- [论文理解] Spatial Transformer Networks
Spatial Transformer Networks 简介 本文提出了能够学习feature仿射变换的一种结构,并且该结构不需要给其他额外的监督信息,网络自己就能学习到对预测结果有用的仿射变换.因 ...
- leetcode-easy-design-384 Shuffle an Array
mycode class Solution(object): def __init__(self, nums): """ :type nums: List[int] &q ...
- 全面解读php-php会话控制技术
一.PHP会话控制技术 1.为什么要使用会话控制技术? 因为http协议是无状态协议,所以同一个用户在请求同一个页面两次的时候,http协议不会认为这两次请求都来自于同一个用户,会把它们当做是两次请求 ...
- CocoaPods 安装及使用(亲测有效)
一.What is CocoaPods? CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It ...
- leetcode 分割回文串
这个方法有问题,这是计算所有子串组成的所有回文子串:而不是所有分割的回文子串: class Solution { public: vector<vector<string>> ...
- 小程序的autocomplete
1.别做单个组件的autocomplete了,很坑,牵扯的坑太多,最后碰到原生组件canvas会让人欲哭无泪 2.单个组件的路走不通,走新页面吧,点击input框,进入到下个页面,搜所后选择,点击完成 ...
- Python基本语法_函数_参数的多类型传值
前言 上一篇主要介绍了Python函数的参数类型,本篇继续学习Python函数多类型传值. 目录 前言 目录 软件环境 参数的多类型传值 向函数传递Tuple 向函数传递List 向函数传递Dicti ...