高可用Keepalived在Linux中的应用

news2025/1/17 23:15:05

一、高可用

1.高可用介绍

(1)普通理解

两台服务器启动相同的业务系统,当有一台机器宕机,另外一台服务器快速接管服务,对于用户来讲是无感知的。

(2)专业理解

高可用是分布式系统架构设计中必要的一环,主要是为了减少系统不能提供服务时间。假设系统能一直提供服务,可用性为100%,如果系统每运行100个时间单位,会有1个时间单位无法提供服务,则系统可用性为99%

2.高可用目的

减少系统宕机时间,提高SLA(服务等级协议)服务等级

3.高可用实现

利用keepalievd工具,此工具基于VRRP协议实现,此协议主要用于解决单点故障问题

1.介绍

VRRP协议叫虚拟路由器冗余协议,是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议

2.特点

(1)IP地址备份,VRRP的主要功能。可以在网络中提供多个VirtuaI Router选举的负载均衡以及在单一的网络中支持多重逻辑IP子网络。

(2)最优路径指示。从VRRP组内多个路由器的路由中,保证Master收敛到现成可用最优先的路由器。

(3)最小化不必要的服务中断。在主路由正常工作期间,不触发其他低优先级别路由器选择主路由的服务。

(4)广泛的安全性。它可在多种不同的交互环境中采用不同的安全策略,它只需极少的配置和开销就可以进行严格的验证。

(5)在可扩展网络有效的工作。

三、Keepalived

1.介绍

基于VRRP协议实现,原生设计是为了高可用LVS服务。

(1)通过VRRP协议,可以完成地址漂移技术

(2)为VIP地址所在节点生成IPVS规则(需要在配置文件中预先定义)

(3)为IPVS集群的RS节点做健康状态检测

2.Keepalived核心组件

(1)VRRP stack

用于实现VRRP协议的重要组件之一

(2)NetLink接口

设置和删除网络接口上的虚拟IP地址

(3)IPVS Wrapper

使用getsock和setsock来建立IPVS规则

(4)checkers

监测RS节点的支持方式,支持TCP、HTTP、SSL等

(5)system call

支持启动额外系统脚本的功能

(6)SMTP

为当发生角色状态转换时,发送事件通知邮件

(7)watchDog

监控进程

3.控制组件

配置文件分析器

4.内存管理

四、Keepalived核心概念

1.虚拟路由器

由一个master路由器和多个backup路由器组成

2.master路由器

虚拟路由器中承担报文转发任务的路由器

3.backup路由器

master路由器出现故障时,能够代替master路由器工作的路由器

4.VRID

虚拟路由器的标识,由同一个VRID的一组路由器构成一个虚拟机路由器

5.组播

组播是有特定的成员,是一种可控的广播,组播成员需要加入“组播组”才能收到该组播的信息

6.虚拟IP地址

虚拟路由器的IP地址,一个虚拟路由器可以拥有一个或多个IP地址

7.虚拟MAC地址

一个虚拟路由器拥有一个虚拟MAC地址

8.优先级

VRRP根据优先级来确定虚拟路由器中每台路由器的地位

9.抢占式

如果Master故障,Backup自动接管,当Master恢复了会将vIP地址抢回来

10.非抢占式

如果Master故障,Backup自动接管,当Master恢复则自动转为Backup,不会抢占VIP

五、Keepalived应用场景

1.使用原因

通常是因为业务系统需要保持7天,每天24小时不宕机

2.场景

公司内部OA(办公自动化)系统,对外发布的业务系统等等

六、Keepalived的实例配置

1.环境

状态

eth0

eth1

角色

节点1

10.0.0.5

172.16.1.5

master

节点2

10.0.06

172.16.1.6

backup

VIP地址

10.0.0.100

2.配置

(1)两个节点分别安装keepalived

[root@lb01 ~] yum install keepalived -y

(2)配置master

[root@lb01 ~]vi /etc/keepalived/keepalived.conf 

global_defs { 
router_id lb01 #当前物 理设备的标识名称 
#vrrp_mcast_group4 224.0.0.18 # 组播 地址,default 224.0.0.18 
} 

