使用Keepalived工具实现集群节点的高可用

news2024/11/24 22:41:17
  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。
  • 作者:蟹黄瓜子
  • 文章来源:社区投稿

1.前言

在集群当中离不开的一个词就是是高可用,用本文来简单聊聊Keepalived是什么、Keepalived如何实现高可用、Keepalived的使用场景。

  • 首先,假设一个应用场景,内网有一台tomcat服务器,随着业务的增加、流量的增加一台tomcat服务器就变得不够用了,因此需要增加多台tomcat服务器,他们拥有相同的业务处理能力,为了可以统一对这些tomcat的访问同时更好地调度到不同的tomcat完成业务,可以添加一台nginx服务器。它的作用是为内网中的多台tomcat服务器提供负载均衡的动态访问,通过nginx,我们可以以不同的调度方式来到不同的tomcat来进行下一步的操作。
  • 但这种模式是十分脆弱的,如果此时nginx宕机了,tomcat服务器就都访问不了了,假设也增加一台nginx赋予这台nginx相同的业务能力,那就又涉及到了这个问题,它需要一个统一的入口,如果在这两台nginx服务器的前面再放一台nginx或者是一台lvs服务器做这两台nginx的调度,只会使得这种部署方案进入一个死循环,变成一个无解的答案。
  • 可以试着换一种思路,我就让这台nginx作为主机进行工作,同时为这台nginx准备一台备机,当主机宕机了,这台备机就可以及时顶替主机的工作。当然还需要考虑到这两台服务器是不同的ip,客户访问的是主机,怎么变成访问备机呢?如果要把备机的ip“换成主机的”显然不可取,有可能主机只是过热的短暂故障,如果ip被备机使用了,主机又突然恢复了,这个时候问题又出现了,因此,我们需要使用一个虚拟ip。

因此,实现的效果应是一主一备,主机宕机备机上线提供服务,不可能同时提供服务。访问业务通过的入口为vip,因此我们引入Keepalived,让其跑在两台nginx上,达到Keepalived之间的相互通信,检测心跳,如果主机宕机,Kpalived就将主机的vip漂移到备机上,这样就可以实现不需要关注这两台nginx的具体ip地址是多少就可以实现来者之间高可用的切换。至于宕机的服务器恢复以后重新上线是否作为主机就要根据配置文件里面的优先级进行竞选。

2.Kepalived介绍

Keepalived是一款保证集群高可用的一个服务软件,用来防止单点故障。Kepalived是以VRRP(Virtual Router Redundancy Protocol)协议(虚拟路由冗余协议)为实现基础的。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

3.Keepalived部署

假设nginx服务器为192.168.1.1、192.168.1.2,vip为192.168.1.200:

为机子安装环境,采用yum源安装:

[root@localhost ~]# yum -y install kernel-devel*
[root@localhost ~]# yum -y install openssl-*
[root@localhost ~]# yum -y install popt-devel
[root@localhost ~]# yum -y install lrzsz
[root@localhost ~]# yum -y install openssh-clients
[root@localhost ~]# yum -y install libnl libnl-devel popt
[root@localhost ~]# yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
  • 进入/usr/local/目录:
[root@localhost ~]# cd /usr/local/
  • 把下载“keepalived-1.2.15.tar.gz”放入目录下,解压:
[root@localhost local]# tar zxvf keepalived-1.2.15.tar.gz
  • 进入目录:
[root@localhost local]# cd keepalived-1.2.15/
[root@localhost keepalived-1.2.15]# 
  • 通过configure进行安装:
[root@localhost keepalived-1.2.15]# ./configure --prefix=/usr/local/keepalived
  • 进行编译安装:
[root@localhost keepalived-1.2.15]# make
[root@localhost keepalived-1.2.15]# make install
  • 拷贝执行文件:
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  • 将init.d文件拷贝到etc下,加入开机启动项:
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/keepalived
  • 将keepalived文件拷贝到etc下,加入网卡配置:
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  • 创建keepalived文件夹,将keepalived配置文件拷贝到etc下:
[root@localhost keepalived-1.2.15]# mkdir -p /etc/keepalived
[root@localhost keepalived-1.2.15]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  • 添加可执行权限,同时加入开机启动:
[root@localhost keepalived-1.2.15]# chmod +x /etc/init.d/keepalived
# 添加时必须保证/etc/init.d/keepalived存在
[root@localhost keepalived-1.2.15]# chkconfig --add keepalived
[root@localhost keepalived-1.2.15]# chkconfig keepalived on
# 添加完可查询系统服务是否存在
[root@localhost keepalived-1.2.15]# chkconfig --list
  • 使用:
启动:service keepalived start
停止:service keepalived stop
重启:service keepalived restart
  • 将keepalived日志输出到local0:
[root@localhost keepalived-1.2.15]# vi /etc/sysconfig/keepalived

# 添加:
KEEPALIVED_OPTIONS="-D -d -S 0"
  • .在/etc/rsyslog.conf里添加配置:
