LVS+keepalived——高可用集群

LVS+keepalived——高可用集群

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

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

lvs的高可用集群是建立在主调度器和备调度器(可以有多个)一般是一主两备或一主一备。

主调度器能正常运行时,由主调度器进行后端真实服务器的分配处理。其余的备用调度器处在冗余状态不参与集群的运转,主调度器出现了故障无法运行,备调度器才会承担主调度器的工作。

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

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

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

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

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

主备切换:主服务器发生故障或者不可达,VRRP协议会把请求转移到备服务器。通过组播地址,VRRP可以迅速的通知其他服务器发生了主备切换,确保新的服务器可以正常的处理客户端请求。

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

lvs-DR模式结合keepalived

keepalived+LVS-DR实验

主调度器 20.0.0.20

备调度器 20.0.0.30

真实服务器1 20.0.0.25

真实服务器2 20.0.0.26

vip地址 20.0.0.100

客户端 随机

关闭五台机器的防火墙和安全机制

在主备服务器上安装架构

yum -y insstall ipvsadm keepalived

在后端真实服务器25 26 都安装nginx

回到调度器主机20

给文件做备份

LVS+keepalived——高可用集群_第1张图片

vim keepalived.conf

keepalived的体系模块

全局模块:

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

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

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

回到实验

在全局模块中配置邮箱地址 127.0.0.1

router_id LVS_01
#主和备的id不能一致

注释vrrp_strict
#取消严格遵守VRRP协议功能。不取消vip无法连接

LVS+keepalived——高可用集群_第2张图片

进入vrrp模块

state MASTER
#标识身份,主:MASTER  备:BACKUP

interface  ens33
#指定vip地址的物理接口

virtual_router_id 51
#虚拟路由器的id号。主备必须保持一致

priority 100
#优先级

advert_int 1
#发送报文的间隔时间。工作环境中不用频繁的发送。工作中设置10秒左右或者30秒左右即可

auth_type PASS

auth_pass 1111
#可以不动如果需要改动。必须主备一致。默认即可

virtual_ipaddress {

20.0.0.100

}
#指定集群的vip地址

LVS+keepalived——高可用集群_第3张图片

virtual_server 20.0.0.100 80 {

delay_loop 6
#健康检查的间隔时间。检查的是后端真实服务器

lb_algo rr
#负载均衡的调度算法

lb_kind DR
#指定LVS集群的工作方式。工作方式要大写

persistence_timeout 0
#连接保持时间50秒,方便实验所以改成0

protocol TCP
#协议端口

}

LVS+keepalived——高可用集群_第4张图片

real_server 20.0.0.25 80 {

weight 1
#后端真实服务器的轮询权重

添加配置

TCP_CHECK {
#心跳线。检查后端真实服务器的心跳线

connect_port 80
#检测目标的端口号

connect_timeout 3
#检测连接超时时间。3秒

nb_get_retry 3
#重试的次数。3次

delay_before_retry 4
#重试的间隔秒数。4秒

}
}

LVS+keepalived——高可用集群_第5张图片

real_server 20.0.0.26 80 {

weight 1
#后端真实服务器的轮询权重

添加配置

TCP_CHECK {
#心跳线。检查后端真实服务器的心跳线

connect_port 80
#检测目标的端口号

connect_timeout 3
#检测连接超时时间。3秒

nb_get_retry 3
#重试的次数。3次

delay_before_retry 4
#重试的间隔秒数。4秒

}
}

}

保存退出后重启服务

restart keepalived

ipvsadm -ln #查看是否成功

LVS+keepalived——高可用集群_第6张图片

ipaddr不需要手动配置会自动生成

关闭调度功能

LVS+keepalived——高可用集群_第7张图片

LVS+keepalived——高可用集群_第8张图片

主调度器20配置完毕

到备调度器30

远程复制

LVS+keepalived——高可用集群_第9张图片

更改备的id名称

LVS+keepalived——高可用集群_第10张图片

更改优先级和名称

LVS+keepalived——高可用集群_第11张图片

LVS+keepalived——高可用集群_第12张图片

进入后端真实服务器25

cd html

vim index.html

this is test 1

配置虚拟网卡

vim ifcfg-lo:0

LVS+keepalived——高可用集群_第13张图片

ifup ifcfg-lo:0

ifconfig 查看一下

LVS+keepalived——高可用集群_第14张图片

curl 20.0.0.25 测试一下

进入后端26

LVS+keepalived——高可用集群_第15张图片

vim ifcfg

LVS+keepalived——高可用集群_第16张图片

LVS+keepalived——高可用集群_第17张图片

到客户端主机 curl 20.0.0.100 测试一下

LVS+keepalived——高可用集群_第18张图片

集群工作正常。开始测试keepalived

回到主调度器20

关闭主调度器20的keepalived

ip addr 查看vip地址是否还在

再到副调度器30查看是否有vip地址

再到客户端测试是否能访问

回到主调度器20

恢复keepalived

看看主调度器的vip能否回来

再回到30调度器查看vip在不在

回到客户端测试能否访问

实验结束

实验结果测试关闭主站vip转移

验证节点服务器失效和恢复

