[MySQL]-双主+keepalived实现高可用

news2024/11/15 7:57:50

[MySQL]-双主+keepalived实现高可用


梁森 | 2023年1月

本文旨在记录学习主从时的拓展内容,怎么借助keepalived实现简单的高可用。

一、环境介绍


1.1 keepalived


keepalived的作用是检测服务器的状态,若某一台服务器宕机,会通过VIP(虚拟IP)的漂移选择另一台服务器,从而实现高可用。

它的工作原理是VRRP,即虚拟路由冗余协议,其中有两组重要概念:

  • VRRP路由器 & 虚拟路由器
  • 主控路由器 & 备份路由器

其实也好理解,对于第一组概念,VRRP路由器是物理实体,指的是运行VRRP的路由器;虚拟路由器是VRRP创建的,是一种逻辑概念,一组VRRP路由器协同工作,共同构成一台虚拟路由器。

对于第二组概念,其协议中存在着一种选举机制,用于选出提供服务的路由即为主控路由,其他的则成了备份路由。当主控路由失效后,会从备份路由中重新选举出一个主控路由,来继续工作,保障服务的不间断。

1.2 双主


对于主从同步的模式分为很多,这里选择用双主模式,个人理解为,两台机器互为主备,一台主机宕机,另一台机器可以继续提供服务。

1.3 基本原理


在这里插入图片描述

两台机器做双主同步,如果一台宕机,在没有VIP的时候,是不是需要我们手动去切换节点,这个过程是相对是非常耗时的,加入keepalived后,我们服务器的请求直接发送到VIP上,由VIP选择要去访问的IP,对于用户可以认为是无感知的,这也是它最大的优点。

二、实战操作


2.1 双主的配置


和主从同步的配置是一样的,这里可以参照我的上一篇文章《[MySQL]-主从同步实战》。

唯一要注意的就是,这篇文章是一主一从,对于双主,就是在两台机器上都布置下一主一从就可以,同时第二台机器部署主从同步时,可以不需要再去dump了。

2.2 keepalived的部署


开始之前呢,我们需要两台机器,和一个其他机器的IP当做VIP来使用。

要在两台机器上都部署keepalived

# 下载
wget http://www.keepalived.org/software/keepalived-1.4.5.tar.gz

# 解压缩
tar -zxf keepalived-1.4.5.tar.gz

# 编译安装
cd keepalived-1.4.5
./configure --prefix=/xx/xx/keepalived (你的安装路径)
make && make install

# 复制所需文件
cp /xx/xx/keepalived/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
cp /xx/xx/keepalived/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

# 复制配置文件
mkdir /etc/keepalived
cp /xx/xx/keepalived/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
echo "/etc/init.d/keepalived start" >> /etc/rc.local
# 编辑配置文件
vim /etc/keepalived/keepalived.conf

机器1的配置:

! Configurateon Fll-cmd --list-portsile for keepalived
       
global_defs {
router_id 1
}
       
vrrp_script chk_mysql_port {     #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
    script "/etc/keepalived/mysql.sh"   #这里通过脚本监测
    interval 2                   #脚本执行间隔,每2s检测一次
    weight -5                    #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
    fall 2                    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
    rise 1                    #检测1次成功就算成功。但不修改优先级
}
       
vrrp_instance VI_1 {
#    state MASTER        
    state BACKUP     
    nopreempt    #非抢占模式
    interface ens192      #指定虚拟ip的网卡接口
    mcast_src_ip IP2		#机器1的IP 
    virtual_router_id 51    #路由器标识,MASTER和BACKUP必须是一致的
    priority 101            #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级 
    advert_int 1         
    authentication {   
        auth_type PASS 
        auth_pass 1111     
    }
    virtual_ipaddress {    
        VIP		#虚拟IP 
    }
      
track_script {               
   chk_mysql_port             
}
}

机器2的配置:

! Configuration File for keepalived
       
global_defs {
router_id 2 
}
       
vrrp_script  {     #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
    script "/etc/keepalived/mysql.sh"   #这里通过脚本监测
    interval 2                   #脚本执行间隔,每2s检测一次
    weight -5                    #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
    fall 2                    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
    rise 1                    #检测1次成功就算成功。但不修改优先级
}
       
vrrp_instance VI_1 {
#    state MASTER        
    state BACKUP     
    nopreempt    #非抢占模式
    interface ens192      #指定虚拟ip的网卡接口
    mcast_src_ip IP2		#机器2的IP 
    virtual_router_id 51    #路由器标识,MASTER和BACKUP必须是一致的
    priority 100            #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级 
    advert_int 1         
    authentication {   
        auth_type PASS 
        auth_pass 1111     
    }
    virtual_ipaddress {    
        VIP		#虚拟IP 
    }
      
track_script {               
   chk_mysql_port             
}
}

