LVS集群

集群:为解决某个特定问题将多个计算机结合起来形成一个单系统

集群发展历史

集群的目的就是为了解决系统的性能瓶颈

垂直扩展:向上扩展,增强单个计算机的性能,升级硬件,硬件升级是有瓶颈的

水平扩展:向外扩展,增加设备,并行的运行多个服务,通过网络和算法来调度服务分配的问题

集群的类型

负载均衡集群:LB load blance 多个主机组成,每台主机只承担一部分访问请求,靠负载均衡算法来实现

高可用集群:HA high availablity 避免SPOF(single point of failuer)单点故障,系统当中有一部分出现故障,可以保障整个系统继续运行

即能满足主从----同步(某些特定的服务需要)----负载均衡

HPC:high-performance computing 快速转发,快速响应

集群可靠性指标(系统的可靠性指标)

MTBF:mean time between failure 系统在正常运行期间无故障的平均时间,一般用小时或者天数来表示,MTBF值越高,系统的可靠性越高,出现故障的概率也越小

MTTR:系统从发生故障到恢复正常运行的平均时间,一般用小时或者天数表示,MTTR值越小,说明系统恢复故障的能力越强

A:系统可靠性的指标 A值越高越好

A=MTBF/(MTBF+MTTR)%

停机时间

计划内停机:指的是预定时间内的维护或者检修时间,时间是自定义的

计划外停机:运维人员关注的就是计划外,突然出现故障没有响应

设计集群时需要考虑的一些原则

1、可扩展性:集群要有随时可以添加或者删除设备的能力,动态的扩缩容

2、可靠性:集群中如果有节点发生故障,可以快速检测并且自动切换

3、负载均衡:合理的分配负载,避免单个节点过载,影响整体性能

4、可维护性:能够方便的进行配置,部署,维护,监控,降低成本

5、安全性:防止恶意的攻击,以及数据泄密,数据丢失

6、易用性:相关的工作人员,可以方便进入集群,能够快速的开发,部署测试等等

lvs集群当中的术语

vs virtual server lvs服务的逻辑名字,外部访问lvs集群是提供的一个虚拟IP地址和端口

DS:Director server:lvs集群当中的主服务器,也叫调度器,是整个lvs集群的核心,接受客户端的请求转发到后端RS

RS:real server lvs的后端的真实服务器的ip,接受到了DS的请求之后,返回响应结果

CIP:client ip 客户端的IP地址

VIP:virtual ip对外提供访问的统一虚拟ip

DIP:Director ip 调度器在lvs内部使用的ip地址,用于和真实服务器进行通信

RIP:后端真实服务器的IP地址

lvs的负载均衡方式

NAT DR TUN

其中NAT和DR最常用的方式

设置lvs

ipvsadm工具:管理ipvs内核模块的命令行工具,可用于配置和管理lvs集群

-A:添加虚拟服务器

-D:删除整个虚拟服务器

-s:指定负载调度的算法

算法

静态调度(固定调度)

rr轮询

wrr加权轮询

dh目的地址hash

根据IP地址查找静态hash表,获取需要真实的RS的地址

sh源地址hash

lc:最小连接调度

wlc:加权最小连接数调度

-a:添加真实服务器

-d:删除真实的服务器

-t:指定VIP地址的端口号

-r:指定RIP的端口号

-m:表示使用的nat模式

-g:表示使用DR模式

-i:表示使用隧道模式

-w:设置真实服务器的权重

-p 60(秒):设置连接保持的时间60秒(默认不带)

-ln:以数字以列表的形式,查看lvs的配置信息

NAT模式

最常用的lvs负载方式之一,地址转换

lvs-nat工作流程

1、客户端访问都是访问VIP

2、DS接受到请求,根据调度算法选择好后端服务器(rs)

请求发送给rs

3、RS处理请求并将响应发送到DS

4、DS把RS的响应包装成自己相应,发送到客户端

NAT模式工作模式

1、在调度器上配置双网卡,一个指内,一个指外

2、配置一个可以和公网进行通信的VIP

3、配置转发策略,如果访问VIP就会把请求的数据转发到后台的RS

请求的格式:报文,调度器会修改请求的目标iIP地址和端口

4、RS处理完请求之后响应客户端,先到调度器进行地址转换,把内网地址转换成公网地址,响应给用户

后端服务器------调度器-----NAT转换------前端服务器----客户端

nat:对于客户端来说请求地址始终不变的,客户端不需要修改任何配置,转发由调度器通过算法来完成,后端服务器只管接受响应,也不需要修改任何配置

性能损失和单点故障

nat模式部署方式

