当前位置: 首页 > news >正文

keepalived高可用

keepalived高可用

  • 一、keepalived实现高可用
  • 二、部署和配置keepalived
  • 三、vip漂移
  • 四、脑裂
  • 五、双vip架构
  • 总结


一、keepalived实现高可用

官方网站:https://www.keepalived.org/

在这里插入图片描述

keepalived是一个用c语言编写的路由软件,这个项目的主要目标是为Linux系统和基于Linux的基础设施提供简单而健壮的负载均衡和高可用性设施。负载均衡框架依赖于众所周知且广泛使用的Linux Virtual Server (IPVS)内核模块提供第4层负载均衡。keepalive实现了一组检查器,可以根据负载均衡服务器池的运行状况动态地、自适应地维护和管理它们。另一方面,通过VRRP协议实现高可用性。VRRP是路由器故障转移的基本组件。此外,keepalive实现了一组到VRRP有限状态机的钩子,提供低级和高速的协议交互。为了提供最快的网络故障检测,keepalive实现了BFD协议。VRRP状态转换可以利用BFD提示实现状态快速转换。keepalive框架可以单独使用,也可以一起使用,以提供弹性基础设施

keepalived是一款免费软件;您可以根据自由软件基金会发布的GNU通用公共许可证条款重新发布和/或修改它;许可证的版本2,或者(根据您的选择)任何更新的版本

keepalived有2个功能:

  1. 负载均衡
    底层使用lvs来实现的,调用内核里已经安装的lvs模块来实现负载均衡
    lvs的另外一个名字 ipvs --》四层负载均衡
    Linux Virtual Server = lvs
  2. 高可用HA(High Availability)
    通过VRRP协议实现高可用性
    作用: 有2台以上的机器做相同的事情,一台出现故障,另外一台可以顶替,从而实现业务不停止,持续的提供服务,避免单点故障,增加了冗余
    缺点: 增加机器,增加成本 --》理念是花钱消灾

二、部署和配置keepalived

在LB1和LB2上安装部署keepalived软件

yum install keepalived -y

keepalived.conf配置文件的解析

[root@lb1 ~]# cd /etc/keepalived/
[root@lb1 keepalived]# ls
keepalived.conf
[root@lb1 keepalived]#  vim keepalived.conf 
# 负载均衡器LB1上的配置#vrrp_strict  注释掉,遵守最严格的vrrp协议# 实现高可用的配置
# 启动一个vrrp的实例 VI_1 实例名,可以自定义,一个实例背后就是一个keepalived相关的进程提供服务,我们给进程传递参数。
vrrp_instance VI_1 {       state MASTER        # 角色是masterinterface ens33     # 在哪个接口上监听vrrp协议,同时绑定vip到那个接口virtual_router_id 80 # 虚拟路由id(帮派) 0~255范围priority 120    # 优先级  0~255advert_int 1  # advert interval 宣告消息 时间间隔 1秒authentication {   auth_type PASS   # 认证的类型是密码认证auth_pass 123456  # 具体的密码,可以修改}# vip的配置,vip可以是多个ip,也可以是一个vipvirtual_ipaddress {   192.168.168.180}
}[root@lb2 keepalived]# vim keepalived.conf 
# 负载均衡器LB2上的配置#  vrrp_strictvrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 80priority 100advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.168.180}
}

负载均衡器LB1上的配置

启动并且设置开机自启

systemctl start keepalived
systemctl enable keepalived

查看vip地址在LB1上

