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

Keepalived实现服务器的高可用性

目录

  • 背景
  • 方案简介
    • Keepalived
    • Heartbeat
  • Keepalived技术介绍
    • Keepalived通信方式
    • 时间同步
  • Keepalived配置案例
    • Keepalived日志配置
    • Keepalived服务配置
      • 全局配置段
      • VRRP配置段
      • Keepalived服务启动
  • 服务异常检测

背景

在实际应用中,为了提高服务器的高可用性,往往会部署多套服务器,避免一台服务器故障后,引起服务瘫痪。针对无需数据冗余的服务,可以用第三方的成熟方案实现高可用性。
第三方方案可与当前业务逻辑完全分离,互不影响,实现更加灵活。目前主要存在两种成熟的高可用性方案,Keepalived与Heartbeat。

方案简介

Keepalived

Keepalived可用于服务器状态检测,如果有一台服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从集群系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

  1. 优势:使用更简单:从安装、配置、使用、维护等角度上对比,Keepalived都比Heartbeat简单,并且满足集群倒切需求;
  2. 劣势:没有管理功能;
  3. 编码难度较小,满足功能需求

Heartbeat

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。Heartbeat(Linux-HA)的工作原理:Heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。

  1. 优势:功能更强大,配套工具更全,适合做大型集群管理,而Keepalived主要用于集群倒换,基本没有管理功能;
  2. 劣势:功能复杂,使用难度较大;
  3. 编码难度大,主要用于大型集群管理。

综上所述,针对只有两架服务器作为温备,组成的冗余系统,Keepalived方式即可满足需求,实现设备倒切。

以下主要介绍Keepalived的实现方式

Keepalived技术介绍

Keepalived通信方式

Keepalived支持单播和组播两种方式,由于方案中目前只存在两台设备作为温备,单播即可满足要求,同时也可避免其他系统Keepalived组播消息干扰。
Keepalived通信消息中携带鉴权类型为PASS方式,密码为一组任意的字符串,保证Keepalived安全通信。

时间同步

Keepalived通信裁决主备时,要求两台服务器的时间差不能太大,否则无法正确进行主备裁决,因此该方案采用NTP方式进行设备时间同步。
服务器操作系统安装时,已默认安装NTP服务,该文档只讲述NTP服务的配置。NTP配置文件路径:/etc/ntp.conf。在配置文件中分别添加如下两行:

server xx.xx.xx.xx
server 127.127.1.0

xx.xx.xx.xx为NTP服务器IP,表示该设备向NTP服务器同步时间。
第二行表示当上级NTP时钟失效时,使用本地时钟继续提供服务,方便其他设备进行时间同步。

当两台设备时间相差过大时,NTP服务无法进行时间同步。所以,需要结合ntpdate服务进行时间同步。ntpdate可强制进行时间同步。可在开机启动脚本(/etc/rc.d/rc.local)中添加如下三行:

service ntpd stop
ntpdate xx.xx.xx.xx
service ntpd start

由于NTP、ntpdate两个服务冲突,必须停止NTP服务后,ntpdate才能提供服务。
xx.xx.xx.xx为NTP服务器IP,表示设备向NTP服务器强制同步时间。
最后再重新启动NTP服务

NTP结合ntpdate时间同步后,会出现硬件时间与系统时间不一致的情况,可在文件/etc/sysconfig/ntpd添加如下配置向,使硬件时间与系统时间保持一致。

SYNC_HWCLOCK=yes

NTP时间同步时,硬件时间也进行相应的时间同步。

Keepalived配置案例

Keepalived日志配置

Keepalived安装成功后,配置其日志输出路径为:/var/log/keepalived.log。

在/etc/sysconfig/keepalived配置文件中将KEEPALIVED_OPTIONS设置修改为

KEEPALIVED_OPTIONS=”-D -d -S 0”

同时在/etc/rsyslog.conf配置文件中,添加一行

local0.* /var/log/keepalived.log

Keepalived服务配置

Keepalived服务配置共分为三个部分:全局配置段、VRRP配置段、LVS配置段。其中全局配置段用于定义全局设置,VRRRP配置段用于配置实例,LVS配置段用于定义虚拟服务器的设置。该方案中无需LVS配置段。

全局配置段

全局配置段中只需修改router_id即可,其中温备的两台设备该值必须区分开,作为设备唯一标志。
示例

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_DEVEL1
}

VRRP配置段

VRRP配置段内包含服务监控脚本及vrrp同步组配置、相应的实例配置。
vrrp_script为监控脚本,定时执行周期为2秒,用于监控四个浮动IP的状态。
vrrp_sync_group为同步组配置,组内共有两个实例,任何一个监控实例出现异常后,即进行主备切换。角色切换后,执行notify脚本,服务器根据角色执行相应的操作。

