Linux系统(四)负载均衡LVS集群之NAT模式
序言
提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇。章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建和丰富。到1999年,该款软件已在负载均衡领域中比较出名,章文嵩仍旧坚持开源,将源代码分享给所有人。好人自有好归宿,章博士在2016年5月27日,去滴滴出任高级副总裁、负责CTO线基础平台部兼工程技术委员会主席。在来滴滴之前,章博士曾在阿里任职近七年,历任淘宝网资深技术总监、淘宝技术委员会主席、阿里副总裁、阿里开源委员会主席、阿里云CTO等。
那扯那么多LVS是个什么呢?
他是Linux Virtual Server的缩写,是一个虚拟的服务器集群系统,总之为使用集群技术来和Linux系统来实现一个高可用,高性能的服务器。如果进一步的扯淡,建议百度百科一下,里面清清楚楚,如果你看百科看不懂,那你加左上角的技术群,去跟里面的大神聊聊吧。这里我附带一个直通章博士的LVS中文站点:http://zh.linuxvirtualserver.org/。
LVS 集群分为三层结构:
- 负载调度器(load balancer):它是整个LVS 集群对外的前端机器,负责将client请求发送到一组服务器[多台LB IP]上执行,而client端认为是返回来一个同一个IP【通常把这个IP 称为虚拟IP/VIP】
- 服务器池(server pool):一组真正执行client 请求的服务器,一般是我们的web服务器;除了web,还有FTP,MAIL,DNS
- 共享存储(shared stored):它为 server pool 提供了一个共享的存储区,很容易让服务器池拥有相同的内容,提供相同的服务
LVS NAT模式简述
章文嵩博士的博文在这里,瞅瞅吧。http://www.linuxvirtualserver.org/zh/lvs3.html
接下来我们的示例,就采用如下ip配置部署。
具体数据包路由走向,参考我的文章 VMware虚拟网络连接模式详解(NAT,Bridged,Host-only) 中的nat网络连接方式。
NAT模式的几个要点
- dip这台服务器为分发服务器,他拥有2个ip一个客户访问的外网ip,一个ip作为vip真实服务器的网关地址,且真实服务器必须在一个网段中。
- 分发服务器上安装支持负载均衡各种算法的软件,来实现负载转发功能。
- 分发服务器还需要打开路由转发功能。
- 中RIP真实服务器可以使用任何的操作系统,但都需使用私有网络。
- NAT网络连接方式的弊端也是lvs nat模式的性能瓶颈所在,就是分发服务器转发所有的请求到真实服务器与转发请求响应数据到客户端,这样就是一个性能瓶颈。
LVS NAT模式配置操作
1、准备工作,3台服务器。一台用作Director server。2台用作real server。如上图。
2、配置Director server为双ip
[root@localhost ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.222.131 netmask 255.255.255.0 broadcast 192.168.222.255
inet6 fe80::20c:29ff:feaf:ff3a prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:af:ff:3a txqueuelen 1000 (Ethernet)
RX packets 53298 bytes 4735958 (4.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2690 bytes 453988 (443.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.136 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::20c:29ff:feaf:ff44 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:af:ff:44 txqueuelen 1000 (Ethernet)
RX packets 11269 bytes 882315 (861.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1502 bytes 294418 (287.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 查看eth1具体配置,eth0为nat连网方式,不需要修改,eth1为host-only模式,需要修改为静态ip,且配置ip地址。
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
IPADDR="192.168.2.136"
NETMASK="255.255.255.0"
- 设置Director server,开启路由转发功能
[root@localhost network-scripts]# echo "1">"/proc/sys/net/ipv4/ip_forward"
- 在Director server上安装lvs管理工具:ipvsadmin,ipvsadmin这个工具稍后会深入一下。
[root@localhost ~]# yum install ipva
- 配置负载均衡规则为轮询
[root@localhost ~]# ipvsadm -C --清空转发规则
[root@localhost ~]# ipvsadm -A -t 192.168.222.131:80 -s rr --131上一单有80端口的tcp请求,即使用rr表示转发策略为轮询的方式转发给一下的真实服务器,这里有好多负载均衡转发算法,在下面会介绍下。
[root@localhost ~]# ipvsadm -a -t 192.168.222.131:80 -r 192.168.2.130 -m
[root@localhost ~]# ipvsadm -a -t 192.168.222.131:80 -r 192.168.2.129 -m
- 到此Director server已经全部配置完毕。
3、配置Real server。real server为host-only模式,这里要做的就很简单啦。
- 配置ip为静态ip,且网关为Director server的内网ip
[root@localhost network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="192.168.2.130"
NETMASK="255.255.255.0"
GATEWAY="192.168.2.136"
- 2台real server的网络设置一样,只是ip不一样而已。这里不一一列出,如上配置即可。
- 安装nginx ,安装之后修改页面,打开80端口即可。
4、看下结果,在主机上用浏览器打开。http://192.168.222.131/ ,不断刷新页面即可看到来到2个real server的不同web站点的网页。
[root@localhost ~]# curl 192.168.222.131
192.168.222.130:A
[root@localhost ~]# curl 192.168.222.131
192.168.2.129 c
[root@localhost ~]# curl 192.168.222.131
192.168.222.130:A
[root@localhost ~]# curl 192.168.222.131
192.168.2.129 c
5、到此,lvs的nat模式的配置实现也已完成,这个配置其实很简单的,对吧。哈哈。
ipvsadmin工具命令讲解
ipvsadm 参数详解
- -A (--add-service) 在内核的虚拟服务器列表中添加一条新的虚拟IP记录。也就是增加一台新的虚拟服务器。虚拟IP也就是虚拟服务器的IP地址。
- -E (--edit-service) 编辑内核虚拟服务器列表中的一条虚拟服务器记录
- -D (--delete-service) 删除内核虚拟服务器列表中的一条虚拟服务器记录
- -C (--clear) 清除内核虚拟服务器列表中的所有规则
- -R (--restore) 恢复虚拟服务器规则
- -S (--save) 保存虚拟服务器规则,输出为-R 选项可读的格式
- -a (--add-server) 在内核虚拟服务器列表的一条记录里添加一条新的Real Server记录。也就是在一个虚拟服务器中增加一台新的Real Server
- -e (--edit-server) 编辑一条虚拟服务器记录中的某条Real Server记录
- -d (--delete-server) 删除一条虚拟服务器记录中的某条Real Server记录
- -L|-l –list 显示内核中虚拟服务器列表
- -Z (--zero) 虚拟服务器列表计数器清零(清空当前的连接数量等)
- --set tcp tcpfin udp 设置连接超时值
- -t 说明虚拟服务器提供的是tcp服务,此选项后面跟如下格式:[virtual-service-address:port] or [real-server-ip:port]
- -u 说明虚拟服务器提供的是udp服务,此选项后面跟如下格式:[virtual-service-address:port] or [real-server-ip:port]
- -f fwmark 说明是经过iptables标记过的服务类型
- -s 此选项后面跟LVS使用的调度算法,有这样几个选项: rr|wrr|lc|wlc|lblc|lblcr|dh|sh,默认的调度算法是: wlc
- -p [timeout] 在某个Real Server上持续的服务时间。也就是说来自同一个用户的多次请求,将被同一个Real Server处理。此参数一般用于有动态请求的操作中,timeout 的默认值为360 分钟。例如:-p 600,表示持续服务时间为600分钟。
- -r 指定Real Server的IP地址,此选项后面跟格式: [real-server-ip:port]
- -g (--gatewaying) 指定LVS 的工作模式为直接路由模式(此模式是LVS 默认工作模式)
- -i (-ipip) 指定LVS 的工作模式为隧道模式
- -m (--masquerading) 指定LVS 的工作模式为NAT模式
- -w (--weight) weight 指定Real Server的权值
- -c (--connection) 显示LVS目前的连接信息 如:ipvsadm -L -c
- -L --timeout 显示“tcp tcpfin udp”的timeout值,如:ipvsadm -L --timeout
- -L --daemon 显示同步守护进程状态,例如:ipvsadm -L –daemon
- -L --stats 显示统计信息,例如:ipvsadm -L –stats
- -L --rate 显示速率信息,例如:ipvsadm -L --rate
- -L --sort 对虚拟服务器和真实服务器排序输出,例如:ipvsadm -L --sort
保存添加的虚拟ip记录和ipvsadm的规则可以使用service ipvsadm save,还可以用-S或--save。清除所有记录和规则除了使用-C,还以使用--clear。
下面列出几个常用的查询。
1、查看记录和规则
[root@localhost network-scripts]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.222.131:80 rr
-> 192.168.2.129:80 Masq 1 1 0
-> 192.168.2.130:80 Masq 1 0 0
InActConn:
指非活跃连接数,我们将处于 TCP ESTABLISH
状态以外的连接都称为不活跃连接。例如处于 SYN_RECV
状态的连接,处于 TIME_WAIT
状态的连接等。
ActiveConn:是活动连接数,也就是tcp连接状态的ESTABLISHED;
Weight:轮询权重
2、选项是统计自该条转发规则生效以来的包
[root@localhost network-scripts]# ipvsadm -L --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.222.131:http 50 263 134 46273 20519
-> 192.168.2.129:http 32 178 83 31215 13069
-> 192.168.2.130:http 18 85 51 15058 7450
Conns (connections scheduled) : 已经转发过的连接数
InPkts (incoming packets) :入包个数
OutPkts (outgoing packets) : 出包个数
InBytes (incoming bytes) :入流量(字节)
OutBytes (outgoing bytes) : 出流量(字节)
3、显示速率信息
[root@localhost network-scripts]# ipvsadm -L --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 192.168.222.131:http 0 1 0 216 87
-> 192.168.2.129:http 0 1 0 212 85
-> 192.168.2.130:http 0 0 0 4 2
CPS (current connection rate) :每秒连接数
InPPS (current in packet rate) : 每秒的入包个数
OutPPS (current out packet rate): 每秒的出包个数
InBPS (current in byte rate) : 每秒入流量(字节)
OutBPS (current out byte rate) 每秒入流量(字节)
lvs中的集中调度模式
1、rr(round robin:轮询。 --在服务器池中无穷的循环遍历。
2、wrr(weighted round robin):权重轮询法。 --根据权重值,来分配请求连接,处理的请求连接数与权重值的比率一致。
3、lc(least-connection):最少连接法。 --当请求到达director时,director查看活动和非活动的连接数量,以确定把请求分发给哪个服务器,director将集群节点目前的活动连接数量x256再加上不活动的连接数量,得到借点的开销值。最低开销值的节点胜出,被分发给新的入站请求。(如果开销一样,则第一个节点被选中)。
4、wlc(weighted least-connection):带权重的最少连接法。 --先如lc算出集群节点的开销值,然后除以分配给其的权重值,最小值节点胜出,将入站请求分发给它。
5、lblc(locality-based least-connection):基于本地的最少连接法。 --基于局部的最小连接,当realserver是缓存服务器的时候用的比较多。
6、lblcr(locality-based least-connection with replication):带复制的基于局部的最小连接。 --当realserver是缓存服务器的时候用的比较多。
7、dh(destination hashing):目标散列法
8、sh(source hashing):源散列法。 --同一个ip的客户端总是分发给同一个realserver。相当于有客户粘性,与nginx中的iphash一致。
9、sed(shortest expected delay):最短预期延迟法。 --最短延时预测(ci+1)/ui,ci是连接数,ui是权重值。在wlc方法上做啦轻微改进,这些服务使用tcp,而且当群节点在处理每个请求时保持在活动状态。计算方法:每个集群节点的的开销值是通过将活动的连接数+1计算的。然后开销值除以分配权重值,得到的就是sed值,值少的集群节点胜出。
10、nq(never queue):永不排队法。 --没有队列,分配请求给空闲的服务器,没有空闲的服务器就找响应最快的。
总结
接下来是大家最喜欢的总结内容啦,内容有三,如下:
1、希望能关注我其他的文章。
2、博客里面有没有很清楚的说明白,或者你有更好的方式,那么欢迎加入左上方的2个交流群,我们一起学习探讨。
3、你可以忘记点赞加关注,但千万不要忘记扫码打赏哦。
Linux系统(四)负载均衡LVS集群之NAT模式的更多相关文章
- Linux系统(五)负载均衡LVS集群之DR模式
序言 DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为什么还要有DR模式与IP隧道模式呢? 首先我们来看3张图.LVS/NAT模式如下图: LVS/I ...
- LVS集群之NAT模式实现
LVS集群之NAT模式实现 一.集群的种类 集群系统主要分为 1.HA:高可用集群,又叫双机热备. (a)原理 2台机器A,B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至 ...
- LVS集群之NAT模式实例(3)
LVS集群NAT模式实例 1. 实验拓扑图 DS 必须有两块网卡,需要在上面做NAT. 2. 实验环境 3台CentOS6.4 64bit的服务器. 类型 IP DR eth0:10.20.73.20 ...
- 负载均衡LVS集群详解
一.LB--负载均衡 在负载均衡集群中需要一个分发器,我们将其称之为Director,它位于多台服务器的上面的中间层,根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来进行响应请求,而其 ...
- LVS集群之NAT模式
集群的分类: (1)HA:高可用集群,有叫双机热备 原理:两台机器A.B,正常是A提供服务,当A机宕机或者服务有问题时,会切换到B机继续提供服务常用的高了永软件:heartbeat和keepalive ...
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)
1.熟悉几个组件 1.1.apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...
- Apache配置反向代理、负载均衡和集群(mod_proxy方式)
Apache配置负载均衡和集群使用mod_jk的方式比较多,但是mod_jk已经停止更新,并且配置相对复杂.Apache2.2以后,提供了一种原生的方式配置负载均衡和集群,比mod_jk简单很多. 1 ...
- Dubbo负载均衡与集群容错机制
1 Dubbo简介 Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 作为一个轻量级RPC框架,D ...
- 基于Apache的Tomcat负载均衡和集群(2)
反向代理负载均衡 (Apache+JK+Tomcat) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式 ...
随机推荐
- IOS开发-ObjC-对象、封装
C语言是基于过程的一种编程语言,而OC语言是基于对象的一种语言. C是和其他的面向对象的语言的区别在于C语言更注重地层操作,思维方式相比面向对象的语言而言更接近机器的思维方式,而面向对象的语言更接近于 ...
- Android Studio文件目录介绍
一.安装的时候并不理解很多东西的用处,只是根据教程来做,所以想整理一下思路: android sdk里的各目录作用: 1.AVD Manager.exe:虚拟机管理工具,用于建立和管理虚拟机. 2.S ...
- Django with uWSGI and nginx
Reference:http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html Setting up Dja ...
- 在ubtuntu中使用包管理器 linux-brew
用惯了mac的程序员回到linux开发平台总觉得有点不适应,这是因为linux的界面没有mac那么精美,而且linux的包管理器没有mac上面的homebrew那么强大.mac程序员遇到库的依赖问题时 ...
- 创建 github 仓库
1. 创建入口 在右上角找到 “+” 然后,选择 “New repository” 进行创建. 2. 填入信息 输入名字和描述 . 选择 “Initialize this repository wit ...
- 分布式cookie-session的实现(spring-session)
分布式cookie-session的实现(spring-session) 本文使用的spring-session版本为 1.0.0,地址为: https://github.com/spring-pro ...
- 超炫的时间轴jquery插件Timeline Portfolio
Timeline Portfolio是一款按时间顺序专业显示事件的jquery时间轴插件,可以根据时间的先后嵌入各种媒体包括微博,视频和地图等.这个展现的模式非常适合设计师的作品集和个人简历的展示.T ...
- 建立、配置和使用Activity——Activity
Activity是Android应用中最重要.最常见的应用组件(此处的组件是粗粒度的系统组成部分,并非指界面控件:widget).Android应用的一个重要组成部分就是开发Activity,下 面将 ...
- onfocus在火狐、ie10浏览器失效解决方法方法
<script> function setit(){ if(document.all){ document.getElementById("myfr ...
- 【原】小写了一个cnode的小程序
小程序刚出来的第一天,朋友圈被刷屏了,所以趁周末也小玩了一下小程序.其实发觉搭建一个小程序不难,只要给你一个demo,然后自己不断的查看文档,基本就可以入门了,不过对于这种刚出来的东西,还是挺多坑的, ...