vrrp_instance VI_1 { 
state MASTER # 角色状态; 
interface eth0 # 绑定当前虚拟路由使用的物理接口;
virtual_router_id 50 # 当前虚拟路由标识,VRID; 
priority 200 # 当前物理节点在虚拟路由中的优先级; 
advert_int 3 # vrrp通告时间间隔,默认1s; 

authentication { 

     auth_type PASS # 密码类型简单密码: 
     auth_pass 1111 # 密码不 超过8位字符; 
} 
    virtual_ipaddress { 
      10.0.0.100 # VIP地址 
 } 
}

(3)重启master上的keepalived,设为开机自启

[root@lb01 ~] systemctl enable keepalived 
[root@lb01 ~] systemctl start keepalived

(4)配置backup

[root@lb02 ~]vim /etc/keepalived/keepalived.conf 

global_defs { 
  router_id lb02 
vrrp_mcast_group4 224.0.0.18 
}
 
vrrp_instance VI_1 { 
       state BACKUP 
       interface eth0 
       virtual_router_id 50 
       priority 100 
       advert_int 1 
       authentication { 
            auth_type PASS 
            auth_pass 1111 
} 

virtual_ipaddress { 
    10.0.0.100 
  } 
}

(5)重启backup上的keepalived,设为开机自启

[root@lb01 ~] systemctl enable keepalived 
[root@lb01 ~] systemctl start keepalived

3.地址漂移测试

(1)master上的操作

# Master存在vip地址 
[root@lb01 ~] ip addr lgrep 10.0.0.100 inet 10.0.0.100/32 scope global eth0 
[root@lb01 ~] systemctl stop keepalived

(2)backup上的操作

# 发现地址已经漂移至Backup端 
[root@lb02 ~] ip addrlgrep 10.0.0.100 inet 10.0.0.100/32 scope global eth0

(3)此时master上的keepalived,会发现VIP被强行抢占

[root@lb01 ~] systemctl start keepalived

[root@lb01 ~] ip addr lgrep 10.0.0.100 inet 10.0.0.100/32 scope global eth0

(4)通过windows查看arp缓存表,验证地址漂移后是否自动更新MAC地址

七、Keepalived延迟抢占

1.介绍

延迟抢占指的是,当master故障后,backup接管,当master恢复后不立即抢占VIP地址,延迟一段时间,在抢占VIP

2.配置延迟抢占

(1)两台节点的state都必须配置backup

(2)在节点的vrrp_instance中添加nopreempt

#Master
       vrrp_instance VI_1 {
          state BACKUP
          priority 200
          preempt_delay 10s # 延迟10s后抢占VIP
}


# Backup
   vrrp_instance VI_1 {
     state BACKUP
     priority 100
     preempt_delay 10s
}

八、keepalived非抢占式

1.介绍

通常 master 服务故障后 backup 会变成 master,但是当 master 服务恢复后,master会抢占VIP,这样就会发生两次切换;对业务繁忙的网站来说并不是太友好;此时我们可以配置keepalived为非抢占式,(前提两台主机的硬件配置信息一致)

2.配置

(1)两台节点的 state都必须配置为BACKUP

(2)两台节点都在vrrp_instance 中添加nopreempt参数

(3)其中一个节点的优先级必须要高于另外一个节点的优先级

#Master
vrrp_instance VI_1 {
   state BACKUP
   priority 200
   nopreempt
}
 
#Backup
vrrp_instance VI_1 {
   state BACKUP
   priority 100
   nopreempt
}

九、Keepalived邮件通知

1.配置邮箱(所有节点都要配置)

[root@lb01 ~] yum install mailx -y
[root@lb01 ~] cat >> /etc/mail.rc << EoF
set from=1234567890@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1234567890@qq.com
set smtp-auth-password=123
set smtp-auth=login
set ssl-verify=ignore
EOF

2.通知脚本(所有节点都需要配置)

[root@dns-slave ~] vim /etc/keepalived/notify.sh
#!/usr/bin/bash
#定义收件人
Email='1234567890@qq.com'