检测脚本 mysql.sh (我这里的两台机器数据库的端口为3307)

#!bin/bash
source ~/.bash_profile
counter=$(netstat -na|grep "LISTEN"|grep "3307"|wc -l)
if [ "${counter}" -eq 0 ]; then
    /etc/init.d/keepalived stop
fi
chmod 755 /etc/keepalived/mysql.sh

启动

/etc/init.d/keepalived start
正在启动 keepalived:                                      [确定]

2.3 测试


# 查看两台机器的网卡情况
# 因为我们给机器1的priority要大一些,所以机器1的网卡上可以看到VIP的信息
inet VIP/32 scope global ens192

下面我们试着让机器1的mysql宕机,宕机之后我们再看一下VIP是在哪台机器上

# 这里模拟的比较简单,直接将3307端口干掉了
lsof -i:3307 | awk 'NR!=1{print $2}' | xargs kill -9

之后如果你的配置一切正常,再次查看两台机器的网卡情况后,如果在机器2上看到VIP的信息,那么到这里就说明你的双主+keepalived的高可用配置成功了。你的用户只需要访问VIP的地址,对IP的漂移是无感知的。这样一来,等到下次你的机器挂掉一台,就不用再去进行手动切换了。

三、总结


本文章介绍了MySQL最普通的一种高可用方案,优点很明显,但是回过头来,我们也要去思考是否存在缺点。下面是小编个人总结的优缺点:

优点:

  • 部署方便,成本低
  • 对用户无感知,不用再让运维人员手动进行切换

缺点:

  • 脚本检测不完美。想要写出一份完美的检测脚本是很困难的,简单地去判断端口是否有服务是不够,倘若数据库假死怎么去避免呢?
  • 数据的延迟。主从同步在大量数据写入时宕机,怎么保证数据的一致性呢?

所以,这么看来,任何一种方案都不是完美的,继续加油学习吧!

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

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

相关文章

【人工智能】基于五笔字型规范和人工神经网络的简中汉字识别【六】

识别网络训练与测试 一、配置文件的修改二、修改训练模型参数三、训练自己的识别模型四、测试识别模型一、配置文件的修改 前期工作铺垫了这么久,终于可以正式进正题了。 训练目标检测模型需要修改几个文件,我们这里为了不破坏原本项目结构,采用在相同目录下复制一份不同名文…

linux下后台运行python脚本

这几天工作中遇到一个问题,后台运行python脚本,存储输出日志到linux系统中,因为在脚本中用了大量的print,导致输出很多信息,服务器内存占满了光是log就有120G,因此写下这篇博客,记录后台运行pyt…

数据防篡改之主机加固篇

​ 随着物联网技术和互联网技术的日益发展,勒索病毒、工控安全、产线作业都面领着极大的威胁。智慧互联正在成为各个行业未来的发展方向,智慧互联包括物联网、万物互联,机器与机器,工业控制体系,信息化,也…

Redis之乱七八糟

redis过期时间 注意事项 DEL/SET/GETSET等命令会清除过期时间   在使用 DEL、SET、GETSET 等会覆盖key对应value的命令操作一个设置了过期时间的key的时候,会导致对应的key的过期时间被清除。 INCR/LPUSH/HSET等命令则不会清除过期时间   而在使用 INCR/LPUSH…

【Git】 常用命令速查

一、 Git 常用命令速查git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r 查看远程所有分支git commit -am "init" 提交并且加注释 git remote add origin git192.168.1.119:ndshowgit push origin ma…

人工智能 - 朴素贝叶斯、案例:文本情感分析

朴素贝叶斯:用概率去预测 1、朴素贝叶斯介绍 朴素:指的是,特征之间相互独立 拉普拉斯平滑系数,每个种类都加k,避免条件概率出现0 区分情书与作业的例子,用关键词: 是情书的概率更高&#xf…

基于Transformer的多变量风电功率预测TF2

Transformer目前大火,作为一个合格的算法搬运工自然要跟上潮流,本文基于tensorflow2框架,构建transformer模型,并将其用于多变量的风电功率负荷预测。 实验结果表明,相比与传统的LSTM,该方法精度更高&…

干货 | 背熟这些 Docker 命令,面试再也不怕啦~

