【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.pswp.cn/web/90661.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Webpack配置原理

一、Loader&#xff1a; 1、定义&#xff1a;将不同类型的文件转换为 webpack 可识别的模块2、分类&#xff1a; ① pre&#xff1a; 前置 loader &#xff08;1&#xff09;配置&#xff1a;在 webpack 配置文件中通过enforce进行指定 loader的优先级配置&#xff08;2&#x…

对比JS“上下文”与“作用域”

下面从定义、特性、示例&#xff0c;以及在代码分析中何时侧重“上下文”&#xff08;Execution Context/this&#xff09;和何时侧重“作用域”&#xff08;Scope/变量查找&#xff09;&#xff0c;以及二者结合的场景来做对比和指导。一、概念对比 | 维度 | 上下文&#xff0…

如何做数据增强?

目录 1、为什么要做数据增强&#xff1f; 2、图像数据增强&#xff1f; 3、文本与音频数据增强&#xff1f; 4、高级数据增强&#xff1f; 数据增强技术就像是一种“造数据”的魔法&#xff0c;通过对原始数据进行各种变换&#xff0c;生成新的样本&#xff0c;从而提高模型…

Go by Example

网页地址Go by Example 中文版 Github仓库地址mmcgrana/gobyexample&#xff1a;按示例进行 HelloWorld package mainimport ("fmt" )func main() {fmt.Println("Hello World") } Hello World 值 package mainimport ("fmt" )func main() {…

ClickHouse高性能实时分析数据库-消费实时数据流(消费kafka)

告别等待&#xff0c;秒级响应&#xff01;这不只是教程&#xff0c;这是你驾驭PB级数据的超能力&#xff01;我的ClickHouse视频课&#xff0c;凝练十年实战精华&#xff0c;从入门到精通&#xff0c;从单机到集群。点开它&#xff0c;让数据处理速度快到飞起&#xff0c;让你…

电子电气架构 --- 车载软件与样件产品交付的方法

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

C++:STL中vector的使用和模拟实现

在上一篇中讲到了string类&#xff0c;string并不属于STL中因为string出现的比STL早&#xff0c;但是在使用方法上两者有相似之处&#xff0c;学习完string后再来看vector会容易的多&#xff0c;接着往下阅读&#xff0c;一定会有收获滴&#xff01; 目录 vector的介绍 vect…

仓库管理的流程、绩效和解决方案?

什么是仓库管理&#xff1f; 仓库管理涉及对所有仓库运营的日常监督。一个全面、集成的仓库管理解决方案采用行业最佳实践&#xff0c;并涵盖使高效运营得以实现的所有基本要素。这些要素包括分销和库存管理、仓库劳动力管理以及业务支持服务。此外&#xff0c;由内部提供或与服…

TIM 实现定时中断【STM32L4】【实操】

使用定时器实现定时中断的功能&#xff1a;比如每1ms进入中断处理函数使用STM32CubeMX配置TIM初始化先了解每个参数的含义&#xff0c;在进行配置Counter Settings: 计数器基本设置Prescaler(PSC): 预分频器&#xff0c;设置预分频器系数Counter Mode: 技术模式&#xff0c;…

Elasticsearch 的聚合(Aggregations)操作详解

目录 1. 概述 2. 聚合类型分类详解 2.1 桶聚合&#xff08;Bucket Aggregations&#xff09; 2.1.1 基础桶聚合 2.1.2 特殊桶聚合 2.1.3 高级桶聚合 2.2 指标聚合&#xff08;Metric Aggregations&#xff09; 2.2.1 单值指标聚合&#xff08;Single-value Metrics&am…

电子电气架构 --- 高阶智能驾驶对E/E架构的新要求

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

0.深度学习环境配置步骤

0.深度学习环境配置步骤 这里介绍深度学习环境配置详细步骤&#xff0c;包括安装软件&#xff0c;每一步都有安装时的截图&#xff08;后续持续更新&#xff0c;敬请关注&#xff09; 目录如下&#xff1a; 1.安装anaconda 2.安装CUDA 3.安装CU_DNN 4.安装pytorch

在 Azure 中配置 SMS 与 OTP

1. Azure Active Directory B2C (AAD B2C) 中的 SMS/OTP 身份验证 1.1. 现状与原理&#xff1a;电话注册与登录 Azure Active Directory B2C (AAD B2C) 提供了将电话号码作为用户身份标识进行注册和登录的功能&#xff0c;旨在为用户提供一种便捷的替代传统电子邮件或用户名登录…

简单实现支付密码的页面及输入效果

干我们这行&#xff0c;风吹日晒不到&#xff0c;就怕甲方突发奇想。 今天客户要做一个安全密码前置校验&#xff0c;还要做成支付宝那种效果。ps:android端 心理吐槽了一万遍以后&#xff0c;还是得面对现实。 先用通义问一遍&#xff0c;给了两个方案&#xff0c;要么自己写&…

proxmox 解决docker容器MongoDB创建报错MongoDB 5.0+ requires a CPU with AVX support

目录 最简单直接的方式 测试MongoDB docker compose的安装shell脚本 验证访问 最简单直接的方式 让虚拟机直接使用宿主机的物理 CPU 功能标志。 打开 Proxmox Web UI。 选择你的 VM → 硬件 (Hardware) → CPU → 点击 编辑 (Edit)。 将 CPU 类型改为 host。 确认并重启…

向前滚动累加SQL 实现思路

一、业务背景在经营分析场景里&#xff0c;我们经常需要回答&#xff1a;“截至今天&#xff0c;过去 N 天/月/周累计发生了多少&#xff1f;”“把维度切到省、市、房型、项目经理、代理商等&#xff0c;结果又是什么&#xff1f;”本文用两个真实需求做演示&#xff1a;以天为…

Spring AI(14)——文本分块优化

RAG时&#xff0c;检索效果的优劣&#xff0c;和文本的分块的情况有很大关系。SpringAI中通过TokenTextSplitter对文本分块。本文对SpringAI提供的TokenTextSplitter源码进行了分析&#xff0c;并给出一些自己的想法&#xff0c;欢迎大家互相探讨。查看了TokenTextSplitter的源…

Python----大模型(RAG 的智能评估-LangSmith)

一、LangSmith LangSmith是LangChain的一个子产品&#xff0c;是一个大模型应用开发平台。它提供了从原 型到生产的全流程工具和服务&#xff0c;帮助开发者构建、测试、评估和监控基于LangChain 或其他 LLM 框架的应用程序。 安装 LangSmith pip install langsmith0.1.137 官网…

磁悬浮轴承转子不平衡质量控制策略设计:原理、分析与智能实现

磁悬浮轴承(Active Magnetic Bearing, AMB)以其无接触、无摩擦、高转速、无需润滑等革命性优势,在高端旋转机械领域(如高速电机、离心压缩机、飞轮储能、航空航天动力系统)展现出巨大潜力。然而,转子固有的质量不平衡是AMB系统面临的核心挑战之一,它诱发强同步振动,威胁…

C++查询mysql数据

文章目录 文章目录 1.前言 2. 代码 &#xff08;1&#xff09;执行查询SQL &#xff08;2&#xff09;获取结果集 &#xff08;3&#xff09;遍历结果集&#xff08;获取字段数、行数&#xff09; &#xff08;4&#xff09;释放资源 3.完整代码 1.前言 我们成功连接数…