关闭和开启nginx服务测试

如果节点失效还可以加入集群

主站图:

LVS+keepalived——高可用集群_第19张图片

副站图:

LVS+keepalived——高可用集群_第20张图片

测试结果:

LVS+keepalived——高可用集群_第21张图片

重启主站图:

LVS+keepalived——高可用集群_第22张图片

副站图:

LVS+keepalived——高可用集群_第23张图片

结果图:

LVS+keepalived——高可用集群_第24张图片

测试轮询

LVS+keepalived——高可用集群_第25张图片

轮询结果

LVS+keepalived——高可用集群_第26张图片

keepalived+nginx实验

主nginx1 20.0.0.20

备nginx2 20.0.0.30

vip地址 20.0.0.100

客户端 20.0.0.40

准备三台nginx

关闭三台机器的防火墙和安全机制

启动20和30的nginx服务不需要安装ipvs只安装keepalived

改配置文件之前先备份

LVS+keepalived——高可用集群_第27张图片

先配置主20

vim keepalived

LVS+keepalived——高可用集群_第28张图片

LVS+keepalived——高可用集群_第29张图片

LVS+keepalived——高可用集群_第30张图片

在全局配置和vrrp配置中间插入周期性执行的脚本

vrrp_script check_nginx {

script "/opt/check_nginx.sh"

interval 5
#表示每5秒检测一下nginx状态

}

在vrrp下方添加命令

track_script {

check_nginx

}

LVS+keepalived——高可用集群_第31张图片

到30远程复制到备30

LVS+keepalived——高可用集群_第32张图片

LVS+keepalived——高可用集群_第33张图片

cd /opt

vim check_nginx.sh

/usr/bin/curl -I http://localhost &> /dev/null

if [ $? -ne 0 ]

then

systemctl stop keepalived

fi

LVS+keepalived——高可用集群_第34张图片

chmod 777 check_nginx.sh

sz check_nginx.sh

从桌面拖到20主里面

chmod 777 check_nginx.sh

重启keepalived服务

在主20和30上做页面配置

html/index.html

到客户机测试

curl 20.0.0.100

是否能查看到

关闭主20的nginx的服务

ipaddr 查看是否能查看到vip

再到备30的nginx服务

ipaddr 查看

再到客户机测试

测试成功

再回到主20

先重启nginx再重启keep

ipaddr查看vip

再到备30查看用ipaddr查看vip

最后回到客户端测试能否联通

实验完成

LVS+keepalived——高可用集群_第35张图片

总结

keepalived的工作方式是基于VRRP协议:

1、 确定主备

2、 VIP地址只能有一个,会出现在主服务器上

3、 通过VRRP组播地址:224.0.0.18 发送VRRP报文,检测主的心跳。

4、 主备切换,主出现故障,vip地址会漂移到备服务器。

5、 主服务器恢复,vip地址要回到主

6、 脑裂:主备都有vip。软件层面:检查配置文件,重启。

7、 keepalived不是只能和lvs集群搭配,也可以和其他服务配合,实现高可用。

1、 什么叫脑裂?

脑裂:主和备同时拥有vip地址

在高可用系统当中,联系两个节点的心跳线,本来是一体的动作协调的高可用系统。

如果心跳线断开后,分裂成了两个独立的个体。主备之间失去了联系,都以为是对方出现了故障。

两个调度器,就像脑裂人一样开始抢占主的位置,抢占vip。主也有vip,备也有vip。导致整个集群失败。

2、 脑裂应该怎么解决?

软件层面: 1、查看配置文件是否有问题。 2、 tcpdump抓包分析。 只要配置文件没问题,两边通信正常。只需要重启keepalived服务即可,要先重启主,再重启备。再模拟一下故障恢复即可。

网络层面: 高可用服务器之间心跳线检测失败。主备之间无法进行通信。

硬件层面: 1、 连接主备之间的心跳线老化 2、 网卡或者网卡的驱动失效,ip地址配置冲突。 3、 防火墙没有配置心跳线消息的传输通道,导致检测失败 4、 后端服务器的配置问题。心跳方式不同。心跳广播冲突。软件BUG。

3、 如何解决keepalived脑裂的问题? 硬件: 1、 准备两条心跳线,这样断了一条,依然能够传送心跳消息。

2、 设置防火墙,一定要让心跳的消息通过。

3、 监控软件,实时检测(zabbix)

面试时候如何去说?

1、 先简单描述一下脑裂的现象是什么。

2、 说一下解决思路,是软件层面还是网络层面问题。

3、 硬件层面说一两个即可。

4、 最后说一下如何解决脑裂问题。软件层面如何解决,网络层面如何解决,硬件层面如何解决。

环境介绍

dev 开发环境:开发人员专员

sit 测试环境:测试人员使用(开发,运维都可以使用)

pre 预生产环境:一般是运维和开发(和最终的生产环境保持一致)

prd 生产环境:面向用户的环境

运维人员一般在 sit测试环境 pre预生产环境 prd生产环境

小公司:一般两种环境 开发测试混合 生产

中型公司:开发 测试 生产

你可能感兴趣的:(lvs,负载均衡)