Lvs +keepalivede : 高可用集群

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

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

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

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

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

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

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

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

主备切换的解释

选举出主和备:预先设定好主和备的优先级,主的优先级高,备的优先级低 一旦开启服务

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

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

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

keepalived的体系模块:

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

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

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

脑裂

脑裂:主备同时拥有vip地址 在高可用系统中,联系两个节点的心跳线,本来是一体的,动作协调的高可用系统,心跳线断开后,分裂成了两个独立的个体,主备之间取了联系,都以为对方出现了故障,两个调度器,就像脑裂人一样,开始抢主的位置,抢占vip,主有vip 备也有vip 导致整个集群失败

脑裂分析判断原因::

软件层面:配置文件错误,tcpdump抓包分析好配置 改文件重启即可
网络层面:高可用服务器之间心跳线检测失败,主备之间无法通信
硬件层面:连接主备之间的心跳线老化,网卡或者网卡的驱动失败,IP地址配置冲突防火墙没有配置心跳线的传输通道

如何解决keepalive脑裂的问题

1 硬件:准备2条心跳线,断了一条,依然能够传送心跳线

2 设置防火墙一定让心跳信息通过

3 监控软件,实时检测

环境介绍:

dev开发环境开发人员专用

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

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

prd生产环境(面向用户的环境。)

实验前准备:

Test1主调度器 20.0.0.10

Test2 备调度器 20.0.0.20

后端真实服务器 20.0.0.30 nginx

后端真实服务器 20.0.0。40 nginnx

vip地址:20.0.0.100 nginx

客户端 61

工作方式基于vrrp协议:

1 确定主备

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

2 vrrp224.0.0.0.18 组播地址,发送vrrp报文,

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

5.主服务器恢复,VIP地址要回到主

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

  1. keepalived不是只能和IVs搭配,也可以和其他服务配合,实现高可用。

Lvs Keepalived 实验步骤:

Test1 20.0.0.10 主调度器

root@localhost \~\]# systemctl stop firewalld \[root@localhost \~\]# setenforce 0 \[root@localhost \~\]# yum -y install ipvsadm keepalived \[root@localhost \~\]# cd /etc/keepalived/ \[root@localhost keepalived\]# ls keepalived.conf \[root@localhost keepalived\]# vim keepalived.conf

global_defs {

notification_email {

[email protected]

[email protected]

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_01

#主备服务器的id,不能一致

vrrp_skip_check_adv_addr

#vrrp_strict

#取消严格遵守vrrp协议功能,不取消无法连接

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_instance VI_1 {

state MASTER

#表示身份,主备MASTER BACKUP

interface ens33

#绑定vip地址的物理接口

virtual_router_id 10

#虚拟路由器的id

priority 100

advert_int 1

#发送报文的间隔时间

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 DR

#指定LVs集群的工作方式 要大写

persistence_timeout 0

#连接保持时间

protocol TCP

real_server 20.0.0.30 80 {

weight 1

#后端服务器的轮询权重

TCP_CHECK {

connect_port 80

#检测目标的端口号

connect_timeout 3

#连接超时时间

nb_get_retry 3

#重试的次数

delay_before_retry 4

#重试的间隔描述

}

}

root@localhost keepalived\]# systemctl restart keepalived.service \[root@localhost keepalived\]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -\> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 20.0.0.100:80 rr -\> 20.0.0.30:80 Route 1 0 0 -\> 20.0.0.40:80 Route 1 0 0 \[root@localhost keepalived\]# ip addr

root@localhost 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 \[root@localhost keepalived\]# sysctl -p 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

备调度器test2 20.0.20

root@localhost \~\]# systemctl stop firewalld \[root@localhost \~\]# setenforce 0 \[root@localhost \~\]# yum -y install ipvsadm keepalived #复制test1的配置前 先备份下 \[root@localhost \~\]# cd /etc/keepalived/ \[root@localhost keepalived\]# ls keepalived.conf \[root@localhost keepalived\]# cp keepalived.conf keepalived.conf.bak \[root@localhost keepalived\]# ls keepalived.conf keepalived.conf.bak #远程复制 \[root@localhost keepalived\]# scp [email protected]:/etc/keepalived/keepalived.conf /etc/keepalived/

root@localhost keepalived\]# ls keepalived.conf keepalived.conf.bak \[root@localhost keepalived\]# vim keepalived.conf #在再修改下几个

