目录
集群和分布式
LVS运行原理
LVS概念
LVS的集群类型
实验配置
安装LVS
ipvsadm命令参数
1.管理集群服务中的增删改
2.管理集群服务中的RS增删改
3.lvs调度策略的备份与恢复
4.lvs调度策略的开机启动
LVS-NAT模式
LVS-DR模式
集群和分布式
集群(Cluster),解决某个问题将多台计算机组合形成的系统群。
常见的集群类型:
-
负载均衡(LoadBalancing,简称LB):由多个相同配置的主机组成,每个主机经过调度承担部分访问,防止单点故障提高系统可用性。常用的负载均衡实现方式由Nginx,LVS等。
-
高可用(High Availiablity,简称HA): ,是指系统或服务在规定时间内持续正常运行的能力,核心目标是最大限度减少停机时间,确保业务或功能在面对故障(如硬件损坏、软件错误、网络中断等)时仍能稳定提供服务。
MTBF:Mean Time Between Failure 平均无故障时间,正常时间 MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
可用性等级计算方式:A=MTBF/(MTBF+MTTR),计算结果越接近“1”高可用性越高
-
高性能计算(High-performance computing,HPC):高性能计算,国家战略资源
负载均衡与高可用的关系:
负载均衡是实现高可用的核心手段之一,高可用的目标是 “不中断服务”,而负载均衡通过分散流量和自动剔除故障节点,直接避免了 “单台服务器故障导致整体崩溃” 的风险。
分布式
一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务
分布式常见应用
-
分布式应用-服务按照功能拆分,使用微服务
-
分布式静态资源--静态资源放在不同的存储集群上
-
分布式数据和存储--使用key-value缓存系统
-
分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
分布式图解
集群和分布式的区别:
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
LVS运行原理
LVS概念
LVS(Linux virtual server):是一种负载调度器,是负载均衡的一种实现方式。
-
VS:虚拟服务器,LVS调度器
-
RS:内网真实服务器,提供服务
-
CIP:客户端IP
-
VIP:LVS的外网IP
-
DIP:LVS的内网IP
-
RIP:RS的IP
LVS的集群类型
集群类型 | 说明 |
---|---|
nat | 修改请求报文的目标IP,多目标IP的DNAT |
dr | 操纵封装新的MAC地址 |
tun | 在原请求IP报文之外添加一个IP首部 |
fullnat | 修改请求报文的源和目标IP |
实验配置
安装LVS
[root@client ~]# dnf install ipvsadm -y
ipvsadm命令参数
核心功能:
-
集群服务器管理:增、删、改
-
集群服务的RS管理:增、删、改
-
查看
1.管理集群服务中的增删改
#命令格式
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A #添加
-E #修改
-t #tcp服务
-u #udp服务
-s #指点调度算法,默认为WLC,rr为轮询,wrr为权重轮询
-p #设置吃就连接超时,将同一个时间段将一个访问请求调度给同一个RS
-f #firewall mask 火墙标记,是一个数字
-L #查看lvs策略 + n 不做解析
ipvsadm -Ln #不做解析查看lvs策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr
[root@lvs ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 360
[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -D -t 172.25.254.100:80
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -L #查看lvs调度策略
[root@lvs ~]# ipvsadm -Ln #n不做解析的查看调度策略
2.管理集群服务中的RS增删改
#命令格式
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
-a #添加
-e #更改
-t #tcp / -u #udp
-f #火墙标签
-r #指定RS地址
-g #直连路由模式
-i #ipip隧道模式
-m #nat模式
-w #设定权重
-C #清空lvs策略
-L #查看lvs策略 + n 不做解析
ipvsadm -Ln #不做解析查看lvs策略
--rate #输出速率信息
ipvsadm -Ln --rate
-Z #清空计数器
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.44.10 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.44.20 -g
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.44.20 -m -w 2
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.44.30 -i -w 2
[root@lvs ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30
3.lvs调度策略的备份与恢复
#备份与恢复
[root@lvs ~]# ipvsadm-save -n > /mnt/ipvsadm.rule
[root@lvs ~]# ipvsadm-restore < /mnt/ipvsadm.rule
4.lvs调度策略的开机启动
由于缺少备份到/etc/sysconfig/ipvsadm规则调度文件,所以不能开机启动。
#需要先把调度策略导入生成调度规则文件,具有调度规则文件后才能开启服务进程
[root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# systemctl enable --now ipvsadm
#开机启动后就会自动重载保存在调度规则的文件
LVS-NAT模式
环境
主机名 | 网卡类型 | 网卡配置 |
---|---|---|
client | NAT | eth0:172.25.254.111/24 |
lvs | NAT与仅主机 | eth0:172.25.254.100/24,eth1:192.168.44.100/24 |
RS1 | 仅主机 | eth0:192.168.44.10/24 |
RS2 | 仅主机 | eth0:192.168.44.20/24 |
配置
#lvs配置
#lvs开启内核路由功能
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
sysctl -p
net.ipv4.ip_forward = 1
#添加规则策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.44.10 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.44.20 -m
测试
#测试的服务使用http所以要在lvs调度器上火墙放行80端口
#还要把RS网关指向为lvs的DIP
[root@lvs ~]# for i in {1..10};
> do
> curl 172.25.254.100;
> done
LVS-DR模式
环境
主机名 | 网卡类型 | 网卡配置 |
---|---|---|
client | NAT | eth0:172.25.254.111/24 |
router | NAT/仅主机 | eth0:172.25.254.100/24,eth1:192.168.44.100/24 |
lvs | 仅主机 | eth0:192.168.44.200/24,192.168.44.220/24 |
RS1 | 仅主机 | eth0:192.168.44.10/24,lo:192.168.44.220/32 |
RS2 | 仅主机 | eth0:192.168.44.20/24,lo:192.168.44.220/32 |
配置
#client配置
#由于要经过路由器router去通信VIP所以要配置指向router的网关
[root@client ~]# ip route add default via 172.25.254.100#router配置
#开启内核路由功能
[root@router ~]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1
#要充当路由器就要开启地址伪装
[root@router ~]# firewall-cmd --permanent --add-masquerade
[root@router ~]# firewall-cmd --reload #由于地址命令是生效在配置文件中所以要重载#lvs配置
#火墙放行80端口或者关闭火墙
[root@lsv-dr ~]# systemctl disable --now firewalld
#编写规则策略
[root@lsv-dr ~]# ipvsadm -A -t 192.168.44.220:80 -s rr
[root@lsv-dr ~]# ipvsadm -a -t 192.168.44.220:80 -r 192.168.44.10 -g
[root@lsv-dr ~]# ipvsadm -a -t 192.168.44.220:80 -r 192.168.44.20 -g
[root@lsv-dr ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.44.220:80 rr-> 192.168.44.10:80 Route 1 0 0-> 192.168.44.20:80 Route 1 0 0#RS1
#安装并开启httpd服务供client访问
[root@RS1 ~]# dnf install httpd -y
[root@RS1 ~]# systemctl enable --now httpd
[root@RS1 ~]# echo RS1 > /var/www/html/index.html #生成测试文件
#火墙放行80端口或者关闭火墙
[root@lsv-dr ~]# systemctl disable --now firewalld
#设定lo接口上的VIP不对外相应
[root@RS1 ~]# echo net.ipv4.conf.all.arp_ignore = 1 >> /etc/sysctl.conf
[root@RS1 ~]# echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf
[root@RS1 ~]# echo net.ipv4.conf.lo.arp_ignore = 1 >> /etc/sysctl.conf
[root@RS1 ~]# echo net.ipv4.conf.lo.arp_announce = 2 >> /etc/sysctl.conf
[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#配置网关指向路由器内网接口
[root@RS1 ~]# ip route add default via 192.168.44.100#RS2同RS1配置一样
测试