运维集群cluster篇------1.集群及LVS简介 、 LVS-NAT集群 、 LVS-DR集群
知识点:
集群及LVS简介
LVS-NAT集群
LVS-DR集群
1.集群:高速网络互联的计算组;任务调度是核心技术
2.集群目的:提高性能、降低成本、提高可扩展性、增强可靠性
3.集群分类:高性能计算集群HPC(应用程序)、负载均衡LB集群(平均分摊)、高可用HA集群(避免单点故障)
4.LVS--linux虚拟服务器--章文崇--实现高可用、高性能、低成本、可伸缩的Web、Mail、Cache、Media等网络服务
5.LVS集群组成:
前端:负载均衡层(调度器)
中间:服务器群组层
底端:数据共享存储层
6.LVS术语:
Director Server:调度服务器(将负载分发到Real server的服务器)
Real Server : 真实服务器
VIP:虚拟IP地址
RIP:真实IP地址
DIP:调度器连接节点服务器的IP地址
7.LVS工作模式:
NAT模式:通过网络地址转换实现的虚拟服务器;大并发访问时,调度器的性能能成为瓶颈
TUN模式:通过隧道方式实现虚拟服务器
DR模式:直接使用路由技术实现虚拟服务器;节点服务器需要配置VIP,注意MAC地址广播
8.负载均衡调度算法
轮询(Round Robin)---------------将客户端请求平均分发到Real Server
加权轮询(Weighted Round Robin)---根据Real Server 权重值进行轮询调度
最少连接(Least Connetctions)-----选择连接最少的服务器
加权最少连接(Weight least connections)---根据Real Server权重值,选择连接数最少的服务器
源地址散列(Source Hashing)---------------根据请求的目标IP地址,作为散列键(Hash Key)从静态
分 配的散列表找出对应的服务器
其他调度算法
基于局部性的最少连接
带复制的基于局部性最少连接
目标地址散列
最短的期望的延迟
最少队列调度
LVS共有三种模式,优缺点比较如下:
NAT模式
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
不足:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。
TUN模式
我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
不足:但是,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。
DR模式
优点:和VS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux 2.0.36、2.2.9、2.2.10、2.2.12;Solaris 2.5.1、2.6、2.7;FreeBSD 3.1、3.2、3.3;NT4.0无需打补丁;IRIX 6.5;HPUX11等。
不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上
1.LVS-NAT集群
使用LVS实现NAT模式的集群调度服务器,为用户提供Web服务:
集群对外公网IP地址为202.114.106.20
调度器内网IP地址为192.168.0.254
真实Web服务器地址分别为192.168.0.1、192.168.0.2、192.168.0.3
使用加权轮询调度算法,真实服务器权重与其IP地址末尾数一致
2.LVS-DR集群(ipvsadm)
LVS的IP负载均衡技术是通过IPVS模块实现的,现在是linux的一部分
环境的准备:(1-4)
路由器对外公网IP地址为202.114.106.20
路由器内网IP地址为192.168.0.254
路由是需要设置SNAT及DNAT功能
LVS调度器真实IP地址为192.168.0.10
LVS调度器VIP地址设置为192.168.0.253
真实Web服务器地址分别为192.168.0.1、192.168.0.2
使用加权轮询调度算法,真实服务器权重与其IP地址末尾数一致
yum -y install ipvsadm
rpm -q ipvsadm
restart start ipvsadm
restart enable ipvsadm
190 which ipvsadm
191 ipvsadm --help
192 man ipvsadm
ipvsadm -v
ipvsadm用法(扩展):
***-A, --add-service:即添加一个需要被负载均衡的虚拟地址
***-t, --tcp-service service-address:指定虚拟服务为tcp服务
***-s, --scheduler scheduling-method:指定调度算法。调度算法可以指定以下8种:rr(轮询),wrr(权重),lc(最后连接),wlc(权重),lblc(本地最后连接),lblcr(带复制的本地最后连接),dh(目的地址哈希),sh(源地址哈希),sed(最小期望延迟),nq(永不排队)
***-a, --add-server:为虚拟服务添加一个real server(RS)
***-d, --delete-server:删除
***-r, --real-server server-address:为虚拟服务指定数据可以转发到的真实服务器的地址。可以添加端口号。如果没有指定端口号,则等效于使用虚拟地址的端口号。
***-g, --gatewaying:使用网关(即直接路由)()DR此模式是默认模式。
***-i, --ipip:使用ipip隧道(tun)模式。
***-m, --masquerading:使用NAT模式。
***-w, --weight weight:设置权重。权重是0~65535的整数。如果将某个真实服务器的权重设置为0,那么它不会收到新的连接,但是已有连接还会继续维持(这点和直接把某个真实服务器删除时不同的)。
***-E, --edit-service:修改一个虚拟服务。
***-D, --delete-service:删除一个虚拟服务。
***-C, --clear:清除所有虚拟服务。
***-p, --persistent [timeout]:设置持久连接,这个模式可以使来自客户的多个请求被送到同一个真实服务器,通常用于ftp或者ssl中
-R, --restore从标准输入获取ipvsadm命令。一般结合下边的-S使用。
-S, --save:从标准输出输出虚拟服务器的规则。可以将虚拟服务器的规则保存,在以后通过-R直接读入,以实现自动化配置。
-e, --edit-server:修改RS
-L, -l, --list:列出虚拟服务表中的所有虚拟服务。可以指定地址。添加-c显示连接表。
-Z, --zero:将所有数据相关的记录清零。这些记录一般用于调度策略。
。service-address要是host[:port]的形式。端口是0表示任意端口。如果需要将端口设置为0,还需要加上-p选项(持久连接)。
-u, --udp-service service-address:使用udp服务,其他同上。
-f, --fwmark-service integer:用firewall mark取代虚拟地址来指定要被负载均衡的数据包,可以通过这个命令实现把不同地址、端口的虚拟地址整合成一个虚拟服务,可以让虚拟服务器同时截获处理去往多个不同地址的数据包。fwmark可以通过iptables命令指定。如果用在ipv6需要加上-6。
。
-M, --netmask netmask:指定客户地址的子网掩码。用于将同属一个子网的客户的请求转发到相同服务器。
[packet-forwarding-method]:此选项指定某个真实服务器所使用的数据转发模式。需要对每个真实服务器分别指定模式。
-x, --u-threshold uthreshold:设置一个服务器可以维持的连接上限。0~65535。设置为0表示没有上限。
-y, --l-threshold lthreshold:设置一个服务器的连接下限。当服务器的连接数低于此值的时候服务器才可以重新接收连接。如果此值未设置,则当服务器的连接数连续三次低于uthreshold时服务器才可以接收到新的连接。
193 ipvsadm -A -t 192.168.2.33:80 -s rr
194 ipvsadm -a -t 192.168.2.33:80 -s r 192.168.4.44:80 -m
195 ipvsadm -a -t 192.168.2.33:80 -r 192.168.4.44:80 -m
196 ipvsadm -a -t 192.168.2.33:80 -r 192.168.4.55:80 -m
197 service ipvsadm save #保存所有规则
198 cat /etc/sysconfig/ipvsadm
199 chkconfig --list ipvsadm
200 chkconfig ipvsadm on
201 chkconfig --list ipvsadm
202 ipvsadm -L
203 ipvsadm -nL
204 ipvsadm -Ln #查看IPVS
[[email protected] ~]# ipvsadm -A -t 192.168.0.254 -s wrr -p 30
[[email protected] ~]# ipvsadm –a -t 192.168.0.254 -r 192.168.0.1 -m -w 1
[[email protected] ~]# ipvsadm –a -t 192.168.0.254 -r 192.168.0.2 -m -w 2
[[email protected] ~]# ipvsadm –a -t 192.168.0.254 -r 192.168.0.3 -m -w 3
[[email protected] ~]# ipvsadm –a -t 192.168.0.254 -r 192.168.0.4 -m -w 4
[[email protected] ~]# ipvsadm -E -t 192.168.0.254 -s sh -p 30 #修改集群设置
[[email protected] ~]# ipvsadm –a -t 192.168.0.254 -r 192.168.0.1 -m # 修改真实服务器
ipvsadm -Ln #查看IPVS
197 service ipvsadm save #保存所有规则
[[email protected] ~]# ipvsadm –C #清空所有
elinks --dump http://192.168.4.96/test.html
二.
二. 配置分发器
2.1.绑定VIP地址
# ifconfig eth0:1 192。168.4.96/32
# ifconfig eth0:1
2.2 添加linux虚拟服务 ,并添加
272 ifconfig eth0:1
273 ifconfig eth0:1 192.168.4.96/32
274 ifconfig eth0:1
275 ipvsadm -A -t 192.168.4.96:80 -s rr
276 ipvsadm -a -t 192.168.4.96:80 -r 192.168.4.44:80 -g
277 ipvsadm -Ln
278 ipvsadm -a -t 192.168.4.96:80 -r 192.168.4.55:80
279 ipvsadm -Ln
280 service ipvsadm save
281 cat /etc/sysconfig/ipvsadm
282 ipvsadm -Ln --stats
*********************************************************************************
部署LVS-DR集群
3.1 问题
使用LVS实现DR模式的集群调度服务器,为用户提供Web服务:
路由器对外公网IP地址为202.114.106.20
路由器内网IP地址为192.168.0.254
路由是需要设置SNAT及DNAT功能
LVS调度器真实IP地址为192.168.0.10
LVS调度器VIP地址设置为192.168.0.253
真实Web服务器地址分别为192.168.0.1、192.168.0.2
使用加权轮询调度算法,真实服务器权重与其IP地址末尾数一致
3.2 方案
使用4台虚拟机,1台作为Linux路由器、1台作为Director调度器、2台作为Real Server、物理机作为客户端,拓扑结构如图-2所示。
图-2
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:配置网络环境
1)设置Web服务器网络参数
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.20
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.253
NETMASK=255.255.255.255
[[email protected] ~]# vim /etc/sysctl.conf
.. ..
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[[email protected] ~]# sysctl -p
[[email protected] ~]# systemctl restart NetworkManager
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.2
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.20
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.253
NETMASK=255.255.255.255
[[email protected] ~]# vim /etc/sysctl.conf
.. ..
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[[email protected] ~]# sysctl -p
[[email protected] ~]# systemctl restart NetworkManager
2)自定义Web页面
[[email protected] ~]# echo “192.168.0.1” > /var/www/html/index.html
[[email protected] ~]# echo “192.168.0.2” > /var/www/html/index.html
3)启动Web服务器软件
[[email protected] ~]# systemctl start httpd; systemctl enable httpd
[[email protected] ~]# systemctl start httpd; systemctl enable httpd
4)设置LVS调度器网络参数
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.10
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.20
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.253
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.20
[[email protected] ~]# systemctl restart NetworkManager
5)设置Linux路由器网络参数
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=202.114.106.20
DNS1=202.106.0.20
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.254
NETMASK=255.255.255.0
DNS1=202.106.0.20
[[email protected] ~]# systemctl restart NetworkManager
6)设置Linux路由器的SNAT、DNAT功能
[[email protected] ~]# sed -i '/ip_forward/s/0/1/' sysctl.conf //开启路由转发
[[email protected] ~]# sysctl -p
[[email protected] ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -p tcp –j SNAT --to-source 202.114.106.20
[[email protected] ~]# iptables -t nat -A PREROUTING -d 202.114.106.20 -p tcp --dport 80 –j DNAT --to-destination 192.168.0.253:80
[[email protected] ~]# service iptables save
步骤二:调度器安装软件并启动服务
1)安装软件
[[email protected] Packages]# rpm –ihv ipvsadm-1.25-10.el6.x86_64.rpm
2)启动服务
[[email protected] Packages]# systemctl start ipvsadm
[[email protected] Packages]# systemctl enable ipvsadm
步骤三:部署LVS-DR模式调度器
1)创建集群服务器
[[email protected] ~]# ipvsadm -A -t 192.168.0.253:80 -s wrr
2)添加真实服务器
[[email protected] ~]# ipvsadm -a -t 192.168.0.253:80 -r 192.168.0.1 -g -w 1
[[email protected] ~]# ipvsadm -a -t 192.168.0.253:80 -r 192.168.0.2 -g -w 2
3)查看规则列表,并保存规则
[[email protected] ~]# ipvsadm –Ln
[[email protected] ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
步骤四:客户端测试
客户端使用curl命令反复连接http://202.114.106.20,查看访问的页面是否会轮询到不同的后端真实服务器。