负载调度器:配置双网卡ens33:20.0.0.10(内网) 12.0.0.1(ens36)

两台后端web真实服务器:

一台NFS共享服务器:

关闭防火墙和安全机制

配置共享服务器

安装共享服务 nfs-utils rcpbind

在opt目录下创建目录 kgc benet

分别echo

重启服务

先启动网络rpcbind

在启动nfs

发布服务 exportfs -rv

配置两台服务器

修改网卡配置

把网关IP地址改为nfs共享服务器的IP地址

注释DNS

安装共享服务 nfs-utils rcpbind

安装nginx

showmount -e 共享服务器IP地址

mount IP地址:/opt/benet或者kgc /usr/loacl/nginx/html

重启服务

curl 服务端的IP地址

调度器配置

改配置文件

网关和DNS注释

添加网卡设置

改网卡名称和IP地址

重启网卡

安装iptables-service iptables

iptables -F清空原有策略

iptables -t nat -APOSTROUNING -s 网段 -o ens36 -j SNAT to 进来的ip

查看配置 iptables -t nat vnl

创建VIP地址 ipvsadm -A -t 12.0.0.1:80 -s rr

创建一号真实服务器(添加节点服务器)

ipvsadm -a -t 12.0.0.1:80 -r 192.0.0.20:80 -m

创建二号真实服务器

ipvsadm -a -t 12.0.0.1:80 -r 192.0.0.30:80 -m

保存策略

ipvsadm-save>/etc/sysconfig/ipvsadm

查看策略 ipvsadm -ln

删除策略 ipvsadm -d -r 192.0.0.30:80 -t 调度服务器

打开网关的服务器转发etc/sysctl.conf

net.ipv4.ip------forward = 1

sysctl -p立刻生效

然后测试

lvs-DR模式

也是最常用的lvs负载方式,DRDIRECT ROUTING 直接路由模式

负载均衡器lvs调度器,只负责请求和转发到后端的真实服务器,但是响应结果,由后端服务器直接转发给客户端,不需要经过调度器的处理,减轻LVS调度器的负担,提高了性能和稳定性

LVS-DR的工作原理

1、客户端发送请求到VIP

2、LVS的调度器接受请求之后,根据算法选择一台真实服务器,请求转发到后端RS,请求的报文的目的Mac地址,修改成后端真实服务器的Mac地址,转发

3、后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应转发给客户端,响应报文中的目的的Mac地址修改成客户端的Mac地址,直接把响应报文转发到客户端

4、调度器,后端真实服务器都有VIP地址,调度器地址和后端真实服务器在同一网段

DR模式的特点

1、调度器的ip和真实服务器的IP地址在同一物理网络中

2、真实服务器的IP地址可以是私有地址,也可以是公网地址,如果配置的是公网,通过互联网可以直接访问RIP

3、调度器只作为入口,但是 不做网关,要把服务器的转发功能关闭

4、真实服务器的网关也不能指向调度器,真实服务器的数据包,是不允许经过调度器

5、后端真实服务器上,基于LO接口配置VIP的IP地址

ARP协议:网络层协议,将IP地址解析为物理Mac地址

ARP解决局域网内部的通信,IP地址和Mac地址映射

DR模式的调度器和后端服务器都在一个网段中,通过ARP请求实现

VIP的作用

标识后端的真实服务器

保证调度器和后端服务器之间的通信,保证请求可以正确的转发到后端服务器

实现高可用和故障转移

问题一

由于调度器和后端真实服务器都有相同的VIP地址,导致响应冲突,ARP 通信紊乱

对真实服务器进行处理,真实服务器不响应针对VIP的ARP请求

VIP地址使用LO的虚拟地址:arp_ignore=1

后端真实服务器只响应目的为本地ip,也就是RIP,后端服务器的真正IP地址,ens33网卡提供的地址

问题二

返回报文使用的源地址还是VIP地址,调度器也是VIP,怎么把响应返回到客户端不经过调度器

真实服务器做一个内核参数的优化:arp_announce=2 系统不使用IP数据包的源地址,来设置arp的请求

真实的物理网卡的地址

如何实现DR模式的负载均衡

准备前期

host1:20.0.0.10

host2:20.0.0.20(nfs共享服务器)

web集群1:20.0.0.40

web集群2:20.0.0.41

实验步骤:

关闭防火墙和安全机制

配置调度器

加载内核:modprobe ip_vs

安装ipvsadm yum -y install ipvsadm

配置VIP地址

ipconfig ens33:0 20.0.0.100/24

调度器内核优化 /etc/sysctl.conf

