1.集群是什么
由多台主机构成,都干同一件事情,对外展现为一个整体,通过调度器进行调度,不用管真实存放数据的服务器具体是哪一台。
2.集群的类型
分为三种有负载均衡集群 LB 高可用集群 HA 高性能运输集群 HPC
2.1.负载均衡集群 LB
提高性能响应效率,处理更多的访问请求减少延迟
类型代表
软件类:lvs , nginx ,haproxy 等
硬件类: F5 ,国产绿盟。
2.2.高可用集群 HA
提高系统可靠性,减少终端时间,确保服务的持续时间(通常使用n个9代表高可用的指标 运行时间占全年的百分比)。
类型代表
keepalived heartbeat
2.3.高性能运输集群 HPC
通过云计算或分布式计算获取高性能的cpu,内存等资源,来提高整体运算能力。
3.集群的构成
第一层 调度器层
对外使用所有服务器公用的vip地址,也称为集群ip地址。通常会配置主,备两台调度器实现双机热备一保服务的高可用。
也称负载均衡层
第二层,服务器池
真正为集群提供访问应用服务的是服务器吃,其中每个节点都有独立的rip地址(真实ip),他们只负责对调度器分配的来自于客户的请求进行处理,
当某个节点失效时,负载均衡调度器的容错机制,会将其隔离,等待错误解决后再重新纳入服务器池。
第三层共享存储
为服务器池中的所有结点提供稳定一致的文件存取服务,确保整个集群的统一性,共享存储可以使用NAS 设备,或者使用 NFS 共享服务的专用服务器。
4.LVS 的三种工作模式:
1)NAT 地址转换
调度器会作为集群中设备的默认网关,也就是客户端访问入口的节点服务器返回响应消息的出口,也就是说调度器,会承载来在内外双边的流量负载压力,可能会成为整个集群的性能瓶颈。由于节点服务器都处于内网环境,使用私网ip地址,所以具有一定安全性。
2)TUN IP隧道 IP Tunnel
调度器仅作为客户端入口,而节点服务器的响应消息则直接由节点返回给客户端,不需要经过调度器。基于这样的特性,其节点服务器需要部署再不同位置的公网环境,需要具有独立的公网ip。调度器与节点服务器。是通过专用的ip隧道实现相互通信的,因此ip隧道模式的成本较高,因信息暴露在公网环境下安全性相对较低,且ip隧道需要额外的封装和解封装,性能会受到一定的影响。
3)DR 直接路由 Direct Routing
调度器仅作为客户端的访问入口,节点服务器的响应消息同样直接返回给客户端。不需要经过调度器。
节点服务器与调度器部署在同一个物理网络内,因此不需要建立专属的专用ip专用隧道。(与ip隧道模式的区别)
DR模式时企业首选的LVS模式。
5.LVS 调度算法
5.1 轮询 rr
将收到的请求顺序轮流分配给集群指定的各个节点,均等的对待每一台服务器,而不管服务器实际的连接数的系统负载。
5.2 加权轮询 wrr
依据不同的RS的权值分配任务,权重较高的优点获得任务,并且分配到的连接数也相较权限第的更多,相同权重的则获得相同的连接数。
保证性能强的服务器承受更多的访问的流量。
5.3 目的地址哈希 dh
以目的地址的地址为关键字查找静态hash,
5.4 源地址哈希 sh
以源地址为关键字进行hash静态查找
5.5 最小连接数
- ipvs表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。
- 根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。
LVS-NAT 模式配置步骤:
1)配置 NFS 共享存储
1.部署共享存储(NFS服务器:192.168.80.13)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
systemctl enable rpcbind.service
mkdir /opt/ct /opt/benet
chmod 777 /opt/ct /opt/benet
echo 'this is ct web!' > /opt/ct/index.html
echo 'this is benet web!' > /opt/benet/index.html
vim /etc/exports
/usr/share *(ro,sync)
/opt/ct 192.168.80.0/24(rw,sync)
/opt/benet 192.168.80.0/24(rw,sync)
2)节点服务器安装 Web 服务,注意:默认网关要指向 调度器的IP地址,测试的时候关闭连接保持
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.80.13
systemctl start rpcbind
systemctl enable rpcbind
--192.168.80.100---
mount.nfs 192.168.80.13:/opt/ct /var/www/html 进行对nfs的挂载获取共享文件
vim /etc/fstab
192.168.80.13:/opt/ct /var/www/html nfs defaults,_netdev 0 0
--192.168.80.101---
mount.nfs 192.168.80.13:/opt/benet /var/www/html
echo 'this is benet web!' > /var/www/html/index.html
vim /etc/fstab
192.168.80.13:/opt/benet /var/www/html nfs defaults,_netdev 0 0
3)调度服务器要开启 IP路由转发 功能和设置 SNAT 等 iptables 规则,安装 ipvsadm 工具,配置虚拟服务器和真实节点服务器相关配置(-m选择NAT模式)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
(1)配置SNAT转发规则
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
或 echo '1' > /proc/sys/net/ipv4/ip_forward
sysctl -p
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to-source 12.0.0.1
(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.1:80 -s rr [-p 60]
ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.11:80 -m [-w 1]
ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.12:80 -m [-w 1]
ipvsadm #启用策略
ipvsadm -ln #查看节点状态,Masq代表 NAT模式
ipvsadm-save > /opt/ipvsadm #保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
----------------------------------------------------------------------------------------------------------
ipvsadm -d -t 12.0.0.1:80 -r 192.168.80.11:80 #删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.1:80 #删除整个虚拟服务器
systemctl stop ipvsadm #停止服务(清空策略),如果selinux没关闭/etc/sysconfig/ipvsadm内容也会清空
systemctl start ipvsadm #启动服务(根据/etc/sysconfig/ipvsadm恢复策略)
ipvsadm-restore < /opt/ipvsadm #恢复LVS 策略
----------------------------------------------------------------------------------------------------------
4)客户端测试的时候网关要指向 调度器的IP地址
在一台IP为12.0.0.12的客户机使用浏览器访问 http://12.0.0.1/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点(或者关闭Web服务的连接保持)。
LVS-DR 模式配置步骤:
1)配置 NFS 共享存储
systemctl stop firewalld.service
setenforce 0
yum -y install nfs-utils rpcbind
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet
vim /etc/exports
/usr/share *(ro,sync)
/opt/kgc 192.168.80.0/24(rw,sync)
/opt/benet 192.168.80.0/24(rw,sync)
systemctl start rpcbind.service
systemctl start nfs.service
2)节点服务器安装 Web 服务,在 lo:0 接口配置VIP,修改内核参数 arp_ignore=1 arp_announce=2 , 添加路由 route add -host <VIP> dev lo:0
3)调度服务器在 ensXX:0 接口配置VIP,修改内核参数关闭IP路由转发功能和重定向功能 ip_forward=0 send_redirects=0
4)调度服务器安装 ipvsadm 工具,配置虚拟服务器和真实节点服务器相关配置(-g选择DR模式)
systemctl stop firewalld.service
setenforce 0
(1)配置虚拟 IP 地址(VIP:192.168.80.188)
#此地址仅用作发送 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.80.188
NETMASK=255.255.255.255 #注意:子网掩码必须全为 1
ifup lo:0
ifconfig lo:0
route add -host 192.168.80.188 dev lo:0
vim /etc/rc.local
/sbin/route add -host 192.168.80.188 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.80.100---
mount.nfs 192.168.80.13:/opt/kgc /var/www/html
echo 'this is kgc web!' > /var/www/html/index.html
--192.168.80.101---
mount.nfs 192.168.80.13:/opt/benet /var/www/html
echo 'this is benet web!' > /var/www/html/index.html
5)客户端测试
注意项:如果客户端与调度服务器、节点服务器不在同一个网段,调度服务器、节点服务器的默认网关要指向网关路由器的IP地址
在客户端使用浏览器访问 http://192.168.80.188/