我们下载 Docker 镜像的时候,默认会访问 Docker 网站,而 Docker 网站是在国外部署的,距离比较远下载速度特别慢。我们可以通过设置加速器的方式来加速 Docker 镜像下载的速度。下面将描述一下使用加速器的步骤:1.我们这里选择的是…

ORB-SLAM2 --- MapPoint::Replace函数

目录 1.函数作用 2.code 3.函数解析 1.函数作用 替换地图点,更新观测关系。 2.code void MapPoint::Replace(MapPoint* pMP) {// 同一个地图点则跳过if(pMP->mnIdthis->mnId)return;//要替换当前地图点,有两个工作:// 1. 将当前地图点的观测数据等其他数…

数据报告:[数字健康]如何引发美国医疗深度变革

本文由前嗅数据研究院出品 在美国,全球疫情的不断发展扩大,促进了其医疗行业的变革与创新,以“Digital Health”(数字健康)为关键词的医疗领域正在发⽣⾰命性的变化。本文着重介绍“Digital Health”的特点及其在各领域…

【博学谷学习记录】超强总结,用心分享|kafka如何保证数据不丢失

文章目录数据在Kafka中的流转阶段一:生产者如何保证数据不丢失ACK机制阶段二:Broker端如何保证数据不丢失磁盘副本阶段三:消费者如何保证数据不丢失消费者提交偏移量数据在Kafka中的流转 阶段一:生产者如何保证数据不丢失 ACK机制 生产者将数据生产到Broker后,Broker需要给一个…

学习python之——python入门

欢迎来到 Python 入门的学习之旅! Python 是一种高级编程语言,它是一种解释型语言,有着丰富的库和大量的第三方模块,能够用于许多不同的编程任务。无论你是想要学习 Python 进行 Web 开发,还是想用它来进行数据分析和…

Windows 远程桌面 Ubuntu

参考 Windows远程桌面工具连接Ubuntu系统使用总结_CHH3213的博客-CSDN博客_远程连接ubuntu 开启ssh服务(非必须 查看ssh是否已经开启 sudo ps -e | grep ssh 如果最后返回是sshd,证明ssh已经开启,跳到第四步 第二步,如果没有…

excel处理时间数据

目录excel中的日期中同时提取年月,可使用YEAR函数提取年份,MONTH函数提取月份,然后使用合并函数“&”将年月合并即可。方法步骤如下: 1、打开需要操作的EXCEL表格,在任意空白单元格上面的函数编辑框中输入“YEAR&…

自动化 HR 流程,实现人力资源部门无纸化

自动化 HR 流程,实现人力资源部门无纸化 如果公司使用手动流程,人力资源部门则可能是纸张最密集的部门之一。使用像Google Docs或Dropbox这样的免费文件共享应用程序可能会感觉比使用纸张更上一层楼。但是,这些应用程序旨在在某个时间点启用…

python居然还能画出这么精美的魔法少女,惊我一整年

前言 大家早好、午好、晚好吖 ❤ ~ 对于上面漫小姐姐图,大家觉得好不好看呢 这种极简的线条画出超具魅力的小姐姐图 简直不要太击中小心脏 接下来,我们就用python来实现一下,画出一个好看的少女~ 代码展示 导入模块 import turtle as te…

VIVADO异步时钟域约束(groups)

异步时钟域约束 VIVADO异步时钟约束之实例演示 操作方法: 1、先在synthesis 中打开 report clock interaction ,可以看到没有约束的异步时钟之间用红色标记; 2、在synthesis中打开edit timing constraints 设置异步时钟; 3、异…

QGroundControl 添加自定义FactGroup

基于QGC4.1.2版本进行添加,首先由于QGC的原来对FactGroup定义均写在Vehicle.h和Vehicle.cc两个文件中,个人感觉都写在Vehicle文件下回导致文件过大,所以将FactGroup定义进行分离,写在各自的.h和.cc文件下,然后在Vehicl…

运动无线耳机哪个品牌比较好、运动效果最好的运动耳机推荐

近几年,运动耳机愈发获得消费者的认可。它拥有着更牢固的佩戴方式,即便是长时间佩戴、也拥有更舒适的体验。因此,运动耳机也受到运动、健身人群的喜爱。但是不少小伙伴跟我反映如何选择一款体验出色的运动耳机,也成为了当前不少运…

计算机sci期刊拒稿两次,重新投稿接受的概率大吗? - 易智编译EaseEditing

重新投稿需要修改的幅度很大,而且就算能接受,时间也会非常久。 要是不着急用可以试试: 根据审稿意见一条条的来修改; 增加新的参考文献; 如果是“修改后重投”,可能需要注意以下问题: 1. 与…