复制代码
net.ipv4.ip_forward = 0
#关闭服务器作为网关的转发功能
net.ipv4.conf.all.send_redirects = 0 
#控制是否发送ICMP的重定向消息,禁止重定向
net.ipv4.conf.default.send_redirects = 0 
#禁止默认网络接口,就是调度器的网卡,发送ICMP的重定向消息
net.ipv4.conf.ens33.send_redirects = 0
#指明网卡设备,ens33不发送重定向消息

sysctl -p立刻生效

ipvsadm-save >/etc/sysconfig/ipvsadm

ipvsadm -A -t 20.0.0.100:80 -s rr

ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.30:80 -g

ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.40:80 -g

ipvsadm-save >/etc/sysconfig/ipvsadm

重启服务

ipvsadm -ln 查看策略

nfs共享服务器

安装共享服务yum -y install nfs-utils rpcbind

在opt目录下创建共享目录并赋权

/etc/exports

复制代码
/opt/kgc 20.0.0.20(rw,sycn)
/opt/benet 20.0.0.20(rw,sycn)

重启服务

发布服务 exports -rv

查看服务 showmount -e

web1

安装nginx 共享

查看能否共享 showmout -e 20.0.0.20

挂载共享目录

mount 20.0.0.20:/opt/kgc

curl 20.0.0.40 测试是否联通

网卡设备(根据回环网卡)

cd /etc/sysconfig/network-scripts/

cp /ifcfg-lo ifcfg-lo :0

vim ifcfg-lo:0

复制代码
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255

oute add -host 20.0.0.100 dev lo:0

把VIP的地址绑定到lo:0,作为整个LVS的VIP地址,标识,告诉调度器,进行转发请求的ip地址寻址

内核优化

vim /etc/sysctl.conf

复制代码
net.ipv4.conf.lo.arp_ignore=1
设置lo接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce=2
设置lo接口仅响应本地的IP地址,其他的接口arp请求,全部忽略
net.ipv4.conf.all.arp_ignore=1
所有接口忽略来自任务接口的arp请求
net.ipv4.conf.all.arp_announce=2
所有接口仅会响应本地的IP地址的arp请求,其他的接口的arp请求全部忽略

sysctl -p 立刻生效

web2操作同上

nfs共享服务器上测试

LVS+keepalived 高可用集群

keepalived为LVS应运而生的高可用服务,lvs的调度器无法做高可用,于是keepalived这个软件,实现的是调度器的高可用

但是keepalived不是专门为lvs集群服务器的,也可以做其他代理服务器的高可用

lvs的高可用集群:主调度器和备调度器(可以是多个)一主两备一主一备

主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理,其余的备用调度器处在冗余状态

不参与集群的运转,主调度器出现故障无法运行,备调度器才会承担主调度器的工作

一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成冗余

VRRP:keepalived是基于vrrp协议实现lvs服务的高可用,解决了调度器单节点的故障问题

VRRP协议:提高网络路由器的可靠性开发的一种协议

选举出主和备,预先设定好了主和备的优先级,主的优先级较高,备的优先级低,一旦开启服务器,优先级高的,会自定抢占主的位置

VRRP组播通信:224.0.0.18 VRRP协议当中的主备服务器通过组播地址通信,交换主备服务器之间的云溪谷状态,主服务器会周期性的发送VRRP报文消息,已告知其他服务器,主服务器现在的状态

主备切换:主服务器发生故障,或者不可达,VRRP协议会把请求转移到备服务器,通知组播地址,VRRP可以迅速的通知其他服务器发生了

主备切换,确保新的主服务器可以正常的处理客户端的请求

故障恢复:一旦主服务器恢复通信,有组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求

keepalived的体系模块

全局模块:core模块,负责整个keepalived启动加载和维护

VRRP模块:实现VRRP协议,主备切换

check模块:负责健康检查,检查后端真实的服务器的健康检查,配置真实服务器的模块当中

lvs-DR模式结合keepalived

host1主调度器20.0.0.10

host2备调度器20.0.0.20

nginx1后端真实服务器20.0.0.40

nginx2后端真实服务器20.0.0.41

VIP地址:20.0.0.100

客户端:20.0.0.30

配置主备服务器

先关闭防火墙和安全机制

安装服务ipvsadm keepalived

cd /etc/keepalived给配置文件做备份

改配置文件keepalived.conf

复制代码
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_01
#主备服务的id,主和备的id不能一致
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
#标识身份,主备BACKUP
    interface ens33
#指定VIP地址的物理接口
    virtual_router_id 10
#虚拟机路由器的id号
    priority 100
#优先级
    advert_int 1
#发送报文的间隔时间默认10秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        20.0.0.100
  #指定集群的VIP地址
    }
}

