Linux 集群总结 + LVS(负载均衡器)原理及配置
一、集群相关概念
1. 集群是什么?
集群是一组协同工作的服务器,对外表现为一个整体。
集群的意义:更好的利用现有资源实现服务的高度可用
集群扩展方式:
垂直扩展:更换服务器硬件
水平扩展:添加更多的服务器节点
2. 集群的分类
负载均衡集群-LBC
使用意图:减轻单台服务器的压力,将用户请求分担给多台主机一起处理。
实现方法:硬件:典型代表F5 软件:LVS Nginx HaProxy RAC 等
使用范围:业务并发较大的应用程序
高可用集群-HAC
使用意图:最大限度的保证用户的应用持久,不间断的提供服务
实现原理:心跳检测
实现方法:硬件:F5 软件:heartbeat Linux-HA keepalived 等
使用范围:需要持续提供服务的应用程序
高性能运算集群-HPC
使用意图:提供单台计算机所不具备的计算能力
负载均衡集群和高性能运算集群的原理对比:
负载均衡集群通过提高单位时间内的执行的任务数来提升效率
高性能运算集群通过缩短单个任务的执行时间来提高效率
二、常见的集群拓扑:
三、LVS(负载均衡器) 搭建负载均衡集群
相信你已经对集群分类有了大致了解了,那么我们现在详细说说使用LVS来实现负载均衡集群。
1、LVS 简介
LVS,英文全称LinuxVirtualServer,Linux虚拟服务器,是一个虚拟服务器集群,由章文嵩博士创建。使用LVS技术要达到的目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群;利用LVS技术实现高可用、可伸缩的网络服务,如www服务、cache服务、DNS服务、FTP服务mail服务等。
2. LVS实现负载均衡原理
补充:ipvs称之为IP虚拟服务器(IP Virtual Server,简写为IPVS)。是运行在LVS下的提供负载平衡功能的一种技术。
3. LVS术语
Director Server: 调度服务器,将负载分发到RealServer的服务器上
Real Server: 真实服务器,真正提供应用服务的服务器
CIP: 客户端IP
4. LVS体系结构
使用LVS架设的服务器集群系统有三个组成部分。
(1)最前端负载均衡层,用LoadBalancer表示
(2)中间的服务器群组层,用ServerArray表示
(3)最底层的数据共享存储层,用Share Storage表示。
LVS 体系结构图如下:
重点来了, 下面我们来介绍LVS的三种工作模式。也是面试时经常问到的一道题。
5. LVS 三种工作模式
1)NAT
注意:
在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端
特点:
优点:
缺点:
扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
NAT 模式配置:
安装ipvsadm:
[root@LVS ~]# yum install ipvsadm* -y
[root@LVS ~]# lsmod | grep lv_
[root@LVS ~]# lsmod | grep ip_vs
ip_vs_rr 1420 0
ip_vs 126897 2 ip_vs_rr
libcrc32c 1246 1 ip_vs
ipv6 336282 270 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
配置脚本如下:
#!/bin/bash
VIP=192.168.10.10 #外网用户直接访问网站的IP地址, LVS的eth1网卡的IP。
RIP1=192.168.84.104 #后端web1服务器的IP地址
RIP2=192.168.84.105 #后端web2服务器的IP地址
DIP=192.168.84.103 #LVS的eth0网卡的IP
case "$1" in
start)
echo "Start LVS as the mode NAT"
echo "1" > /proc/sys/net/ipv4/ip_forward #开启LVS服务器的IP路由转发功能
/sbin/ifconfig eth0:0 $VIP netmask 255.255.255.0 up #设定VIP地址
/sbin/ipvsadm -A -t $VIP:80 -s rr #添加vip
#-A:添加虚拟服务器
#-t :指定vip及tcp端口
#-s:指定算法
#rr:轮询
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -m
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -m
#-a :添加节点
#-t :指定vip和端口
#-r :指定节点ip及端口
#-m:表示使用nat模式
#-w:设置权重
/sbin/ipvsadm
;;
stop)
echo "Stop LVS"
echo "0" > /proc/sys/net/ipv4/ip_forward
/sbin/ifconfig eth0:0 down
;;
*)
echo "Usage:$0 {start|stop}"
exit 1
esac
还要配置网页
#web1服务器:
[root@web1 ~] echo "webserver1">/var/www/html/index.html #写一个测试页面
[root@web1 ~] service httpd start
#web2服务器:
[root@web2 ~]# echo "webserver2">/var/www/html/index.html #写一个测试页面
[root@web2 ~] service httpd start
[root@web1 ~]# route del default
[root@web1 ~]# route add default gateway 192.168.84.103 ##192.168.84.103 为LVS的DIP
[root@web1 ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.84.0 * 255.255.255.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth0
default 192.168.84.103 0.0.0.0 UG 0 0 0 eth0
运行脚本后结果如下:
[root@LVS ~]# sh lvs_nat.sh start
Start LVS as the mode NAT
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.10:http rr
-> 192.168.84.104:http Masq 1 0 0
-> 192.168.84.105:http Masq 1 0 0
通过curl命令查看是否成功
[root@LVS ~]# curl 192.168.10.10
webserver2
[root@LVS ~]# curl 192.168.10.10
webserver1
[root@LVS ~]# curl 192.168.10.10
webserver2
[root@LVS ~]# curl 192.168.10.10
webserver1
[root@LVS ~]# curl 192.168.10.10
webserver2
[root@LVS ~]# curl 192.168.10.10
webserver1
2)DR(是LVS的默认模式,应用最为广泛)
③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意:
需要设置lo接口的VIP不能响应本地网络内的arp请求。
总结:
2、请求的报文经过调度器,而 RS 响应处理后的报文无需经过调度器 LB,因此并发访问量大时使用效率很高(和 NAT 模式比)
5、RS 节点的默认网关不需要配置成 LB,而是直接配置为上级路由的网关,能让 RS 直接出网就可以。
7、直接对外的业务比如WEB等,RS 的IP最好是使用公网IP。对外的服务,比如数据库等最好使用内网IP。
优点:
和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
DR模式的效率很高,但是配置稍微复杂一点,因此对于访问量不是特别大的公司可以用haproxy/nginx取代。日1000-2000W PV或者并发请求1万以下都可以考虑用haproxy/nginx。
缺点:
所有 RS 节点和调度器 LB 只能在一个局域网里面。
DR模式配置:
LVS-DR web服务器脚本
#!/bin/bash
VIP=192.168.84.200
/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of RealServer DR"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
#添加路由记录,当访问VIP交给l0:0 网卡接受
/sbin/route add -host $VIP dev lo:0
#关闭对应ARP响应及公告功能
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS of RealServer DR"
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
Lvs-DR LVS server端启动脚本
#!/bin/bash
VIP=192.168.84.200
RIP1=192.168.84.104
RIP2=192.168.84.105
/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of DirectorServer DR"
# 添加IP地址为VIP的虚拟网卡lo:0
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
# 添加一条路由,目标IP为VIP的数据包使用lo接口发送,这样响应报文的源IP就会为VIP
/sbin/route add -host $VIP dev eth0:0
echo "1" >/proc/sys/net/ipv4/ip_forward
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#RUN LVS
/sbin/ipvsadm
;;
stop)
echo "stop LVS of DirectorServer DR"
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 down
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
3)TUN
TUN 模式原理:在原请求IP报文之外新加一个IP首部
注意:
需要设置lo接口的VIP不能在公网上出现。
总结:
2.TUNNEL 模式的 vip ------>realserver 的包通信通过 TUNNEL 模式,不管是内网和外网都能通信,所以不需要 lvs vip 跟 realserver 在同一个网段内
3.TUNNEL 模式 realserver 会把 packet 直接发给 client 不会给 lvs 了
4.TUNNEL 模式走的隧道模式,所以运维起来比较难,所以一般不用。
优点:
负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点:
隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
TUN 模式配置:
负载均衡器:DIP: eth0 192.168.152.139
VIP:192.168.152.250
web节点IP:192.168.152.151 192.168.152.152
负载均衡器安装配置
1)安装
#yum -y install ipvsadm
#lsmod | grep ip_vs 查看没有输出
#modprobe ip_vs 安装即可
2)一样这里也写个脚本,#cat /etc/init.d/lvstun
#!/bin/bash
#lvs of TUN
VIP=192.168.152.250
RIP1=192.168.152.151
RIP2=192.168.152.152
case "$1" in
start)
echo "start lvs of TUN"
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.0 up
/sbin/route add -host $VIP dev tunl0
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
/sbin/ipvsadm
;;
stop)
echo "stop lvs of TUN"
/sbin/ipvsadm -C
/sbin/ifconfig tunl0 down
;;
*)
echo "Usage :$0 {start|stop}"
exit1
esac
#chmod o+x /etc/init.d/lvstun
#service lvstun start
节点服务器配置
节点1,2一样写脚本,# cat /etc/init.d/lvsTUNRIP
#!/bin/bash
#TUN server
VIP=192.168.152.250
case "$1" in
start)
echo "start LVS of TUN"
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev tunl0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "stop LVS of TUN"
/sbin/ifconfig tunl0 down
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage:$0 {start|stop}"
exit 1
esac
#chmod o+x /etc/init.d/lvsTUNRIP
#service lvsTUNRIP start
6. 三种工作模式比较
工作模式 | VS/NAT | VS/TUN | VS/DR |
---|---|---|---|
Real server(节点服务器) | Config dr gw | Tunneling | Non-arp device/tie vip |
Server Network | Private | LAN/WAN | LAN |
Server number(节点数量) | Low 10-20 | High 100 | High 100 |
Real server gateway | Load balance | Own router | Own router |
优点 | 地址和端口转换 | Wan环境加密数据 | 性能最高 |
缺点 | 效率低 | 需要隧道支持 | 不能跨域LAN |
7. LVS 调度算法
在内核中的连接调度算法上,IPVS已实现了以下八种调度算法:
轮叫调度(Round-Robin Scheduling)
加权轮叫调度(Weighted Round-Robin Scheduling)
最小连接调度(Least-Connection Scheduling)
加权最小连接调度(Weighted Least-Connection Scheduling)
基于局部性的最少链接(Locality-Based Least Connections Scheduling)
带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
今天我们先介绍到这里。之后我们继续介绍集群的内容。
参考资料:
https://www.cnblogs.com/gaoxu387/p/7941381.html
https://www.jianshu.com/p/2ed85a5204cc
长按二维码