vrrp_script monitor_service {
script "monitor_service.sh " 20.31.250.13 20.31.250.14 192.168.10.13 192.168.10.14
interval 2
}
vrrp_sync_group VG_1 {
group {
VI_1
VI_2
}
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
}

需要监测两个网卡时可写两个实例,实例名对应于同步组group内的节点名,对于只需监测一个网卡的情况,可只写一个实例。该方案以两个实例为例进行介绍,两个实例只有网卡名、IP、virtual_router_id,其他项都基本一致。

实例1

vrrp_instance VI_1 {
state BACKUP
nopreempt
interface bond0
track_interface {
bond0
}
virtual_router_id 133
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 337639943
}
unicast_src_ip 20.31.250.10
unicast_peer {
20.31.250.11
}
virtual_ipaddress {
20.31.250.13
20.31.250.14
}
track_script {
monitor_service
}

实例2

vrrp_instance VI_2 {
state BACKUP
nopreempt
interface eth2
track_interface {
eth2
}
virtual_router_id 233
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 337639943
}
unicast_src_ip 192.168.10.10
unicast_peer {
192.168.10.11
}
virtual_ipaddress {
192.168.10.13
192.168.10.14
}
track_script {
monitor_service
}

实例参数介绍

参数名称解释
state可配置为MASTER、BACKUP,该方案中,温备两台设备都配置为BACKUP
interface浮动IP绑定的物理网口
track_interface监控的物理网口
virtual_router_id唯一标识id,用于区分vrrp实例,温备两台设备VI_1都配置为133,VI_2都配置为233
priority优先级,默认配置为100
advert_int发送vrrp通告的时间间隔,默认为1秒
authenticationvrrp实例协商的方式及密码,方式默认为PASS,密码为本地核心网十进制IP地址
unicast_src_ip本端interface网口上的固定IP
unicast_peer对端interface网口上的固定IP
virtual_ipaddressInterface网口上的浮动IP
track_script监控脚本,默认为vrrp_scrip定义的脚本

Keepalived服务启动

Keepalived安装完成后,可通过命令 service keepalived start 启动。
同时在开机启动配置文件/etc/rc.d/rc.local中添加如下一行,使Keep alived可开机自启动。

service keepalived start

服务异常检测

Keepalived服务只能监测硬件、网络的状态,无法服务进行检测。所以,一般需要增加服务异常检测。
在/etc/crontab定时任务文件中增加一行,每十分钟执行一次定时任务。

*/10 * * * * root my_keepalived_crontime.sh

当十分钟内,服务重启超过5次,则认为设备或服务出现问题,进行主备切换。

相关文章:

Keepalived实现服务器的高可用性

目录 背景方案简介KeepalivedHeartbeat Keepalived技术介绍Keepalived通信方式时间同步 Keepalived配置案例Keepalived日志配置Keepalived服务配置全局配置段VRRP配置段Keepalived服务启动 服务异常检测 背景 在实际应用中,为了提高服务器的高可用性,往…...

Python程序化交易接口批量获取数据源码

小编举例下面是一个简单的示例代码,展示如何使用Python的程序化交易接口批量获取数据,例如开发文档参考:MetaTradeAPI (metatradeapi) - Gitee.com 签名 int Init(); 功能 API 初始化 参数 无 返回值 授权成功的交易账户数量 返回值 &…...

【强化学习】基本概念

基本大概框架 强化学习的主要角色是 智能体 (agent)和 环境,环境是智能体存在和互动的世界。智能体根据当前的环境做出action,action影响环境。然后智能体根据新的环境再进行action。 基础用语 状态(state, s)&…...

0001__安装electron失败 postinstall: `node install.js`

不一样的 npm 快速安装electron的方案 - 简书 2、手动下载出错的文件 打开浏览器输入 下述网址, 找到你要的版本号, 点击后找到你的平台点击即可下载了。https://registry.npmmirror.com/binary.html?pathelectron/ 作者:一颗人心 链接&…...

Linux测开常用命令总结

文章目录 Linux系统中文件目录树 基本指令的使用: Linux命令的帮助信息查看 --help command --help 说明: 显示command 命令的帮助信息通过man命令查看帮助信息 man command( 命令的名称) man 命令查看的帮助信息更加详细ls,pwd&#xff0c…...

xml转化为txt数据的脚本,为yolo提供训练