virtual_server 20.0.0.100 80 {
   delay_loop 6
   #健康检查的间隔时间
   lb_algo rr
   #负载均衡的调度算法
   lb_kind NAT -- DR
   #指定lvs集群的工作方式,要大写
   persistence_timeout 50 --0
   #连接保持时间50秒,,为了实验效果设为0秒

   real_server 20.0.0.40 80 {
  weight 1
  #后端服务器的轮询权重
   TCP_CHECK {
     connect_port 80
     #检测目标的端口号
     connect_timeout 3
     #检测连接超时时间
     nb_get_retry 3
     #重试次数
     delay_before_retry 4
     #重试间隔秒数
   }
}
real_server 20.0.0.41 80 {
  weight 1
  #后端服务器的轮询权重
   TCP_CHECK {
     connect_port 80
     #检测目标的端口号
     connect_timeout 3
     #检测连接超时时间
     nb_get_retry 3
     #重试次数
     delay_before_retry 4
     #重试间隔秒数
   }
}


}

ipvsadm-save > /etc/sysconfig/ipvsadm 保存策略

重启服务systemctl restart keepalived

ipvsadm-save > /etc/sysconfig/ipvsadm 保存策略

ipvsadm -ln 查看策略

查看vip地址 ip addr

关闭转发功能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

sysctl -p立刻生效

配置备服务器

可以按照主服务器配置但是只需修改keepalived配置文件

改优先级标识

改主备id

改标识身份

复制代码
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_02
#主备服务的id,主和备的id不能一致
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
#标识身份,主备BACKUP
    interface ens33
#指定VIP地址的物理接口
    virtual_router_id 10
#虚拟机路由器的id号
    priority 90
#优先级
    advert_int 1
#发送报文的间隔时间默认10秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        20.0.0.100
  #指定集群的VIP地址
    }
}

virtual_server 20.0.0.100 80 {
   delay_loop 6
   #健康检查的间隔时间
   lb_algo rr
   #负载均衡的调度算法
   lb_kind NAT -- DR
   #指定lvs集群的工作方式,要大写
   persistence_timeout 50 --0
   #连接保持时间50秒,,为了实验效果设为0秒

   real_server 20.0.0.40 80 {
  weight 1
  #后端服务器的轮询权重
   TCP_CHECK {
     connect_port 80
     #检测目标的端口号
     connect_timeout 3
     #检测连接超时时间
     nb_get_retry 3
     #重试次数
     delay_before_retry 4
     #重试间隔秒数
   }
}
real_server 20.0.0.41 80 {
  weight 1
  #后端服务器的轮询权重
   TCP_CHECK {
     connect_port 80
     #检测目标的端口号
     connect_timeout 3
     #检测连接超时时间
     nb_get_retry 3
     #重试次数
     delay_before_retry 4
     #重试间隔秒数
   }
}


}
配置后端服务器

先关闭防火墙和安全机制

安装nginx服务

配置vip

复制代码
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255

ifup ifcfg-lo:0生效

绑定回环接口

route add -host 20.0.0.100 dev lo:0

vim /etc/sysctl.conf

复制代码
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

sysctl -p立刻生效

nginx2同上操作

客户机测试

模拟主服务器出故障(停止服务器)

主服务vip转移到备服务上

主服务器

备服务器

测试结果

开启主服务器服务vip会转移到主服务器上

模拟节点服务器(停止nginx1 服务器)

开启nginx的服务

轮询

在配置该权重然后在测试

相关推荐
段帅龙呀21 分钟前
Redis构建缓存服务器
服务器·redis·缓存
乌鸦不像写字台1 小时前
【docker部署】在服务器上使用docker
服务器·docker·容器
牧以南歌〆2 小时前
在Ubuntu主机中修改ARM Linux开发板的根文件系统
linux·arm开发·驱动开发·ubuntu
Antonio9153 小时前
【音视频】HLS简介与服务器搭建
运维·服务器·音视频
夜月yeyue3 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件
kfepiza4 小时前
Debian的`/etc/network/interfaces`的`allow-hotplug`和`auto`对比讲解 笔记250704
linux·服务器·网络·笔记·debian
无妄-20244 小时前
软件架构升级中的“隐形地雷”:版本选型与依赖链风险
java·服务器·网络·经验分享
R.X. NLOS4 小时前
VS Code远程开发新方案:使用SFTP扩展解决Remote-SSH连接不稳定问题
运维·服务器·ssh·debug·vs code
cuijiecheng20185 小时前
Ubuntu下布署mediasoup-demo
linux·运维·ubuntu
独行soc7 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 33(题目+回答)
linux·科技·安全·网络安全·面试·职场和发展·护网