赞
踩
• 将很多服务器集中起来一起,提供同一种服务,在客
户端看来就象是只有一个服务器
• 可以在付出较低成本的情况下获得在性能、可靠性、
灵活性方面的相对较高的收益
• 一组通过高速网络互联的计算组,并以单一系统的模
式加以管理
• 任务调度是集群系统中的核心技术
• 提高性能
– 如计算密集型应用,如:天气预报、核试验模拟
• 降低成本
– 相对百万美元级的超级计算机,价格便宜
• 提高可扩展性
– 只要增加集群节点即可
• 增强可靠性
– 多个节点完成相同功能,避免单点失败
• 高性能计算集群HPC
– 通过以集群开发的并行应用程序,解决复杂的科学问题
• 负载均衡(LB)集群
– 客户端负载在计算机集群中尽可能平均分摊
• 高可用(HA)集群
– 避免单点故障,当一个系统发生故障时,可以快速迁移
• 前端:负载均衡层
– 由一台或多台负载调度器构成
• 中间:服务器群组层
– 由一组实际运行应用服务的服务器组成
• 底端:数据共享存储层
– 提供共享存储空间的存储区域
• Director Server:调度服务器
– 将负载分发到Real Server的服务器
• Real Server:真实服务器
– 真正提供应用服务的服务器
• VIP:虚拟IP地址
– 公布给用户访问的虚拟IP地址
• RIP:真实IP地址
– 集群节点上使用的IP地址
• DIP:调度器连接节点服务器的IP地址
• VS/NAT
– 通过网络地址转换实现的虚拟服务器
– 大并发访问时,调度器的性能成为瓶颈
• VS/DR
– 直接使用路由技术实现虚拟服务器
– 节点服务器需要配置VIP,注意MAC地址广播
• VS/TUN
– 通过隧道方式实现虚拟服务器
• LVS目前实现了10种调度算法
• 常用调度算法有5种
– 轮询(Round Robin)
– 将客户端请求平均分发到Real Server
– 加权轮询(Weighted Round Robin)
– 根据Real Server权重值进行轮询调度
– 最少连接(Least Connections)
– 选择连接数最少的服务器
– 加权最少连接( Weighted Least Connections )
– 根据Real Server权重值,选择连接数最少的服务器
– 源地址散列(Source Hashing)
– 根据请求的目标IP地址,作为散列键(Hash Key)从静态分配
的散列表找出对应的服务器
• 其他调度算法
– 基于局部性的最少链接
– 带复制的基于局部性最少链接
– 目标地址散列(Destination Hashing)
– 最短的期望的延迟
– 最少队列调度
• LVS的IP负载均衡技术是通过IPVS模块实现的
• IPVS模块已成为Linux组成部分
[root@svr1 ~]# grep -i 'ipvs' /boot/config-3.10.0-327.el7.x86_64
# IPVS transport protocol load balancing support
# IPVS scheduler
# IPVS SH scheduler
# IPVS applicaLon helper
• 使用yum命令安装ipvsadm
[root@node1 ~]# yum -y install ipvsadm.x86_64
• 查看ipvsadm软件版本
[root@node4 ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
– -A --add-service 添加虚拟服务器
– -t --tcp-service 设置群集地址(VIP,Virtual IP)
– -s --scheduler 指定负载调度算法
[root@svr1 ~]# ipvsadm -A -t 172.16.16.172:80 -s rr
– -a --add-server 添加真实服务器
– -d --delete-server 删除真实服务器
– -r --real-server 指定真实服务器(Real Server)的地址
– -m --masquerading 使用NAT模式;-g、-i分别对应DR、TUN模式
– -w --weight 为节点服务器设置权重,默认为1
[root@svr1 ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m
[root@svr1 ~]# ipvsadm -d -r 192.168.7.24:80 -t 172.16.16.172:80 -m
[root@svr1 ~]# ipvsadm -Ln
TCP 172.16.16.172:80 rr
-> 192.168.7.21:80 Masq 1 2 7
-> 192.168.7.24:80 Masq 1 4 6
• Real Server:
– 配置WEB服务器 【ip为192.168.10.11、192.168.10.12 两台web服务器网关配为192.168.10.254。如果不配网关,数据包就传不到客户端】
• Director Server:
– 在上安装并启用ipvsadm
– 创建虚拟服务器
– 向虚拟服务器中加入节点
• Client:
– 连接虚拟服务器测试
1.在lvs上打开ip_forward
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@svr1 ~]# sysctl -p //重新加载配置,这个文件是/proc/sys目录下的映射
2.启动ipvsadm
[root@svr1 ~]# systemctl start ipvsadm
[root@svr1 ~]# systemctl enable ipvsadm
3.创建虚拟服务器,VIP为10.10.10.1,采用的调度算法为Round Robin
[root@svr1 ~]# ipvsadm -A -t 10.10.10.1:80 -s rr
4.向虚拟服务器中加入节点,并指定权重分别为1和2 [这个时候指定权重不会生效,因为调度算法是round robin]
lvs通过端口号进行区分调度的是哪种服务
[root@svr1 ~]# ipvsadm -a -t 10.10.10.1:80 -r 192.168.10.11 -m -w 1
[root@svr1 ~]# ipvsadm -a -t 10.10.10.1:80 -r 192.168.10.12 -m -w 2
4.查看配置
[root@svr1 ~]# ipvsadm -L -n //注意:这两个选项不写反
5.保存配置
[root@svr1 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
6.修改Director调度算法为WRR
[root@svr1 ~]# ipvsadm -E -t 10.10.10.1:80 -s wrr
• 通过web浏览器访问
• 使用ab进行大并发测试
[root@client ~]# ab -c 10 -n 1000 hhp://10.10.10.1/index.html //模拟10个人访问1000次10.10.10.1主页
• 在Director上查看连接数
[root@svr1 ~]# ipvsadm -L -n
• Real Server:
– 配置WEB服务器
– 配置辅助IP地址 【把网关指向路由器内网接口】、调整内核参数
• Director Server:
– 在上安装并启用ipvsadm
– 配置辅助IP地址
– 创建虚拟服务器、向虚拟服务器中加入节点
• Client:
– 连接虚拟服务器测试
• 当客户端发起访问VIP 对应的域名的请求时,根据网
络通信原理会产生ARP 广播
• 因为负载均衡器和真实的服务器在同一网络并且VIP
设置在集群中的每个节点上
• 此时集群内的真实服务器会尝试回答来自客户端的
ARP广播,这就会产生问题,大家都说我是"VIP" //ifup通过nmcli con up uuid ${uuid}来启用对应的网卡设备
arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。
0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。
1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。
arp_announce参数常用的取值有0,1,2。
0:允许使用任意网卡上的IP地址作为arp请求的源IP。
1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。
2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
1.在node2/node3的lo上配置VIP 【192.168.4.100/32 】
[root@node2 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo{,:0} //在lo网卡上配置多个IP
[root@node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.100
NETMASK=255.255.255.255
NETWORK=192.168.4.100
BROADCAST=192.168.4.100
ONBOOT=yes
NAME=lo:0
2.在node2/node3上修改内核参数
[root@node2 ~]# sysctl -a | grep arp_ig //查看运行时参数
[root@node2 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
[root@node2 ~]# echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
[root@node2 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
[root@node2 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
[root@node2 ~]# sysctl -p //重新加载运行时参数
1.新建node1 (代理服务器) 192.168.4.4/24
2.在node1 的eth0上配置vip 192.168.4.100/24
[root@node1 ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,:0}
[root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.4.100
PREFIX=24
[root@node1 ~]# ifup eth0:0 //激活eth0:0网卡
3.在node1上配置lvs规则
[root@node1 ~]# yum install -y ipvsadm
[root@node1 ~]# ipvsadm -A -t 192.168.4.100:80 -s lc
[root@node1 ~]# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.2 -g
[root@node1 ~]# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.3
[root@node1 ~]# ipvsadm
• 通过web浏览器访问
• 使用ab进行大并发测试
[root@client ~]# ab -c 10 -n 1000 http://192.168.4.100
• 在Director上查看连接数
[root@node1 ~]# ipvsadm -L -n
使用LVS实现DR模式的集群调度服务器,为用户提供Web服务:
使用4台虚拟机,1台作为Linux路由器、1台作为Director调度器、2台作为Real Server、物理机作为客户端,拓扑结构如图-2所示。
图-2
实现此案例需要按照如下步骤进行。
步骤一:配置网络环境
1)设置Web服务器网络参数
2)自定义Web页面
3)启动Web服务器软件
4)设置LVS调度器网络参数
5)设置Linux路由器网络参数
6)设置Linux路由器的SNAT、DNAT功能
步骤二:调度器安装软件并启动服务
1)安装软件
2)启动服务
步骤三:部署LVS-DR模式调度器
1)创建集群服务器
2)添加真实服务器
3)查看规则列表,并保存规则
步骤四:客户端测试
客户端使用curl命令反复连接http://202.114.106.20,查看访问的页面是否会轮询到不同的后端真实服务器。
问题现象
• 启动LVS服务时,启动失败
• 尝试以restart方式启动服务,仍然失败
故障分析及排除
• 原因分析
– 检查服务状态和日志,提示没有/etc/sysconfig/ipvsadm文件
– 该文件是调度规则文件
• 解决办法
– 先将规则存盘,再重启服务
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。