[root@localhost keepalived-1.2.15]# vi /etc/rsyslog.conf
# 内容:
local0.*  /var/log/keepalived.log
  • 重新启动keepalived和rsyslog服务后配置防火墙通讯地址:
[root@localhost keepalived-1.2.15]# service rsyslog restart
[root@localhost keepalived-1.2.15]# service keepalived restart
  • 主机配置文件:
! Configuration File for keepalived

global_defs {
   router_id NG_DEVEL1
}

vrrp_instance NG {
    # 标示为主nginx
    state MASTER
    # HA检测端口,查看主机服务器的网卡
    interface eth33
    # 主备上的id必须相同
    virtual_router_id 51
    # 配置优先级,本示例备机比主机优先级小
    priority 100
    # VRRP Multicast 广播周期秒数
    advert_int 1
    # 定义认证
    authentication {
        # 认证方式为口令认证
        auth_type PASS
        # 定义口令
        auth_pass 1111
    }
    # 定义vip,可以设置多个
    virtual_ipaddress {
        192.168.1.200
    }
}
  • 备机配置文件:
! Configuration File for keepalived

global_defs {
   router_id NG_DEVEL2
}

vrrp_instance NG {
    # 标示为备nginx
    state BACKUP
    # HA检测端口,查看主机服务器的网卡
    interface eth33
    # 主备上的id必须相同
    virtual_router_id 51
    # 配置优先级,本示例备机比主机优先级小
    priority 50
    # VRRP Multicast 广播周期秒数
    advert_int 1
    # 定义认证
    authentication {
        # 认证方式为口令认证
        auth_type PASS
        # 定义口令
        auth_pass 1111
    }
    # 定义vip,可以设置多个
    virtual_ipaddress {
        192.168.1.200
    }
}
  • 重启服务:
[root@localhost keepalived-1.2.15]# service keepalived restart
  • 可以进行简单的测试,当主机宕机后,vip成功漂移到备机

4.结语

Keepalived的使用不止局限于nginx,他的作用是作用于服务器,去检测服务器来实现单点访问的高可用,因此可以使用keepalived的场景就十分丰富了,lvs可以使用,也可以通过keepalived来实现MySQL的双主模式切换,也可以设置多个vip绑定在不同的机器上,通过dns轮询的方式访问vip,如果发生宕机就把宕机的主机vip漂移到其他主机上。在由文章中的模拟实验环境搭建可以参考上一篇文章《搭建基于lvs+nginx的负载均衡服务集群》。

keepalived的原理其实很简单就是通过服务器上的keepalived进程进行相互通信,这个时候需要注意,假设服务器没有宕机但是服务器的业务报错了,这个时候没有实现切换,可以写相应的运维脚本,通过脚本检测当前的业务是否出现错误,出现错误就将keepalived进程kill掉来实现切换。这里就不继续展开了。


Enjoy GreatSQL 😃

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

捉虫活动详情:https://greatsql.cn/thread-97-1-1.html

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

6440

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

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

相关文章

OpenWrt + 每步科技DDNS 实现ipv6动态域名解析方法

