LVS集群
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。(Cluster就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点node)。
LVS:Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统此项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
集群宗旨:可伸缩性(Scalability);可靠性(Reliability);可管理性(Manageability)
集群的常见分类
负载均衡集群(Load balancing clusters)简称LB
高可用集群(High-availability clusters),HA
高性能计算集群(High-performance clusters)HPC
网络计算(Grid computing)
提示:负载均衡集群和高可用性集群式我们互联网行业常用的集群架构模式。
硬件集群和软件集群
硬件:F5负载均衡器 https://f5.com/
软件:LVS (工作在OSI第四层,传输层) Nginx(工作在OSI第七成,应用层)
LVS: 英文官方网站:http://www.linuxvirtualserver.org/
中文官方网站:http://zh.linuxvirtualserver.org/ http://www.linux-vs.org/zh/
LVS相关术语约定
名称 | 缩写 | 说明 |
---|---|---|
虚拟IP(Virtual Ip Address) | VIP | VIP为Director用于向客户端计算机提供服务的IP地址。 |
真实IP(Real Server Ip Address) | RIP | 在集群下面节点上使用的IP地址。 |
Director的IP地址(Director Ip Address) | DIP | Director用于连接内外网的IP地址,物理网卡上的IP地址。 |
客户端主机IP地址(Client Ip Address) | CIP | 客户端请求集群服务器的IP地址。 |
LVS集群的三层结构
1:负载调度器/分发器 (load balancer)
是整个集群对外的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址上
的,我们称这个IP为虚拟IP,Virtual IP=VIP。
2:服务器池 (Server Pool)
也就是下图中的RealServer Group,是一组真正执行客户请求的服务器,执行程序可以是一组WEB,FTP,MAIL和DNS等等。
3:共享存储(Shared Storage)
它是为服务器池提供的一个共享存储区,这样很容易使得服务器拥有相同的内容,提供相同的服务!
LVS包转发方式
LVS有三种转发方式:NAT(网络地址映射)、IP Tunneling(IP 隧道)、Direct Routing(直路由)。不同的转发模式决定了不同的Cluster的网络结构
NAT:
NAT方式支持任何造作系统,以及私有网络,并且只需要一个Internet IP即可!缺点是整个系统的性能受到限制,因为执行NAT的过程每一次都需要重写包,有一定的延迟。另外,大部分应用有80%的数据是从服务器流向客户端,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成非常大的压力,成为新的瓶颈!大致数据上:真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的瓶颈!
LVS-NAT工作原理
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
客户端访问服务器,访问请求到达调度器,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的Real Server;Real Server的相应包通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
用VMware搭建LVS NAT模式
实验前期准备:
1、准备 3台虚拟机,物理机充当客户端
2、iptables -F , 清除规则 /etc/init.d/iptables save 保存
3、编辑/etc/selinux/config,关 SELinux(需要重启生效)
配置分发器
配置网路环境,xuegod63 配置成分发器,根据拓扑,需要2张网卡(关机状态增加一张),需要打开路由转发功能
eth0 192.168.0.155 模式:br0 模拟公网
eth1 192.168.2.63 模式:vmnet4 模拟内网
vim /etc/sysctl.conf //打开路由转发功能
#将
……
net.ipv4.ip_forward = 0
……
#改为
net.ipv4.ip_forward = 1
sysctl -p //加载配置,是指sysctl.conf里面的配置生效
rpm -ivh /media/Packages/ipvsadm-1.26-2.el6.x86_64.rpm //安装LVS管理工具
配置Director规则
ipvsadm -A -t 192.168.0.155:80 -s rr //rr表示轮询,round-robin
// -A,表示添加; -t,表示TCP的服务,后面书写格式为VIP:Port; -s设置调度算法
ipvsadm -a -t 192.168.0.155:80 -r 192.168.2.12 -m //添加一条RealServer
ipvsadm -a -t 192.168.1.155:80 -r 192.168.2.11 -m //添加第二条RealServer
// -a,表示添加real server的地址;-r表示realserver地址;
// -m表示masquerade,也就是NAT方式LVS
查看规则与保存
ipvsadm -L -n //配置及查看内核IPVS表和算法的工具类似于iptables
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.155:80 rr
-> 192.168.2.12:80 Masq 1 0 0
-> 192.168.2.11:80 Masq 1 0 0
// InActConn 指非活跃连接数, TCP ESTABLISH 状态以外的连接都称为不活跃连接。例如处于 SYN_RECV 状态的连接,处于 TIME_WAIT 状态的连接等
/etc/init.d/ipvsadm save //保存规则
配置Real Server
//Real Server配置IP
需要配置在同一个网段,选择vmnet4 Nat方式
#192.168.2.12:
IP地址:192.168.2.12,网关192.168.2.63,DNS 192.168.2.63
# 配置网关 route add default gw 192.168.2.63
echo WEB12 > /var/www/html/index.html
service httpd restart
# 192.168.2.11
IP地址:192.168.2.11,网关192.168.2.63,DNS 192.168.2.63
#配置网关 route add default gw 192.168.2.63
echo WEB11 > /var/www/html/index.html
service httpd restart
测试
测试结果是会在两个页面之间切换
ipvsadm其他参数
--add-service -A add virtual service with option
// 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器
--edit-service -E edit virtual service with options
//编辑内核虚拟服务器表中的一条虚拟服务器记录
--delete-service -D delete virtual service
//删除内核虚拟服务器表中的一条虚拟服务器记录
--clear -C clear the whole table
//清除内核虚拟服务器表中的所有记录
--restore -R restore rules from stdin
//恢复虚拟服务器规则
--save -S save rules to stdout
//保存虚拟服务器规则,输出为-R 选项可读的格式
--add-server -a add real server with options
//在内核虚拟服务器表的一条记录里添加一条新的真实服务器
--edit-server -e edit real server with options
//编辑一条虚拟服务器记录中的某条真实服务器记录
--delete-server -d delete real server
//删除一条虚拟服务器记录中的某条真实服务器记录
--list -L|-l list the table
//显示内核虚拟服务器表
--zero -Z zero counters in a service or all services
//虚拟服务表计数器清零
--set tcp tcpfin udp set connection timeout values
//设置连接超时值
--start-daemon start connection sync daemon
//启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采keepalived 的VRRP 功能。
--stop-daemon stop connection sync daemon
//停止同步守护进程
--help -h display this help message
//显示帮助信息
ipvsadm其他选项
--tcp-service -t service-address service-address is host[:port]
// 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]
--udp-service -u service-address service-address is host[:port]
//说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]
--fwmark-service -f fwmark fwmark is an integer greater than zero
// 说明是经过iptables 标记过的服务类型。
--scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc.
//使用的调度算法,有这样几个选项,默认的调度算法是: wlc.
--persistent -p [timeout] persistent service
//持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒
--netmask -M netmask persistent granularity mask
--real-server -r server-address server-address is host (and port)
//真实的服务器[Real-Server:port]
--gatewaying -g gatewaying (direct routing) (default)
//指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式
--ipip -i ipip encapsulation (tunneling)
//指定LVS 的工作模式为隧道模式
--masquerading -m masquerading (NAT)
//指定LVS 的工作模式为NAT 模式
- -weight -w weight capacity of real server
//真实服务器的权值
--u-threshold -x uthreshold upper threshold of connections
--l-threshold -y lthreshold lower threshold of connections
--mcast-interface interface multicast interface for connection sync
//指定组播的同步接口
--syncid sid syncid for connection sync (default=255)
--connection -c output of current IPVS connections
//显示LVS 目前的连接 如:ipvsadm -L -c
--timeout output of timeout (tcp tcpfin udp)
//显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
--daemon output of daemon information
//显示同步守护进程状态
--stats output of statistics information
//显示统计信息
--rate output of rate information
//显示速率信息
--thresholds output of thresholds information
--persistent-conn output of persistent connection info
--sort sorting output of service/server entries
//对虚拟服务器和真实服务器排序输出
--ops -O one-packet scheduling
--numeric -n numeric output of addresses and ports
//输 出IP 地址和端口的数字形式sadm命令实例
ipvsadm -L -n –c //查看客户端连接分发器和Real Server的情况
ipvsadm -d -t 192.168.0.155:80 -r 192.168.2.12 //删除一台RS
ipvsadm -C //清空规则
IP Tunneling
Director(分发器)分配请求到不同的Real Server,Real Server处理请求后直接回应给客户端,这样director负
载均衡器处理客户端与服务器的一半链接。IP Tunneling技术极大的提高了director的调度处理能力 ,同时也极大的提高了系统能容纳的最大节点数,可以超过100个节点,Real Server可以在任何LAN和WAN上运行,这就意味着允许地理上的分布(由于通过IP Tuneling封装后,封装后的IP包的目的地址为Real Server的IP地址,那么只要Real Server的地址路由可达,Real Server在什么网络里都可以,这样可以减少对于公网IP地址的消耗,但是因为处理IP Tunneling封装和解封装的开销,那么效率就不如DR模式),这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于与客户端直接通讯(每个Real Server必须绑定VIP),并且所有服务器必须支持IP隧道协议!
Direct Routing
与IP Tuneling类似,只不过IP Tuneling工作在第三层,而DR工作在第二层,数据链路层。负载均衡器(LB)仅处理了一半的链接,避免了新的瓶颈,同时增加了系统的可伸缩性。Direct Routing与IP Tuneling相比没有IP封装的开销,但是由于采用物理层修改MAC地址技术,所以所有服务器必须在一个物理网段!