[root@lb1 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:25:d8:36 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.168.132/24 brd 192.168.168.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.168.180/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe25:d836/64 scope link noprefixroute valid_lft forever preferred_lft forever

vip绑定到LB1的ens33网卡,就使用这块网卡的mac地址

然后可以正常访问192.168.168.180


三、vip漂移

停止LB1上的keepalived服务,不会继续发vrrp报文,然后vip重新选举到LB2上

[root@lb1 keepalived]# service keepalived stop
Redirecting to /bin/systemctl stop keepalived.service

[root@lb2 keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:25:d8:36 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.168.132/24 brd 192.168.168.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.168.180/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe25:d836/64 scope link noprefixroute valid_lft forever preferred_lft forever

如果不做限制,LB1的keepalived服务恢复,vip又会重新漂移到LB1上,因为LB1的优先级要高些


四、脑裂

脑裂: 就是2台或者多台LB上都有vip地址

脑裂现象 -> 原因:

  1. vrid(虚拟路由id)不一样
  2. 网络通信有问题:中间有防火墙阻止了网络之间的选举的过程,vrrp报文的通信

224.0.0.18 是 VRRP 协议专用的组播地址,主路由器通过该地址向同一 VRRP 组的备路由器发送通告报文

[root@lb2 keepalived]# iptables -A INPUT -p vrrp  -d 224.0.0.18 -j DROP
[root@lb2 keepalived]# iptables -L -n -v
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)pkts bytes target     prot opt in     out     source               destination                   1    40 DROP       112  --  *      *       0.0.0.0/0            224.0.0.18          Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 4 packets, 520 bytes)pkts bytes target     prot opt in     out     source               destination         [root@lb2 keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:25:d8:36 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.168.132/24 brd 192.168.168.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.168.180/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe25:d836/64 scope link noprefixroute valid_lft forever preferred_lft forever# 清除防火墙规则
[root@lb2 keepalived]#iptables  -F 

脑裂有没有危害?是否对业务有危害或者对业务有什么影响?

  • 没有危害,能正常访问,反而还有负载均衡的作用
  • 脑裂恢复的时候,还是有影响的,会短暂的中断,影响业务

五、双vip架构

keepalived的架构:

  • 单vip 架构: 只有master上有vip,backup上没有vip,这个时候master会比较忙,backup机器会比较闲,设备使用率比较低
  • 双vip 架构: 启动2个vrrp实例,每台机器上都启用2个vrrp实例,一个做master,一个做backup,启用2个vip,每台机器上都会有一个vip,这2个vip都对外提供服务,这样就可以避免单vip的情况下,一个很忙一个很闲。 可以提升设备的使用率

总结

双vip架构步骤:
1.在每个机器上启用2个vrrp实例

[root@lb1 keepalived]# vim keepalived.conf 
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 60priority 100advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.168.180}
}vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 70priority 120advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.168.190}
}

第2台机器上的配置

[root@lb2 keepalived]# vim keepalived.conf 
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 60priority 120advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.168.180}
}vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 70priority 100advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.168.190}
}

验证一下vip漂移,停止下keepalived服务查看

[root@lb2 keepalived]# service keepalived stop
Redirecting to /bin/systemctl stop keepalived.service

[root@LB-1 keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:25:d8:36 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.168.132/24 brd 192.168.168.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.168.180/32 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.168.190/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe76:a68/64 scope link noprefixroute valid_lft forever preferred_lft forever
http://www.xdnf.cn/news/1445455.html

相关文章:

  • 基于单片机PWM信号发生器系统Proteus仿真(含全部资料)
  • 2025年最新 unityHub游戏引擎开发2d手机游戏和桌面游戏教程
  • 使用飞算JavaAI快速搭建酒店管理系统
  • 部署MYSQL主从同步超详细过程
  • bootloader相关实现
  • 逻辑回归 vs 支持向量机 vs 随机森林:哪个更适合小数据集?
  • 中通笔试ShowMeBug编程题复盘
  • 免费的PDF工具箱软件,免费PDF转word,PDF合并,PDF24下载,24个功能
  • Corona 13 渲染器安装与使用教程(适用于3ds Max 2016–2026)
  • 408考研——单链表代码题常见套路总结
  • 有奖直播 | 如何高效测试ADC/DAC?德思特一站式方案,让测试效率倍速提升!
  • 【Linux操作系统】简学深悟启示录:进程控制
  • 1983:ARPANET向互联网的转变
  • test命令与参数
  • Kotlin编程学习记录2
  • Linux `epoll` 机制的入口——`epoll_create`函数
  • 自由学习记录(92)
  • 图像正向扭曲反向扭曲
  • 关于缓存的一些思考?
  • 从Java全栈到前端框架:一次真实的面试对话
  • 自动化运维-ansible中对于大项目的管理
  • HTML第八课:HTML4和HTML5的区别
  • 网络通信与协议栈 -- OSI,TCP/IP模型,协议族,UDP编程
  • Linux 网络编程中核心函数`recv`。
  • Qt6用Chart模块做数据可视化?别再用老套路,看看这套35张图背后的秘密
  • MySQL :索引原理
  • 【面试题】BPE和WordPiece的区别?
  • Anaconda3出现Fatal error in launcher: Unable to create process using.....问题
  • STM32CubeMX + HAL 库:基于 I²C 通信的 BMP280气压海拔测量
  • 【超详细】别再看零散的教程了!一篇搞定Gitee从注册、配置到代码上传与管理(内含避坑指南最佳实践)