其实好几个月前我就已经把这个动态域名设置好了,后面重新刷了系统,忘记保存,又得重新再来,这次把过程记录一下,免得下次再从头百度。 工具 刷好openWrt的路由器一个每步科技注册的域名(我为什么选择这个&…

数字电子技术(八)D/A和A/D转换

D/A和A/D转换概述D/A转换A/D转换例题练习模拟信号:在时间与数值上都连续 数字信号:在时间与数值上都离散 概述 D/A转换:数字信号——模拟信号 (D/A转换器简称DAC)A/D转换:模拟信号——数字信号 &#xff0…

修改物料编号格式及长度

修改物料编号格式及长度(OMSL) 路径:IMG--后勤常规--物料主数据--基本设置--定义物料编号的输出格式

毕业设计 - 基于JSP的合同信息管理系统【源码+论文】

文章目录前言一、项目设计1. 模块设计数据库设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java web jsp 项目: 基于JSP的合同信息管理系统 适合用于毕业设计、课程设计 一、项目设计 1. 模块设计 需求分析是从客户的需求中提取出软件系统能够帮助用户…

java互联网医院系统HIS源码带本地搭建教程

技术架构 技术框架:SpringBoot MySql MyBatis nginx Vue2.6 原生APP 运行环境:jdk8 IntelliJ IDEA maven 宝塔面板 Android Studio 文字本地搭建教程 下载源码,小皮面板安装mysql5.7数据库,创建一个新数据库,…

引力波探测,冷冻电镜研究:两项诺奖GPU功不可没

我们的日常工作固然重要,但并非每一份重要的工作都能够助力他人获得诺贝尔奖。然而,就在2017年10月,GPU 计算便两度成为了助力获得诺贝尔奖的幕后英雄。 三名美国物理学家Rainer Weiss、Barry Barish和Kip Thorne因探测到了爱因斯坦百年前预测…

从“跨域融合”到“中央计算”,这家Tier1如何率先抢跑?

全球汽车产业已经进入以智能化为主旋律的下半场竞赛,同时整车电子电气架构也在加速跨入集中式电子电气架构时代。 在这样的背景之下,智能驾驶域控制器成为了当前最大的增量市场之一,由此也带动了上游芯片、OS、中间件等域控相关软硬件产品的…

第13讲:Python列表对象中元素的删操作

文章目录1.列表元素删操作的方法2.调用remove方法一次删除一个指定的元素3.调用pop方法一次只删除一个指定索引的元素3.1.使用pop方法删除列表中索引为2的元素3.2.使用pop方法不指定索引3.3.使用pop方法指定的索引不存在时同样也会抛出错误4.使用del语句一次至少删除一个元素4.…

nodejs+vue082新生入学管理系统-vscode msyql

一章 绪论 3 1.1课题背景 3 1.2课题研究的目的和意义 3 1.3 研究现状 4 1.4论文所做的主要工作 4 第二章 技术介绍 5 2.1 B/S结构 5 2.2MySQL介绍 5 2.3MySQL环境配置 6 第三章 系统分析与设计 8 3.1系统说明 8 3.2系统可行性分析 8 3.2.1 技术可行性 8 3.2.2 经济可行性 8 3…

Vue3——路由和嵌套路由的使用

路由的作用 用来在前端的页面实现页面的切换,比如下图中acwing的页面应该就是采用了路由来设计导航栏,在每一次点击不同选项时只有网址后面的索引发生变化,网页并没有刷新 路由的使用方法: 根据导航栏处的跳转的页面的不同&…

如何创建vue项目

一. 环境准备 1.安装node.js 推荐地址:Node.js 2.检查是否安装完成:输出版本号说明安装成功 二.搭建vue环境 1.全局安装vue/cli 推荐地址:快速上手 | Vue.js 2.在命令输入 npm install -g vue/cli 如果使用yarn global add vue/cli 需要…

JVM--基础--19.7--垃圾收集器--G1

​ JVM–基础–19.7–垃圾收集器–G1 1、结构图 ​ 2、G1收集器(面向服务端) 2.1、特点 2.1.1、并行于并发 使用多个CPU(CPU或者CPU核心)来缩短stop-The-World停顿时间,其他需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让java程序…

​汽车芯片的可靠性设计:控制亚稳态,提升稳定性

【作者简介】Dr. Roy 复睿微 IC后端工程师,南开大学与韩国首尔国立大学联合培养博士。博士期间发表高水平学术期刊论文多篇,其中一作一区封面文章2篇;授权发明专利5项。同时,在先进工艺大芯片的静态时序分析、芯片设计流程提效优化…

对某擦边站点的一次渗透

更新时间:2022.07.05 2022年11月21日21:50:12 1. 说明 在上半年的时候,在线浏览网页的时候,突然跳转到了一个sese的界面,然后要下载app,本着弹出即下载的原则,我就欣然安装了: app本身长这样…

Dubbo架构设计与源码解析(一) 架构设计

作者:黄金 一、架构演变 单应用架构 ----> 垂直架构 ----> 分布式架构 ----> 微服务架构 ----> 云原生架构 二、Dubbo总体架构 1、角色职能 • Container:服务容器 (tomcat、jetty、weblogic) • Provider&#xf…

Web Spider NEX XX国际货币经纪 - PDF下载 提取关键词(二)

Web Spider NEX XX国际货币经纪 - PDF下载 & 解析 首先声明: 此次案例只为学习交流使用,切勿用于其他非法用途 文章目录Web Spider NEX XX国际货币经纪 - PDF下载 & 解析前言一、任务说明1.PDF下载2.PDF解析提取关键词数据二、Pip模块安装三、网站分析四、核…

【解决】Unity Player Log 自生成造成磁盘满占用率问题

开发平台:Unity 2020 编程平台:Visual Studio 2022 编程语言:CSharp   问题描述 Unity 工程完成打包与发布过程后,在运行时生成大量 Player Log 的日志文件导致其所在盘占用率满额问题。通常情况下,这类日志文件信息…

微信小程序开发—入门到跑路(三)

3、微信小程序第三天 1、学习目标 知识点名称知识点内容难度系数要求程度页面导航声明式导航、编程式导航、导航传参3星掌握页面事件下拉刷新、上拉触底、上拉触底案例、自定义编译模式3星掌握生命周期生命周期分类、应用生命周期、页面生命周期3星掌握wxs学习认识wxs及应用场…

百度工程师带你探秘C++内存管理(ptmalloc篇)

作者 | daydreamer 前篇《探秘C内存管理(理论篇)》主要介绍了Linux C程序内存管理的理论基础,本文作为系列文章《探秘C内存管理》的第二篇,将会探讨经典内存管理器ptmalloc如何管理C程序的内存。借助剖析ptmalloc解决问题的着重点…

攻防世界-easyphp

题目 访问url进入靶场&#xff0c;阅读php代码 <?php highlight_file(__FILE__); $key1 0;//值赋值 $key2 0;$a $_GET[a];//get方法获取值 $b $_GET[b];if(isset($a) && intval($a) > 6000000 && strlen($a) < 3){ //a的值需要大于 6000000&…