lvs集群、NAT模式和DR模式、keepalive

目录

lvs集群概念

集群的类型:三种类型

系统可靠性指标

lvs集群中的术语

lvs的工作方式

NAT模式

lvs的工具

算法

实验

数据流向

步骤

[一 、调度器配置(test1 192.168.233.10)](#一 、调度器配置(test1 192.168.233.10))

二、RS配置(nginx1和nginx2)

[三、地址转换(test1 192.168.233.10)](#三、地址转换(test1 192.168.233.10))

实验结果

DR模式

概念

数据流向图

问题:

1.vip地址冲突

2.返回报文时,vip地址还在,怎么样能让客户端来接收到响应

DR模式的实现

步骤

[一 、调度器配置(test1 192.168.233.10)](#一 、调度器配置(test1 192.168.233.10))

二、RS配置(nginx1和nginx2)[两遍都要修改]

实验结果

总结

总结实验

lvs实现四层转发+nginx实现7层转发(动态),访问lvs的vip地址可以实现动静分离

数据流向图

实验步骤

实验结果

lvs的三种工作模式

高可用的HA架构

概念

keepalive实验

实验步骤

​编辑

实验结果​编辑


lvs集群概念

全称是linux virtual server,是在Linux的内核层面实现负载均衡的软件。

主要作用:将多个后端服务器组成一个高可用高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器上,来实现高可用和负载均衡。

阿里的SLB server loab balance 是用lvs+keepalive实现的。

集群和分布式

系统的拓展方式:

垂直扩展:向上扩展,增强性能更强的计算机。瓶颈:计算机本身设备的限制;硬件本身的性能瓶颈

水平扩展:向外拓展,增加设备。并行的运行多个服务,依靠网络解决内部通信的问题,cluster集群

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

集群的类型:三种类型

LB:load balance 负载均衡集群,多个主机组成,每个主机只承担一部分的访问请求

HA:high availiablity 高可用,在设计系统时,采取一定的措施,确保系统当中某一组件或者部分出现故障,整个系统依然能够正常的运行。为了维护系统的可用性,可靠性,容错性

HPC:high-performance computing 高性能集群,对响应时间,处理能力要求更高

系统可靠性指标

MYBF:Mean Time Between Failure 平均无故障时间

MTTR:Mean Time Resotration repair 平均故障恢复时间

A=MTBF/(MTBF+MTTR)

A指标要在0-1之间,A指标就是系统可用性的度量。0表示系统越不可用,1表示系统越可用

A指标要无限接近于1 (98%-99%合格;90%-95%不合格)

都是以小时为单位(1年365天8760小时)

停机时间和计划内时间不算在内

计划外时间,即故障时间,从故障发生到故障解决的总时间,计划外时间是我们必须关注的一个指标

lvs适用场景:

小集群不需要使用lvs,用nginx,大集群使用lvs

lvs集群中的术语

VS:vittual server lvs服务的逻辑名称,也就是我们外部访问lvs集群时使用的ip地址和端口

DS:director server lvs集群中的主服务器,也就是调度器(即nginx的代理服务器),是集群的核心,调度器就是用来接受客户端的请求转发到后端的服务器

RS:real server lvs集群中的真是服务器,后端服务器,用来接受DS转发来的请求并且响应结果

CIP:client ip 客户端的地址,也就是发起请求的客户端地址

VIP:virtual ip lvs集群使用的ip地址,对外提供集群访问的虚拟ip地址

DIP:director ip 调度器在集群当中的地址,用于和RS进行通信

RIP:real ip 后端服务器在集群当中的ip地址

lvs的工作方式

NAT模式:模式由调度器响应给客户端 (地址转换)

DR模式(直接路由模式):真实服务器直接响应给客户端

TUN模式:隧道模式

常用的模式:NAT模式和DR模式

NAT模式

在NAT模式下,lvs会将来自客户端的请求报文中的目标ip地址和端口,修改为lvs内部的ip地址和端口,然后把请求转发到后端服务器。

响应结果返回客户端的过程中,响应报文经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口。

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。

然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。

真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,

把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

优点:集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。

缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,

因此负载均衡器将成为整个系统的瓶颈。

特点是地址转换

地址转换:内网------外网 转换的是源ip地址 SNAT

外网------内网 转换的是目的ip地址 DNAT

lvs的工具

ipvsadm工具,用来配置和管理lvs集群的工具

-A 添加虚拟服务器 vip

-D 删除虚拟服务器地址

-s 指定负载均衡的调度算法

-a 添加真是服务器

-d 删除真实服务器

-t 指定vip的地址和端口

-r 指定rip的地址和端口

-m 使用NAT模式

-g 使用DR模式

-i 使用隧道模式

-w 设置权重

-p 60 连接保持60s 设置连接保持时间

-l 列表查看

-n 数字化展示

算法

轮询 rr

加权轮询 wrr

最小连接 lc

加权最小连接 wlc

实验

数据流向

nginx 1 RS1 192.168.233.20

nginx2 RS2 192.168.233.30

test1 调度器 ens33 192.168.233.10 ens36 12.0.0.1

test2 客户端 12.0.0.10

步骤
一 、调度器配置(test1 192.168.233.10)

yum -y install ipvsadm* -y

配置ens33

systemctl restart network

配置ens36

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifcfg-ens36

vim ifcfg-ens36

systemctl restart network

二、RS配置(nginx1和nginx2)

配置nginx1 192.168.233.20 修改网关

systemctl restart network

配置nginx2 192.168.233.30 修改网关

systemctl restart network

vim /usr/local/nginx/html/index.html

修改访问页面的内容

查看访问是否连接

三、地址转换(test1 192.168.233.10)

iptables -t nat -vnL 查看nat表是否有策略

iptables -t nat -A POSTROUTING -s 192.168.233.0/24 -o ens36 -j SNAT --to 12.0.0.1

从192.168.233.0/24出的设备地址转换成12.0.0.1

ipvsadm -C 清空原有的策略

ipvsadm -A -t 12.0.0.1:80 -s rr 指定好vip的地址和端口

先添加vip,虚拟服务器的ip和端口,然后再添加真实服务器

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

-a 添加真实服务器

-t 指定vip地址

-r 指定真实服务器的地址和端口

-m 指定模式为nat模式

ipvsadm -ln 查看

ipvsadm-save 保存

ipvsadm -D -t 192.168.233.10:80 删除策略

ipvsadm -d -r 192.168.233.20: -t 12.0.0.1:80 删除节点服务器

5.开启路由转发功能

vim /etc/sysctl.conf

net.ipv4.ip_forward=1

四、客户端(test2 12.0.0.10 )

修改test2的ip地址和网关

实验结果

加权轮询

DR模式

概念

它是直接路由模式

NAT模式:调度器在整个lvs集群当中是最重要的,在nat模式下,既负责接收请求,同时根据负载均衡的算法转发流量,响应发送给客户端

DR模式:调度器依然负责接收请求,同时也根据负载均衡算法转发流量到RS,响应直接由RS响应给客户端

直接路由 Direct Routing :是一种二层转发模式,二层转发的是数据帧,根据源mac地址和目的mac地址进行转发,不会修改数据包源ip和目的ip。根据数据包mac地址进行转发。

DR模式下,lvs也是维护一个虚拟的ip地址,所有的请求都是发送到这个vip,既然走二层转发,当客户端的请求到达调度器之后,根据负载均衡的算法选择一个RS,修改vip服务器的目的mac变成RS的mac地址,RS处理完请求之后,根据报文当中客户端的源mac地址直接把响应发送到客户端即可,不需要走调度器了。

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。

然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。

真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。

所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

数据流向图
问题:
1.vip地址冲突

原因:调度器配置了vip,RS也配置了vip地址。vip地址冲突,因为调度器和RS都在同一个网段,会造成ARP通信紊乱。因为是整个局域网广播,所有的设备都收到了。

怎么把lo这个回环的响应把它屏蔽掉,只有本机的物理ip地址响应。

解决方法:修改内核参数:arp_ignore=1

系统的物理ip地址才会响应ARP请求,lo回环接口不会响应ARP请求

2.返回报文时,vip地址还在,怎么样能让客户端来接收到响应

解决方法:arp_announce=2

系统不使用ip数据包的源地址来响应ARP请求,直接发送物理接口的ip地址

DR模式的实现

nginx1 RS(真实ip) 192.168.233.20

nginx2 RS 192.168.233.30

vip 192.168.233.100

调度器 192.168.233.10

客户端 192.168.233.40

步骤
一 、调度器配置(test1 192.168.233.10)

yum -y install ipvsadm* -y

添加虚拟网卡ens33:0

修改调度器的响应参数

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

sysctl -p

添加策略

cd /opt

ipvsadm -A -t 192.168.233.100:80 -s rr

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.20:80 -g

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.30:80 -g

ipvsadm-save >/etc/sysconfig/ipvsadm

systemctl restart ipvsadm

ipvsadm -ln

二、RS配置(nginx1和nginx2)[两遍都要修改]

修改静态页面的展示内容

vim /usr/local/nginx/html/index.html

systemctl restart nginx

添加回环地址

cd /etc/sysconfig/network-scripts/

cp ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

添加lo:0接口做为vip

route add -host 192.168.233.100 dev lo:0

设置ip地址为192.168.233.100的地址添加到回环接口,做为lvs的vip,通过路由的模式转发到RS,能让vip识别到真实的服务器

修改RS真实服务器的内核响应

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

实验结果

修改vip轮询的算法

修改策略轮询当中的权重

总结

lvs和nginx做负载均衡的区别

lvs是四层转发,走的是内核态 ip+端口 只能做四层代理

nginx 四层代理 ,也可以七层代理

总结实验

lvs(DR模式)+nginx+tomcat

lvs实现四层转发+nginx实现7层转发(动态),访问lvs的vip地址可以实现动静分离

数据流向图

实验步骤

在上面DR模式的实验基础上实现动静分离

一、tomcat部分

1.分别在tomcat1和tomcat2做动态页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP test1 page</title>

</head>

<body>

<% out.println("动态页面 1,http://www.test1.com");%>

</body>

</html>

2.分别在tomcat1和tomcat2添加站点

cd conf

vim server.xml

先删除原有的站点

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />

查看端口是否启动

访问192.168.233.40:8080/index.jsp

二、nginx部分

配置nginx2和nginx3

cd /usr/local/nginx/conf/

cp nginx.conf nginx.conf.bak.2024.07.08

vim nginx.conf

upstream tomcat {

server 192.168.233.40:8080 weight=1;

server 192.168.233.50:8080 weight=1;

}

location ~ .*\.jsp$ {

proxy_pass http://tomcat;

proxy_set_header HOST $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

然后systemctl restart nginx

配置nginx1代理

做四层代理

cd /usr/local/nginx/conf

vim nginx.conf

然后systemctl restart nginx

实验结果

访问192.168.100:81 静态页面

访问192.168.233.100:82/index.jsp 动态页面

lvs的三种工作模式

NAT DR TUN

优点 地址转换,配置简单 性能最好 WAN,可以实现 较远距离的数据包转发

缺点 性能瓶颈 不支持跨网段 专用的通道,需要开 通VPN(花钱)

RS的要求 无限制 必须要禁止非物理接口的ARP响应 要支持隧道模式

RS的数量 10-20台 100台 100台

面试题:

1.简述lvs的三种模式和区别

上面的表

2.keepalive的脑裂怎么解决

高可用的HA架构

Keepalive概念

它是lvs集群当中的高可用架构,只是针对调度器的高可用

基于vrp来实现调度器的主和备之间的切换

主调度器和备调度(多台)

在主调度器正常工作的时候,备完全处于冗余状态(待命),不参与集群的运转。只有当主调度器出现故障时,备才会承担主调度器的工作。如果主调度器恢复功能之后,主继续做为集群的入口,备继续处于冗余状态,不绝对取决于优先级。

keepalive基于vrp协议来实现lvs高可用(主备切换)

1.组播地址

224.0.0.18根据组播地址来进行通信,主和备之间发送报文。确定对方是否存活

2.根据优先级的大小来确定主和备的位置

3.故障切换,主挂了,备来继续工作。主恢复了,备继续待命

4.主和备之间的切换是vip地址的切换

keepalive是专门为了lvs而出现的,但不是lvs专用的,keepalive也可以使用nginx,haproxy

core模块:keepalive的核心模块,负责主进程的启动、维护以及全局配置文件的加载

vrrp模块:实现vrrp协议的模块,也就是主功能模块

check模块:负责健康检查,也可以检查后台真实服务器的情况

配置注意点:

1.配优先级

2.配置vip和真实服务器

3.主备的id要一致

4.主备的id要区分

keepalive实验

test1 192.168.233.10 主

test2 192.168.233.50 备

vip 192.168.233.100

nginx1 192.168.233.20

nginx2 192.168.233.30

客户端 192.168.233.40

实验步骤

1.主和备都要同样操作

yum -y install ipvsadm keepalived

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

sysctl -p

ipvsadm -C

ipvsadm -A -t 192.168.233.100:80 -s rr

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.20:80 -g

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.30:80 -g

ipvsadm-save >/etc/sysconfig/ipvsadm

systemctl restart ipvsadm

ipvsadm -ln

cd /etc/keepalive

vim keepalived.conf

实验结果

ip addr

keepalive+nginx实现高(主备切换)

数据流线图

实验步骤

1.vim check_nginx.sh

写一个check_nginx.sh的脚本

bash 复制代码
#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi
  1. chmod 777 check_nginx.sh

cd /etc/keepalived/

vim keepalived.conf

script "/opt/check.nginx.sh"

调用脚本内容,检测nginx的状态

interval 5

检测的间隔时间是5s

删除这个后面的所有内容并添加监控配置

systemctl restart nginx

systemctl restart keepalived

3.把主的配置复制到备进行修改

scp root@192.168.233.20:/etc/keepalived/keepalived.conf /etc/keepalived/

cd /etc/keepalived/

vim keepalived.conf

实验结果

如果主nginx停止 keepalive也自动停止 备启用

面试题:脑裂是什么?怎么解决脑裂

HA高可用架构中的一个特殊现象,只要使用vip地址代理的冗余模式的高可用, 都有可能出现脑裂的问题。现象:主和备同时都有vip地址。

主和备无法确定各自的身份,同时出现了vip地址,就是两边都起来了,但是两边都无法使用。

原因:1.keepalive的配置文件问题

2.心跳线(网线)问题

3.网卡(硬件问题)、ip地址配置冲突

4.防火墙的策略和iptables的策略,屏蔽了组播地址的广播,屏蔽了vrrp协议的报文

5.两台服务器的时间不同步也可能导致

6.其他的服务配置对心跳线的检测造成了干扰

解决方法:

1.检查keepalive.conf里面的配置是否对

2.查看网线是否坏了

3.ifconfig检查ip地址是否冲突

4.查看电脑硬件是否有问题

5.iptables -vnL查看策略看看是否冲突

6.systemctl status firewalld 查看防火墙的状态是否关闭

7.查看两台服务器的时间是否同步

8.以上都没有问题再检查其他服务配置

相关推荐
Ap04155 天前
LVS介绍以及模式实现
lvs
天蓝不会忘记025 天前
lvs,haproxy,keepalived,nginx,tomcat介绍和实验
nginx·tomcat·lvs
qizhideyu5 天前
LVS(Linux virual server)
linux·运维·lvs
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
Yiiz.5 天前
LVS实验
lvs
️️(^~^)5 天前
LVS实验
linux·服务器·lvs
gx23485 天前
1-LVS
linux·服务器·lvs
unfeeling_6 天前
LVS实验
lvs
芝士雪豹只抽瑞克五6 天前
Linux Virtual Server (LVS) 负载均衡集群笔记
linux·笔记·负载均衡·lvs
屎到临头想搅便6 天前
LVS负载均衡
网络·lvs