这里写自定义目录标题 xml转化为txt数据的脚本 xml转化为txt数据的脚本 代码如下: import xml.etree.ElementTree as ET import os, cv2 import numpy as np from os import listdir from os.path import joinclasses []def convert(size, box):dw 1. / (size[0…...

【H5页面嵌入到小程序或APP中实现手机号点击复制和拨号功能】

在H5界面嵌入到小程序和移动应用&#xff08;安卓和iOS&#xff09;中实现手指点击手机号弹出弹窗&#xff0c;包含呼叫和复制选项&#xff0c;是可以实现的。下面我将为你提供一个基本的示例&#xff0c;并解释在小程序、安卓和iOS中要做的支持工作。 <!DOCTYPE html> …...

Kubernetes技术--k8s核心技术 configMap

1.概述 configMap最主要的作用是存储一些不加密的数据到/etcd,让pod以变量或者数据卷(volume)挂载到容器。 应用场景:配置文件、存储信息等 2.使用 -1.创建配置文件。 这里我们需要先编写一个配置文件。使用redis,如下所示:...

Springboot动态修改日志级别

在开发和运维过程中&#xff0c;我们经常需要调整日志级别来查看不同级别的日志信息。传统的做法是修改配置文件&#xff0c;然后重启应用程序。但是&#xff0c;在分布式系统中&#xff0c;重启应用程序可能比较麻烦&#xff0c;而且也影响了业务的正常运行。 Springboot提供…...

新手将最简单的springboot部署上tomcat出现的意外问题

现阶段springboot部署到tomcat的文章一抓一大把且都相同,便贴一个地址以展示流程: SpringBoot打war包部署Tomcat(最全)_spring boot war 部署tomcat_聊Java的博客-CSDN博客 那么就说一下我出现的问题: 在完整复现流程且确认代码无误的情况下,部署到tomcat,此时问题出现了:启动…...

P1177 【模板】排序(Sort排序)

题目描述 将读入的 N N N 个数从小到大排序后输出。 输入格式 第一行为一个正整数 N N N。 第二行包含 N N N 个空格隔开的正整数 a i a_i ai​&#xff0c;为你需要进行排序的数。 输出格式 将给定的 N N N 个数从小到大输出&#xff0c;数之间空格隔开&#xff0c…...

软件测试(黑盒测试、白盒测试、灰盒测试)

软件测试方法大类上分为黑盒测试、白盒测试和灰盒测试三种 一、黑盒测试 黑盒测试通俗来说即不知道代码是怎么写的。具体实现逻辑&#xff0c;基于代码输入有哪些应该输出什么进行测试的方法。其方法有&#xff1a;基于直觉和经验的方法&#xff08;IEBT&#xff09;、基于需…...

昨天面试的时候被提问到的问题集合。

1、vue的双向绑定原理是什么&#xff1f;里面的关键点在哪里&#xff1f; 2、实现水平垂直居中的方式&#xff1f; 3、常用伪元素有哪一些&#xff1f; 4、移动端如何适配不同屏幕尺寸&#xff1f; 5、本地存储有哪一些&#xff1f;他们三者有什么区别&#xff1f; 6、JS的数据…...

广电运营商三网融合监控运维方案

随着三网融合逐步发展、深化&#xff0c;广电网络从为用户提供原本单一的信息服务转向了集语音、文字、图像为一体的信息服务&#xff0c;同时也实现了由单一独立的网络向综合性网络的改变。如何在业务的融合与竞争中创造核心竞争力&#xff0c;利用自身网络覆盖率上的优势&…...

数据库锁简析

数据库大并发操作要考虑死锁和锁的性能问题。用T1代表一个数据库执行请求&#xff0c;T2代表另一个请求&#xff0c;也可以理解为T1为一个线程&#xff0c;T2 为另一个线程。T3,T4以此类推。下面以SQL Server为例。 锁的种类 共享锁(Shared lock) 例1&#xff1a;T1: select…...

说说广播流与普通流

分析&回答 user actions 可以看作是事件流&#xff08;普通流&#xff09;patterns 为广播流,把全量数据加载到不同的计算节点。 广播流 Broadcast是一份存储在TaskManager内存中的只读的缓存数据在执行job的过程中需要反复使用的数据&#xff0c;为了达到数据共享&am…...

内卷的本质和大数据在计量经济学领域的运用思考

内卷的本质和大数据在计量经济学领域的运用思考 今天我们来思考两个问题&#xff1a; 当下经济的困局在哪里&#xff1f;为何内卷越来越严重&#xff1f;内卷的本质是什么&#xff1f;为何会出现内卷&#xff1f;市场经济运行的底层逻辑是什么&#xff1f;西方经济学理论的指导…...

毕业设计-摄像头识别二维码

本毕业设计采用imx6ull-linux4.1.15-qt5.6开发板进行测试 相关交叉编译包和摄像头测试程序已上传&#xff1a;https://download.csdn.net/download/qq_42952079/88282608 将zbar和opencv下的lib库文件拷贝到开发板的lib目录下&#xff0c;将camera可执行文件拷贝到开发板目录下…...

封装动态表单组件

技术栈&#xff1a;vue2 js webpack 需求&#xff1a; 利用数据渲染表单&#xff0c;实现代码的精简化及效率的提升。 效果图&#xff1a; 封装的组件&#xff1a; <div v-if"formConfig"><el-formv-bind"$attrs"ref"formDom":model…...

提高Python并发性能 - asyncio/aiohttp介绍

在进行大规模数据采集时&#xff0c;如何提高Python爬虫的并发性能是一个关键问题。本文将向您介绍使用asyncio和aiohttp库实现异步网络请求的方法&#xff0c;并通过具体结果和结论展示它们对于优化爬虫效率所带来的效果。 1. 什么是异步编程&#xff1f; 异步编程是一种非阻…...

网络性能的四大指标:带宽、时延、抖动、丢包

原文链接&#xff1a;https://www.eet-china.com/mp/a82420.html 怎么去描述网络性能的好坏&#xff1f; 你如果说这个网络很好&#xff0c;那里的网络有点差&#xff01;这无异于看这风景美如画,本想吟诗赠天下,怎奈自己没文化,只能卧槽浪好大。 我们得用专业的术语去描述它…...

MySQL高阶查询语句

目录 一、常用查询 1、按关键字排序 1.1 升序排序 1.2 降序排序 1.3 结合where进项条件过滤再排序 1.4 多条件排序 2、区间判断及查询不重复记录 2.1 and/or&#xff08;且/或&#xff09; 2.2 嵌套 /多条件 2.3 distinct 查询不重复记录 3、对结果进行分组 4、限…...

未来科技城携手加速科技 共建集成电路测试公共服务平台!

8月26日&#xff0c;2023未来产业发展大会在杭州未来科技城国际会议中心开幕&#xff01;会上&#xff0c;发布了未来科技城培育发展未来产业行动计划&#xff0c;启动了未来产业发展共同体&#xff0c;进行了未来产业公共服务平台签约仪式。未来科技城与加速科技签约共建集成电…...

渗透测试漏洞原理之---【失效的访问控制】

文章目录 1、失效的访问控制1.1、OWASP Top 101.1.1、A5:2017-Broken Access Control1.1.2、A01:2021 – Broken Access Control 1.2、失效的访问控制类别1.2.1、水平越权1.2.2、垂直越权 1.3、攻防案例1.3.1、Pikachu靶场 Over Permision1.3.2、DVWA越权利用失效的访问控制漏洞…...

opencv的使用(Ubuntu linux环境,AS jni,AS java)

最近要完成一个功能,就是把四个视频合成左右上下分布的一个视频。尝试很多方法,最终使用opencv来实现该功能。(通过opencv实现的视频好像没有声音。)研究的步骤,首先在Ubuntu环境测试,该功能是否实现。然后再将生成的库文件放到AS中,使用jni的方法调用,或者将源码放到A…...

ChatGPT(对话AI)汇总

ChatGPT的全称为”Conversational Generative Pre-trained Transformer”&#xff0c;是一个基于预训练的自然语言处理模型。 1.商量SenseChat&#xff08;商汤&#xff09; SenseChat (sensetime.com) 2.文心一言&#xff08;百度&#xff09; 文心一言 (baidu.com) 3.百…...

【Docker】用Dockerfile制作个人的镜像文件

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…...

前端面试基础面试题——4

1.谈谈你对 ES6 的理解 2.说说你对 promise 的了解 3.解构赋值及其原理 4.Vue常用的修饰符及使用的场景 5.vue 中 key 值的作用 6.什么是 vue 的计算属性&#xff1f; 7.watch的作用是什么 8.计算属性的缓存和方法调用的区别 9.响应式系统的基本原理 10.vue-loader …...

【08期】ArrayList常见面试题

简介 ArrayList是我们开发中非常常用的数据存储容器之一&#xff0c;其底层是数组实现的&#xff0c;我们可以在集合中存储任意类型的数据&#xff0c;ArrayList是线程不安全的&#xff0c;非常适合用于对元素进行查找&#xff0c;效率非常高。 线程安全性 对ArrayList的操作…...

Android studio之GridView使用

目录 效果图&#xff1a;![在这里插入图片描述](https://img-blog.csdnimg.cn/86e4a48a71164dec82613d58b1fbaa1c.jpeg)代码&#xff1a; 效果图&#xff1a; 代码&#xff1a; UserGridviewAdapter package com.example.gridviewpro.Adapter;import android.content.Contex…...