#定义主机名称
Host=$(hostname)

# 定义时间变量
Date=$(date +'%F %T')

#定义发送的消息
Message() {
      subject="${Host} 切换为 $1 状态"
      submsg="${Date}:${Host} 成功切换为 $1 状态"
      echo "${submsg}" I mail -s "${subject}" "${Email}"
# echo "时间:${主机名称}
 成功切换为 backup
 状态" | mail -s "${主机}切换为 backup 状态"
 "552408925@qq.com"
}

case $1 in
   master)
      Message master
      ;;
  backup)
      Message backup
      ;;
fault)
      Message fault
      ;;
*)
       echo "Usage: $0 { master | backup |fault }"
       exit
esac

3.配置master

[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
    router_id lb01
    vrrp_mcast_group4 224.0.0.18
}
vrrp_instance VI_1 {
   state BACKUP
   interface eth0
   virtual_router_id 50
   priority 200
   advert_int 1
   nopreempt
   authentication {
   auth_type PASS
   auth_pass 1111
}
virtual_ipaddress {
     10.0.0.100 dev eth0
}

   notify_master
"/etc/keepalived/notify.sh master" # 当前节
点成为主节点时触发的脚本
   notify_backup
"/etc/keepalived/notify.sh backup" # 当前节
点转为备节点时触发的脚本
   notify_fault
"/etc/keepalived/notify.sh fault" # 当前
节点转为“失败”状态时触发的脚本
}

4.修改配置(backpu)

[root@dns-slave ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
  router_id lb02
  vrrp_mcast_group4 224.0.0.18
}
vrrp_instance VI_1 {
     state BACKUP
     interface eth0
     virtual_router_id 50
     priority 100

     advert_int 1
     authentication {
        auth_type PAss
        auth_pass 1111
}
virtual_ipaddress {
      10.0.0.100 dev eth0
}
   notify_master
"/etc/keepalived/notify.sh master" # 当前节
点成为主节点时触发的脚本
   notify_backup
"/etc/keepalived/notify.sh backup" # 当前节
点转为备节点时触发的脚本
   notify_fault
"/etc/keepalived/notify.sh fault"  #当前
节点转为“失败”状态时触发的脚本
}

5.停止所有节点的keepalived,先启动backup节点,然后启动master节点

# Backup
[root@lb02 ~] systemctl start keepalived

# 等待邮件发送成功在启动Master

# Master
[root@lb0l ~] systemctl start keepalived

十、keepalived双主模式

1.介绍

两个或以上VIP分别运行在不同的keepalived服务器,实现服务器并访问web应用,提高服务器资源利用率。

2.配置

(1)配置proxy1

[root@proxy01 ~] vim /etc/keepalived/keepalived.conf
global_defs {
     router_id lb01 # 当前物理设备的标识名称
}

(2)主服务器配置

vrrp_instance VI_1 {
     state MASTER # 角色状态;
     interface eth0 # 绑定当前虚拟路由使用的物理接口;
     virtual_router_id 50 # 当前虚拟路由标识,VRID;
     priority 200 #当前物理节点在虚拟路由中的优先级;
     advert_int 3 # vrrp通告时间间隔,默认1s;
     
#nopreempt
authentication {
     auth_type PASS # 密码类型,简单密码;
     auth_pass 1111 # 密码不超过8位字符;
}

virtual_ipaddress {
     10.0.0.100 # VIP地址
}

notify_master
"/etc/keepalived/notify.sh master" # 当前节点成为主节点时触发的脚本
notify_backup
"/etc/keepalived/notify.sh backup" # 当前节点转为备节点时触发的脚本
notify_fault
"/etc/keepalived/notify.sh fault" # 当前节点转为“失败”状态时触发的脚本
}

(3)备用服务器配置

vrrp_instance VI_2 {
   state BACKUP # 角色状态;
   interface eth0 # 绑定当前虚拟路由使用的物理接口;
   virtual_router_id 55 # 当前虚拟路由标识,VRID;
   priority 100 # 当前物理节点在虚拟路由中的优先级;
   advert_int 3 # vrrp通告时间间隔,默认1s;

#nopreempt

authentication {
   auth_type PAsS # 密码类型,简单密码;   
   auth_pass 1111 # 密码不超过8位字符:
}
virtual_ipaddress {
       10.0.0.101 # VIP地址
  }
}

