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

【linux】keepalived

.高可用集群

1.1 集群类型

LBLoad Balance 负载均衡
LVS/HAProxy/nginxhttp/upstream, stream/upstream
HAHigh Availability 高可用集群
数据库、Redis
SPoF: Single Point of Failure,解决单点故障
HPCHigh Performance Computing 高性能集群

1.2 系统可用性

SLAService-Level Agreement 服务等级协议(提供服务的企业与客户之间就服务的品质、水准、性能等方面所达成的双方共同认可的协议或契约)

1.3 系统故障

硬件故障:设计缺陷、wear out(损耗)、非人为不可抗拒因素
软件故障:设计缺陷 bug

1.4 实现高可用

提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)
解决方案:建立冗余机制
  • active/passive /
  • active/active 双主
  • active --> HEARTBEAT --> passive
  • active <--> HEARTBEAT <--> active

1.5.VRRPVirtual Router Redundancy Protocol

虚拟路由冗余协议,解决静态网关单点风险
  • 物理层:路由器、三层交换机
  • 软件层:keepalived

1.5.1 VRRP 相关术语

  • 虚拟路由器:Virtual Router
  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
  • VIPVirtual IP
  • VMACVirutal MAC (00-00-5e-00-01-VRID)
  • 物理路由器:
    • master:主设备
    • backup:备用设备
    • priority:优先级

1.5.2 VRRP 相关技术

通告:心跳,优先级等;周期性
工作方式:抢占式,非抢占式
安全认证:
  • 无认证
  • 简单字符认证:预共享密钥
  • MD5
工作模式:
  • /备:单虚拟路由器
  • /主:主/备(虚拟路由器1),备/主(虚拟路由器2

.Keepalived 部署

2.1 keepalived 简介

vrrp 协议的软件实现,原生设计目的为了高可用 ipvs服务
官网:http://keepalived.org/
功能:
  • 基于vrrp协议完成地址流动
  • vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  • ipvs集群的各RS做健康状态检测
  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginxhaproxy等服务

2.2 Keepalived 架构

  • 用户空间核心组件:
    • vrrp stackVIP消息通告
    • checkers:监测real server
    • system call:实现 vrrp 协议状态转换时调用脚本的功能
    • SMTP:邮件组件
    • IPVS wrapper:生成IPVS规则
    • Netlink Reflector:网络接口
    • WatchDog:监控进程
  • 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
  • IO复用器:针对网络目的而优化的自己的线程抽象
  • 内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

2.3 Keepalived 环境准备

拓扑:

  • 各节点时间必须同步:ntp, chrony
  • 关闭防火墙及SELinux
  • 各节点之间可通过主机名互相通信:非必须
  • 建议使用/etc/hosts文件实现:非必须
  • 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须

2.4 Keepalived 相关文件

  • 软件包名:keepalived
  • 主程序文件:/usr/sbin/keepalived
  • 主配置文件:/etc/keepalived/keepalived.conf
  • 配置文件示例:/usr/share/doc/keepalived/
  • Unit File/lib/systemd/system/keepalived.service
  • Unit File的环境配置文件:/etc/sysconfig/keepalived

2.5 Keepalived 安装

[root@KA1 ~]# dnf install keepalived -y
[root@KA1 ~]# systemctl start keepalived

2.6 KeepAlived 配置说明

2.6.1 配置文件组成部分

配置文件:/etc/keepalived/keepalived.conf
配置文件组成
  • GLOBAL CONFIGURATION
        Global definitions: 定义邮件配置,route_idvrrp配置,多播地址等
  • VRRP CONFIGURATION
        VRRP instance(s):
        定义每个vrrp虚拟路由器
  • LVS CONFIGURATION
        Virtual server group(s)
        Virtual server(s):
        LVS集群的VSRS

三.实验步骤

设备IP
KA1172.25.254.20
KA2172.25.254.30
RS1172.25.254.40
RS2172.25.254.50
cilent172.25.254.110

1.设置IP地址和主机名,并关闭防火墙

通过脚本,前两篇文章有脚本

KA1、KA2

RS1、RS2

所有机器:

2.KA1和KA2间设置NTP(时间同步)

KA1:KA1设置允许其他主机找自己进行时间同步

KA2:KA2找KA1进行时间同步

KA2校验时间同步:

3.KA1、KA2安装keepalived和ipvsadm包,RS1、RS2安装nginx和mariadb-server包,cilent安装mariadb包

KA1、KA2:

RS1、RS2:

cilent:

4.配置主备模式

4.1配置全局参数:global_defs:(KA1、KA2都配置一样)

4.2配置虚拟路由器

KA1:

KA1使用-t -f 检测配置:

KA2:

KA2使用 -t -f检测配置:

也可以使用单播进行配置:

单播效果:

4.3检验效果

KA1监听组播地址

当KA1的keepalived挂掉的时候,再查看监听:

说明KA1挂掉的时候,KA2已经接替了KA1的工作,VIP现在在KA2上:

KA2,VIP在KA2上:

KA1,当KA1再次启动的时候,VIP又因为KA1的优先级高,自动切换回来:

5.启动keepalived日志功能:

编辑.etc.sysconfig.keepalived文件,启动日志功能:

编辑.etc.rsyslog.conf文件:

重启syslog服务:

成功启动日志:

6.配置独立子配置文件

7.非抢占模式配置、抢占模式延迟

非抢占模式:

抢占模式延迟:

8.企业级应用实例(双主模式)

KA1配置:

global_defs {notification_email {weiyihong@163.com}notification_email_from keepalived@KA1.comsmtp_server 172.0.0.1smtp_connect_timeout 30router_id KA1.wyh.comvrrp_skip_check_adv_addrvrrp_garp_interval 1vrrp_gna_interval 1vrrp_mcast_group4 224.0.0.44
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.100/24 dev  eth0 label eth0:0}
}vrrp_instance VI_2 {state BACKUPinterface eth0virtual_router_id 52priority 80nopreemptadvert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.200/24 dev  eth0 label eth0:1}
}virtual_server 172.25.254.100 80 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 172.25.254.40 80 {weight 1TCP_CHECK {connect_timeout 5retry 3delay_before_retry 3connect_port 80}}real_server 172.25.254.50 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 1retry 3delay_before_retry 1}}
}

