集群概念
集群 又叫群集 cluster
特点:由多台主机构成,都干同样的一件事,对外展现为一个整体
集群的类型
- 负载均衡群集 LB
提高系统响应效率,处理更多的访问请求,减少响应延迟,实现高并发、高负载的能力
典型代表:软件类(Nginx LVS HAProxy SLB) 硬件类(F5 绿盟) - 高可用群集 HA
提高系统可靠性,减少中断时间,确保服务的连续性(通常使用 N 个 9 来代表高可用的指标)
典型代表:Keepalived heartbeat - 高性能运算群集 HPC
通过云计算或分布式计算将硬件资源整合成资源池以获取高性能的CPU、内存等资源,来提高整体运算能力
LVS的三种工作模式
- NAT 地址转换
调度器会作为所有节点服务器的默认网关,也是客户端的访问入口和节点服务器返回响应消息的出口,所以调度器会承载双向流量的负载压力,可能会为整个群集的性能瓶颈。由于节点服务器都会处于内网环境,使用私网IP,所以具有一点的安全行。 - TUN IP隧道 IP Tunnel
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调度器。但是由于节点服务器需要部署在不同的公网环境,所以要有独立的公网IP,而且调度器与节点服务器是通过专用的IP隧道实现相互通信,因此IP隧道模式的成本较高、安全性较低,且数据IP隧道传输的过程中需要额外的封装和解封装,性能也会受到一定的影响。 - DR 直接路由 Direct Routing
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调度器。(与NAT模式的区别)
节点服务器与调度器是部署在同一个物理网络里,因此不需要建立专用的IP隧道。(与IP隧道模式的区别)
DR模式是企业首选的LVS模式。
NAT模式 LVS负载均衡群集部署
LVS-NAT模式部署:
- 部署NFS共享存储
- 部署Web节点服务器,注意:节点服务器的默认网关要指向调度器的内网IP,测试的时候可关闭连接保持
- 部署调度器,配置双网卡,开启IP路由转发功能,如果内网中的节点服务器需要访问外网则要配置SNAT规则,安装ipvsadm工具,添加虚拟服务器和真实服务器的相关配置,使用-m选项选择NAT模式
- 客户端设置默认网关指向调度器的外网IP,并使用客户端工具测试
- 负载调度器:内网关 ens33:192.168.50.101,外网关 ens36:12.0.0.101
- Web节点服务器1:192.168.50.104 (网关指向调度器的内网地址)
- Web节点服务器2:192.168.50.105(网关指向调度器的内网地址)
- NFS服务器:192.168.50.106
- 客户端:12.0.0.10
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service #先启动rpcbind再启动nfs
systemctl start nfs.service
mkdir /var/www/html/xiaobu /var/www/html/laobu
chmod 777 /var/www/html/xiaobu /var/www/html/laobu
echo 'this is xiaobu01 web!' > /var/www/html/xiaobu/test.html
echo 'this is laobu01 web!' > /var/www/html/laobu/test.html
vim /etc/exports
/var/www/html/laobu 192.168.50.0/24(rw,sync,no_root_squash)
/var/www/html/xiaobu 192.168.50.0/24(rw,sync,no_root_squash)
--发布共享---
exportfs -rv
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service
yum install nfs-utils rpcbind -y
showmount -e 192.168.50.106
systemctl start rpcbind
systemctl enable rpcbind
--192.168.50.104---
mount.nfs 192.168.50.106:/var/www/html/xiaobu /var/www/html
vim /etc/fstab
192.168.50.106:/var/www/html /var/www/html nfs defaults,_netdev 0 0
--192.168.50.105---
mount.nfs 192.168.50.106:/var/www/html/laobu /var/www/html
vim /etc/fstab
192.168.50.106:/var/www/html/laobu /var/www/html nfs defaults,_netdev 0 0
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
(1)启用 IP 转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
或 echo '1' > /proc/sys/net/ipv4/ip_forward
sysctl -p
(2)加载LVS内核模块
modprobe ip_vs #加载 ip_vs模块
cat /proc/net/ip_vs #查看 ip_vs版本信息
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
(3)安装ipvsadm 管理工具
yum -y install ipvsadm
--启动服务前须保存负载分配策略---
ipvsadm-save > /etc/sysconfig/ipvsadm
或者 ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
(4)配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
ipvsadm -C #清除原有策略
ipvsadm -A -t 12.0.0.101:80 -s rr [-p 60]
ipvsadm -a -t 12.0.0.101:80 -r 192.168.50.104:80 -m [-w 1]
ipvsadm -a -t 12.0.0.101:80 -r 192.168.50.105:80 -m [-w 1]
ipvsadm #启用策略
[root@localhost opt]# ipvsadm -ln #查看节点状态,Masq代表 NAT模式
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 12.0.0.101:80 rr
-> 192.168.50.104:80 Masq 1 0 0
-> 192.168.50.105:80 Masq 1 0 0
ipvsadm-save > /opt/ipvsadm #保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
-----------------------------------------------------------------------------------------------------
ipvsadm -d -t 12.0.0.101:80 -r 192.168.50.104:80 #删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.101:80 #删除整个虚拟服务器
systemctl stop ipvsadm #停止服务(清空策略),如果selinux没关闭/etc/sysconfig/ipvsadm内容也会清空
systemctl start ipvsadm #启动服务(根据/etc/sysconfig/ipvsadm恢复策略)
ipvsadm-restore < /opt/ipvsadm #恢复LVS 策略
-----------------------------------------------------------------------------------------------------
4.测试效果
在一台IP为12.0.0.10的客户机使用浏览器访问 http://12.0.0.101/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点(或者关闭Web服务的连接保持)。
ipvsadm 工具选项说明
-A:添加虚拟服务器
-D:删除整个虚拟服务器
-s:指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)
-a:表示添加真实服务器(节点服务器)
-d:删除某一个节点
-t:指定 VIP地址及 TCP端口
-r:指定 RIP地址及 TCP端口
-m:表示使用 NAT群集模式
-g:表示使用 DR模式
-i:表示使用 TUN模式
-w:设置权重(权重为 0 时表示暂停节点)
-p 60:表示保持长连接60秒(默认关闭连接保持)
-l:列表查看 LVS 虚拟服务器(默认为查看所有)
-n:以数字形式显示地址、端口等信息,常与“-l”选项组合使用。ipvsadm -ln
LVS-DR模式工作过程
- 客户端通过VIP将访问请求报文(源IP为客户端IP,目的IP为VIP)发送到调度器
- 调度器通过调度算法选择最适合的节点服务器,并重新封装数据报文(将源MAC改为调度器的MAC,目的MAC改为节点服务器的MAC地址),再通过交换机转发请求给节点服务器
- 节点服务器收到请求报文后,确认目的MAC和目的IP无误后解包并送到应用层进行处理
- 节点服务器在返回响应报文前,会先重新封装报文(源IP为VIP,目的为客户端IP),再将响应报文先通过lo接口传送给物理网卡,再通过物理网卡发送给客户端
DR 模式的特点
- Director Server 和 Real Server 必须在同一个物理网络中。
- Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。
- Director Server作为群集的访问入口,但不作为网关使用。
- 所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
- Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server。
- Real Server 上的 lo 接口配置 VIP 的 IP 地址。
DR模式 LVS负载均衡群集
- DR 服务器:192.168.50.101
- Web 服务器1:192.168.50.105
- Web 服务器2:192.168.50.104
- vip:192.168.50.200
- 客户端:192.168.50.100
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm
(1)配置虚拟 IP 地址(VIP:192.168.50.200)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0 #若隧道模式,复制为ifcfg-tunl0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.50.200
NETMASK=255.255.255.255
ifup ens33:0 #重启网卡
ifconfig ens33:0
(2)调整 proc 响应参数
#由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
---------------------------------------------------------------------------------------------------
#tips
net.ipv4.ip_forward = 0:
这个参数控制着是否允许 Linux 系统作为一个 IP 路由器来转发数据包。当该参数值为 0 时,系统将不会转发数据包,而只是接收和处理直接发往本机的数据包。
net.ipv4.conf.all.send_redirects = 0:
这个参数用于控制是否允许系统发送 ICMP 重定向消息。当该参数值为 0 时,系统将不会发送 ICMP 重定向消息。
net.ipv4.conf.default.send_redirects = 0:
这个参数用于控制默认的网络接口是否允许发送 ICMP 重定向消息。
net.ipv4.conf.ens33.send_redirects = 0:
这个参数用于指定特定网络接口(例如 ens33)是否允许发送 ICMP 重定向消息。您可以根据需要修改不同的网络接口的设置。
-----------------------------------------------------------------------------------------------------
sysctl -p
(3)配置负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.50.200:80 -s rr
ipvsadm -a -t 192.168.50.200:80 -r 192.168.50.104:80 -g #若隧道模式,-g替换为-i
ipvsadm -a -t 192.168.50.200:80 -r 192.168.50.105:80 -g
ipvsadm
ipvsadm -ln #查看节点状态,Route代表 DR模式
systemctl stop firewalld.service
setenforce 0
yum -y install nfs-utils rpcbind
mkdir /var/www/html/xiaobu /var/www/html/xiaobu
chmod 777 /var/www/html/xiaobu /var/www/html/xiaobu
vim /etc/exports
/var/www/html/laobu 192.168.50.0/24(rw,sync,no_root_squash)
/var/www/html/xiaobu 192.168.50.0/24(rw,sync,no_root_squash)
systemctl start rpcbind.service
systemctl start nfs.service
systemctl stop firewalld.service
setenforce 0
(1)配置虚拟 IP 地址(VIP:192.168.50.200)
#此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.50.200
NETMASK=255.255.255.255 #注意:子网掩码必须全为 1
ifup lo:0
ifconfig lo:0
route add -host 192.168.50.200 dev lo:0 #将数据包路由到主机地址 192.168.50.200,并指定它通过 lo:0 设备接口发送。
vim /etc/rc.local #在系统启动时执行的命令
/sbin/route add -host 192.168.50.200 dev lo:0
chmod +x /etc/rc.d/rc.local
(2)调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突
vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1 #系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2 #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
或者
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
sysctl -p
yum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd
--192.168.50.104---
mount.nfs 192.168.50.106:/var/www/html/xiaobu /var/www/html
vim /etc/fstab
192.168.50.106:/var/www/html /var/www/html nfs defaults,_netdev 0 0
--192.168.50.105---
mount.nfs 192.168.50.106:/var/www/html/laobu /var/www/html
vim /etc/fstab
192.168.50.106:/var/www/html/laobu /var/www/html nfs defaults,_netdev 0 0
4.测试 LVS 群集
在客户端使用浏览器访问 http://192.168.50.200/test.html