(4)配置proxy2

[root@proxy02 ~]vim /etc/keepalived/keepalived.conf
global_defs {
    router_id lb02 # 当前物理设备的标识名称
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144876.html

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

相关文章

Linux安装Docker与基本使用

Docker 常用于服务部署的一种方案 准备 1.云服务器或者虚拟机 2.Centos 系统 3.下载XFtp 和 XShell 安装Docker 首先删除系统中旧版本Docker或者残留文件 #卸载所有 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-lo…

Spring从入门到精通 | 动力节点老杜

目录 一、Spring启示录 1、OCP开闭原则 2、依赖倒置原则&#xff08;DIP原则&#xff09; 3、控制反转&#xff08;重点&#xff09; 4、Spring框架&#xff08;重点&#xff09; 二、Spring概述 Spring的8大模块 ​编辑 Spring特点 1、轻量 2、控制反转IOC 3、面向…

Qt Mac阻止和启用休眠

阻止电脑休眠&#xff0c;在win下是使用win api实现的&#xff0c;用Qt跨平台开发&#xff0c;实现Mac的阻止休眠&#xff0c;也需要Mac本身的api来实现。经过网上查资料&#xff0c;找到了一个能用的&#xff0c;链接如下。原生mac开发用的是Object-c&#xff0c;所以该实现用…

Kyligence 客户案例“泰康集团精细化经营分析与运营平台”获评数据智能最佳实践案例

近日&#xff0c;“2022 爱分析中国数据智能最佳实践案例”评选结果正式揭晓。Kyligence 携手泰康集团申报的“泰康集团精细化经营分析与运营平台”项目经过多轮角逐脱颖而出&#xff0c;最终获评“中国数据智能最佳实践案例”。同时&#xff0c;Kyligence 通过综合能力评估&am…

Linux Shell脚本编程提高

Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shel编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应…

保姆级教程 | 将Oxylabs住宅代理和数据中心代理与MultiLogin集成的操作步骤

MultiLogin是一款集多账户管理、浏览器指纹隐藏等功能于一体的实用解决方案。在您抓取所需公共数据时&#xff0c;将MultiLogin与值得信赖的代理结合使用&#xff0c;可以大幅降低被网站阻止情况发生的概率。 在本篇教程中&#xff0c;将带您学习简单的集成流程&#xff0c;手把…

数说热点 | 2022商业地产的“破局”与“新生”——逆境之下探索新兴可能

2022年&#xff0c;受国内新冠肺炎疫情因素影响&#xff0c;我国经济下行压力明显加大&#xff0c;尤其是部分产业链、供应链受到冲击&#xff1b;部分区域接触型、聚集型特征明显的线下消费表现低迷&#xff0c;给实体商业经营带来挑战。从市场表现看&#xff0c;2022年1-9月&…

数据架构之数据血缘:数据从哪里来,到哪里去

为了直观的感受数据血缘&#xff0c;先从网上找了两张典型的数据血缘的图。下图特点是按照数据仓库数据管理模型给出了基于表&#xff08;实体&#xff09;的数据血缘图。 此图是截取Solidatus软件生成的数据血缘图&#xff0c;该图与上图的区别在于给出了基于属性的数据血缘图…

【纯净题目版】笔试题-2023禾赛-FPGA

题目背景 笔试时间&#xff1a;2022.06.22应聘岗位&#xff1a;FPGA开发工程师 题目评价 难易程度&#xff1a;★★☆☆☆知识覆盖&#xff1a;★☆☆☆☆超纲范围&#xff1a;☆☆☆☆☆值得一刷&#xff1a;★☆☆☆☆ 文章目录1. 使用最少的电路实现二分频&#xff0c;给出…

ubuntu20.04 arm-linux-gnueabihf交叉编译opencv4.7.0 与opencv-contrib-4.7.0

安装交叉编译工具链编译的目标硬件是RV1126&#xff0c;编译工具链为32位的arm-linux-gnueabihf&#xff0c;本次使用的是8.3版本&#xff0c;可在Downloads | GNU-A Downloads – Arm Developer进行下载。下载后&#xff0c;解压到自己的安装目录&#xff0c;比如解压到/opt目…

Seata客户端

一个调用链中的所有微服务都是seata的客户端&#xff0c;都必须走下面的步骤 第一步&#xff1a;创建undo_log表 下载地址&#xff1a;https://github.com/seata/seata/tree/develop/script/client/at/db -- for AT mode you must to init this sql for you business databa…

海南三亚游记2022-2023跨年

文章目录1、概述2、交通2.1、广州飞三亚2.2、做高铁&#xff0c;三亚到海口2.3、海口飞广州3、风景3.1、吉阳区3.2、天涯区4、美食5、住宿6、补充2014年海南游记1、概述 2022-12-30~2023-01-04&#xff0c;海南三亚游记&#xff0c;旨在记录攻略 之前已经去过海南2次&#xff…

数据结构的相关概念

基本概念和术语 数据是对客观信息的一种描述&#xff0c;它是由能被计算机识别与处理的数值、字符等符号构成的集合。 数据元素是数据的基本单位&#xff0c;在计算机程序中通常作为一个整体进行考虑和处理。 关键码值的是数据元素中能起标识作用的数据项。 关系指的是集合…

MFC/WIN32程序美化之使用skinH更换皮肤

官网 https://www.skinsharp.com/htdocs/index.htm 使用比较简单 使用到skinH.dll,这是程序运行的动态支撑库,还有skinH.lib文件,编译时用到的。还有SkinH.h头文件,里面包含了skinH.dll的库函数和功能注释、宏定义 使用VS创建一个WIN32项目 这就是默认的窗体效果了 加了…

SpringBoot AOP

SpringBoot AOP 目录SpringBoot AOP写法一&#xff1a; Before("execution(* com.bjpowernode.springboot07.javabean.Man.eat(..))")一、AOP开发1.1 概述1.2使用方法1.3创建项目并添加maven依赖1.4 创建Javabean测试类1.5 创建切面1.6 测试类1.7 测试结果1.8 结论1.…

pytest学习和使用16-HTML报告如何生成?(pytest-html)

16-HTML报告如何生成&#xff1f;&#xff08;pytest-html&#xff09;1 插件介绍2 pytest-html安装3 生成报告3.1 插件执行方式3.2 执行效果3.3 指定报告生成的路径4 合并css5 报告中的行显示设置6 报告增强6.1 自定义css6.2 报告标题6.3 环境6.4 其他摘要信息6.5 Extra内容6.…

198. 打家劫舍

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

MySQL调优-Innodb引擎SQL执行的BufferPool缓存机制

目录 Innodb引擎SQL执行的BufferPool缓存机制 为什么Mysql不能直接更新磁盘上的数据而且设置这么一套复杂的机制来执行SQL了&#xff1f; 为什么直接更新磁盘是随机读写&#xff1f;为什么读写磁盘的日志文件是顺序读写&#xff1f; 为什么不直接读写磁盘而是选择读写Buffer…

【吐槽贴】项目经理的进阶日常:项目要收尾了,我却慌了

最近忙着写年终总结&#xff0c;还以为这次的年终奖稳了&#xff0c;结果犯了一个致命的错误&#xff0c;年终奖差点都没了。我负责的一个项目由于客户方比较着急&#xff0c;计划在过年放假前要完成交付&#xff0c;项目进度都完成的差不多了。现在还剩近10天的工期&#xff0…

2022尚硅谷SSM框架跟学(二)MyBatis基础二

2022尚硅谷SSM框架跟学二MyBatis基础二6.MyBatis的各种查询功能6.1查询一个实体类对象6.2查询一个list集合6.3查询单个数据MyBatis别名对应文档6.4查询一条数据为map集合6.5查询多条数据为map集合(1)方式一(2)方式二7.特殊SQL的执行7.1模糊查询7.2批量删除7.3动态设置表名7.4添…