KA2配置:

global_defs {notification_email {weiyihong@163.com}notification_email_from keepalived@KA1.comsmtp_server 172.0.0.1smtp_connect_timeout 30router_id KA1.wyh.comvrrp_skip_check_adv_addrvrrp_garp_interval 1vrrp_gna_interval 1vrrp_mcast_group4 224.0.0.44
}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.100/24 dev  eth0 label eth0:0}
}vrrp_instance VI_2 {state MASTERinterface eth0virtual_router_id 52priority 100nopreemptadvert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.200/24 dev  eth0 label eth0:1}
}virtual_server 172.25.254.100 80 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 172.25.254.40 80 {weight 1TCP_CHECK {connect_timeout 5retry 3delay_before_retry 3connect_port 80}}real_server 172.25.254.50 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 1retry 3delay_before_retry 1}}
}

开启双主模式:

KA1:

KA2:

效果1:

效果2:

效果3:

9.在其基础上配置后端RS服务

RS1、RS2写默认网页区别:

RS1使用脚本绑定VIP至web服务器lo网卡:

RS2使用脚本绑定VIP至web服务器lo网卡:

KA1服务配置,KA2同理:

后端RS1、RS2配置回环IP:

RS1、RS2都添加环回网卡100:

IPVS效果1:

IPVS效果2:ipvs高可用,当RS1故障时,流量自动打到RS2上

当RS1恢复的后,流量又开始负载均衡

ipvs高可用,当ka1失效时,ka2接管VIP,流量也同样可以负载均衡:

10.再次基础上再在RS上加一个服务,使得两个VIP都可以用上,实现KA的互相负载,RS的互相负载。

RS1、RS2都添加环回网卡200:

KA1、KA2配置都一样:

virtual_server 172.25.254.200 3306 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 172.25.254.40 3306 {weight 1TCP_CHECK {connect_timeout 5retry 3delay_before_retry 3connect_port 3306}}real_server 172.25.254.50 3306 {weight 1TCP_CHECK {connect_timeout 5retry 3delay_before_retry 3connect_port 3306}}
}

编辑/etc/my.cnf文件,测试的时候标识是哪台数据库

标识RS1:

标识RS2:

http://www.dtcms.com/a/300106.html

相关文章:

  • ART某板卡的软件位置
  • 每日一道算法题(九)
  • 【C/C++】Undefined reference: memset_s
  • 【seismic中的颜色】
  • ETF历史高频逐笔分钟数据解析
  • FastAPI入门:demo、路径参数、查询参数
  • Linux进程替换
  • Dynamic Model in RL
  • 渲染篇(二):解密Diff算法:如何用“最少的操作”更新UI
  • 【数据结构】二叉树初阶详解(二):实现逻辑与代码拆解(超详版)
  • 聚类-一种无监督分类算法
  • 中文语音识别与偏误检测系统开发
  • Redis的下载和安装(Linux)
  • 亚马逊全球物流(AGL)与Amazon SEND双重升级:重塑跨境电商物流新生态​
  • FastAPI入门:安装、Pydantic、并发和并行
  • Python应用:三局两胜制石头剪刀布游戏
  • VS Code + LaTeX 绘制电气图完全指南(含 PlantUML 样式参考)
  • 典型的 Vue 3 项目目录结构详解
  • Android中ViewStub和View有什么区别?
  • 过油防溅:3 步搞定 油星乱蹦
  • 具身视觉语言导航算法学习笔记
  • C++20 协程
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-27,(知识点:信号完整性,信号反射,串扰,时延,抖动,衰减)
  • 物联网统一网关:多协议转换与数据处理架构设计
  • useCallback/useMemo
  • Item11:在operator=中处理自我赋值
  • [极客大挑战 2019]FinalSQL--布尔盲注
  • 【web应用】如何进行前后端调试Debug? + 前端JavaScript调试Debug?
  • 内置两大模型,Whisper视频语音转文字,支持批量处理,完全免费!
  • 车载诊断刷写 --- Flash关于擦除和写入大小