root@localhost keepalived\]# systemctl restart keepalived.service \[root@localhost keepalived\]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -\> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 20.0.0.100:80 rr -\> 20.0.0.30:80 Route 1 0 0 -\> 20.0.0.40:80 Route 1 0 0 \[root@localhost 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

#没有vip 地址

后端真实服务器test3 20.0.0.30

#配置页面内容 vip地址 再添加选址标识

root@localhost \~\]# systemctl restart nginx.service \[root@localhost \~\]# systemctl restart nginx.service \[root@localhost \~\]# cd /usr/local/nginx/html/ \[root@localhost html\]# ls 50x.html bbs index.html index.php \[root@localhost html\]# vim index.html 随便写入内容 \[root@localhost html\]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 ONBOOT=yes IPADDR=20.0.0.100 NETMASK=255.255.255.255 \[root@localhost html\]# ifup ifcfg-lo \[root@localhost html\]# route add -host 20.0.0.100 dev lo:0 #配置内核文件 \[root@localhost html\]# 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 \[root@localhost html\]# sysctl -p 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

后端真实服务器test4

同上配置

Last login: Mon Oct 16 22:39:57 2023 from 20.0.0.99

root@localhost \~\]# systemctl restart nginx \[root@localhost \~\]# systemctl restart nginx \[root@localhost \~\]# cd /usr/share/nginx/html/ \[root@localhost html\]# \[root@localhost html\]# ls 50x.html index.html \[root@localhost html\]# vim index.html \[root@localhost html\]# vim /etc/sysconfig/network network network-scripts/ \[root@localhost html\]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0 \[root@localhost html\]# ifup ifcfg-lo:0 \[root@localhost html\]# route add -host 20.0.0.100 dev lo:0 \[root@localhost html\]# vim /etc/sysctl.conf \[root@localhost html\]# sysctl -p 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

验证测试

Test1

root@localhost keepalived\]# systemctl stop keepalived.service Test2 Ip addr VIP地址飘到备用调度器上 \ \[root@www \~\]# curl 20.0.0.100 this is 33 \[root@www \~\]# curl 20.0.0.100

相关推荐
jamison_14 天前
文心一言与 DeepSeek 的竞争分析:技术先发优势为何未能转化为市场主导地位?
人工智能·ai·chatgpt·gpt-3·1024程序员节
NaZiMeKiY5 天前
HTML5前端第六章节
前端·html·html5·1024程序员节
jamison_19 天前
颠覆未来:解锁ChatGPT衍生应用的无限可能(具体应用、功能、付费模式与使用情况)
ai·chatgpt·1024程序员节
NaZiMeKiY14 天前
HTML5前端第七章节
1024程序员节
earthzhang202118 天前
《Python深度学习》第四讲:计算机视觉中的深度学习
人工智能·python·深度学习·算法·计算机视觉·numpy·1024程序员节
明明真系叻1 个月前
2025.3.2机器学习笔记:PINN文献阅读
人工智能·笔记·深度学习·机器学习·1024程序员节·pinn
bitenum1 个月前
【C++/数据结构】队列
c语言·开发语言·数据结构·c++·青少年编程·visualstudio·1024程序员节
IT学长编程1 个月前
计算机毕业设计 基于SpringBoot的智慧社区管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·后端·毕业设计·课程设计·论文笔记·1024程序员节
qq_382391331 个月前
WPF框架学习
学习·wpf·1024程序员节
✿ ༺ ོIT技术༻2 个月前
Linux:TCP和守护进程
linux·运维·服务器·网络·tcp/ip·1024程序员节