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 {

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,不能一致

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 root@20.0.0.10:/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地址飘到备用调度器上

</html>

root@www \~# curl 20.0.0.100

this is 33

root@www \~# curl 20.0.0.100

相关推荐
fangzhanpeng1681 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心4 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u0103055279 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552710 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝11 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552711 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552712 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552714 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552715 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552716 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节