LVS简介
支持IPVS的集群负载均衡器和集群节点一起称为Linux Virtual Server
LVS基本原理
LVS集群负载平衡器接受服务的所有入站客户端计算机请求, 集群并决定哪个集群节点应该回复给请求。负载平衡器有时被称 为LVS Director或者简称之为Director。 LVS集群内部的节点称为真实服务器(Real Server),也叫做集群节点。链接到集群请求集群服务的计算机称为客户端计算机。与计算机通常在网上交换数据包的方式相同,客户端计算机、Director和真实服务器使用IP地址进行彼此通信。
集群定义
是一种并行或分布式系统,该系统:包括一个互连的整体计算机集合,作为一种单一、统一的计算资源使用。
集群计算机按功能和结构可以分成以下几类:
高可用性集群 High-availability (HA) clusters
负载均衡集群 Load balancing clusters
高性能计算集群 High-performance (HPC) clusters
网格计算 Grid computing
LVS调度算法
动态调度方法
lc:最小连接,谁的小,挑谁
wlc:加权最小连接
sed:最短期望延迟
LBLC:基于本地的最少连接
LBLCR:基于本地的带复制功能的连接
四种静态
rr:轮叫,轮询
wrr:Weight,加权
sh:source hash,源地址hash ,源地址散列调度
dh:目标地址散列调度
NAT: 地址转换
集群节点跟director必须在同一个IP网络中
RIP通常是私有地址,仅用于各个集群节点间的通信
director位于client和 real server 之间,并负责处理进出的所有通信
realserver 必须将网关指向DIP
支持端口映射
realserver可以使用任意OS
较大规模应用场景中,director易成为系统瓶颈
规划:
Client |
Director |
Real Server 1 |
Real Server 2 |
|
IP |
172.16.0.345 |
eth0:172.16.86.1 eth1:192.168.86.1 |
eth0:192.168.86.3 |
eth0:192.168.86.4 |
通信模型图:
客户端的请求经路由到达Director,Director再转发到Real Server中的任意一个,Real Server回应的报文再经过网关通过路由到达客户端。
下面我们就用 HTTP服务为例子来讲解一下LVS-NAT 的实现吧。前端服务器配置VIP向外响应来自客户端的请求,后端两台Real Server运行web服务,应该在后端两台web上配置相同的网页,但是这里为了便于观察效果我们将两个网页内容配置的稍微有点差别,设置网关都指向192.168.86.1
实验步骤:
一、为Director、Real Server配置IP地址
RS1:
RS2:
Director以同样的方法配置其IP地址,其中内网的网卡类型也要设置成Host-only使其能与内网完成通信
二、为Real Server 安装web服务并配置网页
Real Server 1:
[root@server39 ~]# yum install httpd -y
[root@server39 ~]# echo RS2.magedu.com > /var/www/html/index.html #提供网页内容
[root@server39 ~]#service httpd start
[root@server39 ~]#curl http://localhost##测试网页
[root@server39 ~]#RS1.magedu.com
Real Server 2:
[root@server39 ~]# yum install httpd -y
[root@server39 ~]# echo RS2.magedu.com > /var/www/html/index.html #提供网页内容
[root@server39 ~]#service httpd start
[root@server39 ~]#curl http://localhost##测试网页
[root@server39 ~]#RS2.magedu.com
三、Director的相关配置
先介绍一下命令的应用:
ipvsadm:
管理集群服务
添加:-A -t|u|f service-address [-s scheduler]
-t:TCP协议的集群
-u:UDP协议的集群
service-address: IP:PORT
-f:FWM:防火墙标志
service-address: Mark Number
修改:-E
删除:-D -t|u|f service-address
# ipvsadm -A -t 172.16.86.1:80 -s rr
管理集群服务中的RS
添加:-a -t|u|f service-address -r service-address [-g|i|m] [-w weight]
-t|u|f service-address :事先定义好的吗,某集群服务器
-r service-address:某RS的地址,在NAT模型中,可使用IP:PORP实现端口映射
[-g|i|m]:LVS类型
-g:DR
-i:TUN
-m:NAT
[-w weight]:定义服务器权重
修改:-e
删除:-d -t|u|f service-address -r service-address
#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
查看:
-L|-l
-n:数字格式显示主机地址和端口
--stats:统计数据
--rate:速率
--timeout:显示tcp、tcpfin和udp的回话超时时长
-c:显示当前的ipvs连接状况
删除所有集群服务
-C:清空ipvs规则
保存规则:
-S
#ipvsadm -S > /path/to/somefile
载入此前规则
-R
#ipvsadm -R < /path/to/somefile
安装ipvsadm并配置命令:
[root@localhost ~]# yum install ipvsadm
[root@localhost ~]# service ipvsadm start
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
ipvsadm: Clearing the current IPVS table: [ OK ]
ipvsadm: Applying IPVS configuration: [ OK ]
[root@localhost ~]# ipvsadm -A -t 172.16.86.1:80 -s rr
[root@localhost ~]# ipvsadm -a -t 172.16.86.1:80 -r 192.168.86.3 -m ###-m表示为NAT模型
[root@localhost ~]# ipvsadm -a -t 172.16.86.1:80 -r 192.168.86.4 -m
[root@localhost ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.86.1:80 rr
-> 192.168.86.4:80 Masq 1 0 0
-> 192.168.86.3:80 Masq 1 0 0
[root@localhost ~]# ipvsadm -S > /etc/sysconfig/ipvsadm ##保存配置信息
[root@localhost ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.16.86.1:http -s rr
-a -t 172.16.86.1:http -r 192.168.86.4:http -m -w 1
-a -t 172.16.86.1:http -r 192.168.86.3:http -m -w 1
[root@localhost ~]#echo 1 > /proc/sys/net/ipv4/ip_forward ##打开路由转发功能
测试网页:
刷新网页:
DR: 直接路由
集群节点跟director必须同一个物理网络中
RIP可以使用公网地址,实现便捷远程管理和控制
director仅负责入站请求,响应报文则有real server直接发往客户端
real server 不能将网关指向DIP
不支持端口映射
规划:
Client |
Director |
Real Server 1 |
Real Server 2 |
|
IP |
172.16.0.345 |
eth0,dip: 172.16.86.2 eth0:0,vip:172.16.86.1 |
eth0,rip:172.16.86.3 lo:0,vip:172.16.86.1 |
eth0,rip:172.16.86.4 Lo:0,vip172.16.86.1 |
通信模型图:
客户机发出请求经过路由和交换机到达Director,Director然后再转发到Real Server中的任意一个,Real Server再负责响应报文经过交换机和路由器到达客户机。客户端的请求报文到达Director的vip上然后再转发到Real Server上,再由Real Server以vip作为源地址回应客户端请求,所以每个Real Server上都要配置vip,并配置特定的路由条目即可。Real Server上的vip对外是不可见的,所以在接收客户端的APR请求时是不与相应的。
实验步骤:
一、RS1和RS2的配置。
RS1和RS2的配置是相同的。下面就介绍RS1一个的配置吧。IP地址的配置和上面的NAT的配置一样,下面就该配置对ARP响应和向外通告的级了,首先介绍一下它的级别:
arp_ignore:定义接收到ARP请求时的相应级别;
0:只要本地配置的有相应的地址,就给予相应;
1:仅在请求的目标地址配置请求到达的接口上的时候,给予相应
arp_announce:定义将自己地址向外通告时的通告级别
0:将本地任何接口上的任何地址向外通告
1:试图仅向目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告
配置如下:
配置vip地址并添加特定路由信息,提供网页内容(和NAT中的相同)
[root@localhost ~]ifconfig lo:0 172.16.86.1 broadcast 172.16.86.1 netmask 255.255.255.255 up
[root@localhost ~]route add -host 172.16.86.1 dev lo:0
二、配置Director
首先是IP地址的配置,IP地址的配置和上面的都是相同的只是地址不一样而已,eth0:172.16.86.2、eth0:0:172.16.86.1,在这里就不给出配置信息了。
配置ipvsadm规则命令:
[root@localhost ~]# ipvsadm -A -t 172.16.86.1:80 -s wlc
[root@localhost ~]# ipvsadm -a -t 172.16.86.1:80 -r 172.16.86.3 -g -w 2
[root@localhost ~]# ipvsadm -a -t 172.16.86.1:80 -r 172.16.86.4 -g -w 1
添加路由条目:
[root@localhost ~]# route add -host 172.16.86.1 dev eth0:0
测试网页:
刷新:
访问比例是1 :2,即访问两次RS1.magedu.com后才访问一次RS2.magedu.com