keepalived mysql双主架构图_基于MySQL双主的高可用解决方案理论及实践

MySQL在互联网应用中已经遍地开花,但是在银行系统中,还在生根发芽的阶段。本文记录的是根据某生产系统实际需求,对数据库高可用方案从需求、各高可用技术特点对比、实施、测试等过程进行整理,完善Mysql高可用方案,同时为后续开展分布式数据库相关测试做相应准备。

7c606f64da3988b7b1f2ac595b9b555a.png

存储复制技术:传统IOE架构下,常用高可用方案,靠存储底层复制技术实现数据的一致性,优点数据安全性有保障,限制在于是依赖存储硬件,实施成本较高。

keepalived+双主复制:两台MySQL互为主从关系,即双主模式,通过Keepalived配置虚拟IP,实现当其中的一台数据库故障时,自动切换VIP到另外一台MySQL数据库,备机快速接管业务来保证数据库的高可用。

MHAMHA部署在每台mysql服务器上,定时探测集群中的master节点,当master出现故障时,它可以自动将最新的slave提升为新的master,然后将所有其他的slave重新指向新的master,优点在最大程度保证数据的一致性的前提下实现快速切换,最少需要3台服务器,存在数据丢失的可能性。

PXC Percona eXtra Cluster是Percona基于galera cluster封装的集群方案。不同于普通多主复制,PXC保障强一致性和实时同步,故障切换更快。但是也需要3个节点,配置相对复杂,对性能也稍有影响。

除了上述方案外,还有MMM、Heartbeat+DRBD等高可用方案,此处不做详细介绍。

综合评估下,本次实施采用了 keepalived+mysql双主实现数据库同城双机房的高可用。MySQL版本为: 5.7.21。操作系统:Red Hat Enterprise Linux Server 7.3。

配置过程如下:

Mysql-master1: IP地址1     --以下简称master1

Mysql-master2: IP地址2     --以下简称master2

Mysql-vip :     VIP地址     --应用连接使用

Mysql复制相关概念描述:

1、 Mysql主从复制图示:

bdcb1d24265c878a99cd2ad6b273145e.png

2、 Mysql主从复制过程描述:

(1)master记录二进制日志:在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务写入二进制日志。在事务写入二进制日志完成后,master通知存储引擎提交事务。

(2)slave将master的binarylog拷贝到自己的中继日志:首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事务,如果已经同步了master,它会睡眠并等待master产生新的事件。I/O线程将这些事务写入中继日志。

(3)SQL slave thread处理该过程的最后一步:SQL线程从中继日志读取事务,并重放其中的事务而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

主主同步就是两台机器互为主的关系,在任何一台机器上写入都会同步至备端。

为了便于后续数据库服务器的扩展,且在整个复制环境中能够自动地切换,降低运维成本,引入了当前主流的基于Mysql GTID的复制特性,工作原理及优缺点简介如下。

3、 GTID工作原理简介:

(1)    master更新数据时,会在事务前产生GTID,一同记录到Binlog日志中。

(2)    slave的I/O线程将变更的binlog写入到本地的relay log中。

(3)    slave的sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。

(4)    如果有记录说明该GTID的事务已经执行,slave会忽略。

(5)    如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。

(6)    在解析的过程中会判断是否有主键,如果有就用索引,如果没有就用全部扫描。

4、  GTID优点:

(1)  一个事务对应一个唯一的ID,一个GTID在一个服务器上          只会执行一次。(2)  GTID是用来替代传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置。

(3)    减少手工干预和降低服务故障时间,当主机宕机之后会通过软件从众多的备机中提升一台备机为新的master。

5、  GTID也存在一些限制:

(1)    不支持非事务引擎。

(2)    不支持create table … select 语句复制(主库直接报错)。

(3)    不允许一个sql同时更新一个事务引擎表和非事务引擎表。

(4)    在一个复制组中,必须要求统一开启GTID或者是统一关闭GTID。

(5)    开启GTID需要重启(5.7版本除外)。

(6)    开启GTID后,就不再使用原理的传统复制方式。

(7)    不支持create temporary table 和 drop temporary table语句。

(8)    不支持sql_slave_skip_counter。

28ec296da04fb79f9bf25bf926fd1f26.png

  • 一、配置两台mysql主主同步模式:

前置条件:

主备两个节点使用行内统一的安装部署脚本安装mysql5.7.21介质(略)

Master1端创建应用的数据库(略)

1、 修改MySQL配置文件

参考相关配置规范,分别设置master1、master2的my.cnf文件,

其中server-id参数设置为不同值;

由于后续keepalived会挂起VIP,应用通过VIP连接数据库,为了避免应用程序无法通过VIP访问,需将两个节点的bind-address参数注释掉;

2、 设置master1端自动半同步模式

Mysql的同步模式主要有如下3种:

a.     主从同步复制:数据完整性好,但是性能消耗略高;

b.    主从异步复制:性能消耗低,但容易出现不一致;

c.     主从半自动复制:介于上述两种之间,既保持了数据的完整性,又提高了性能;

基于上述特性,建议采用半自动同步模式,由于后续要配置为双主模式,因此任一节点其角色既为master又为slave,因此相关的master/slave插件要同时配置,过程如下。

(1) 首先查看库是否支持动态加载(默认都支持)

42b9c64e8571304738576c0e68471b6c.png

(2) 主从库上分别安装插件

作为主库,安装插件semisync_master.so

b98647948c04133363b3b69754ccd49a.png

作为从库,安装插件semisync_slave.so

f2a4829e00afc0227cad42ecdeff2695.png

(3) 安装完成后,从plugin表中能够看到刚刚安装的插件

96b07058b75a5a6a4056ddb43216e4ce.png

(4) 分别打开主从库半同步复制

908fa8d835968c285a53f868f59cff3d.png

同时添加到各自的my.cnf中,在后续数据库实例重启时自动加载该配置。

4c9d2eed052d87ef82365c22220041e5.png

此时查看状态还没有启动

2046a7c27e40a930ea62bb075a9b7b1e.png

(5) 两个节点分别启动IO进程

66e91721098d8434bf7ad88e2f54cfc2.png

(6) 查看半同步状态

2a145fe17acb787ce177ea53f6f0404c.png

3、 将master1设为master2的主服务器

(1)在master1主机上创建授权账户,允许在master2主机上连接

30c50e113dfcb9dd16d44da16e3b57a4.png

(2)将主库master1数据导出

7f4facedd466d2b93c625558cd3038a7.png

(3)将master.sql传输到master2上并导入

bd53d8cdd932321fbb8755c16aad3b0f.png

(4)在master2端将master1设置为自己的主库,并开启slave功能

24b9c6cab19ac2bb38efebc0cd53fead.png

在master2上查看slave状态

b9ccd216f90e5bf32d4d45ccd2f397fc.png

至此master1到master2的主从复制关系已经建立完成。

4、 将master2设为master1的主服务器

在master1上执行

75828e486f4714c9578fae02b902f111.png

在master1上查看slave状态

961735abe869e4d7cf387ab3a9e7e554.png

  • 二、配置keepalived+Mysql双主的高可用:

1、keepalived相关概念说明:

keepalived是集群管理中保证集群高可用的一个软件解决方案,其功能类似于heartbeat,用来防止单点故障

keepalived是以VRRP协议为实现基础的,VRRP全称VirtualRouter Redundancy Protocol,即虚拟路由冗余协议。

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

keepalived主要有三个模块,分别是core 、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。同时为了避免出现脑裂,应关闭防火墙或者开启防火墙但允许接收VRRP协议。

2、keepalived的安装配置

(1)配置本地yum源,在master1和master2两台服务器上安装keepalived的相关依赖包Kernel-devel/openssl-devel/popt-devl等

配置指向rhel-7.5.iso的yum本地源,步骤略

注意:如不知道keepalived需要哪些依赖包,可到下载后的源码解压目录下查看INSTALL 文件内容,安装需要的依赖包,源码安装任何一个软件都要养成查看源码包文档的习惯,比如INSTALL,README,doc等文档,可以获得很多有用的信息。

(2)在两台mysql上解压缩并编译安装keepalived

197d431cbb11f845af51ff1ec1e55475.png

(3)master1、master2上分别配置keepalived.conf

43ae2640ea22e83dd3e5a7f5d91667bc.pngdce7314572c0e74eaff01053ed762802.png

注意上图红色字体中两个节点配置相同处及差异。

说明:keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域:

·         global_defs:主要是配置故障发生时的通知对象以及机器标识。

·         vrrp_instance:用来定义对外提供服务的VIP区域及其相关属性。

·         virtual_server:虚拟服务器定义

(4)同时两个节点上都需要添加检测脚本

0ba1a828b6b432af123e9c214adb7e81.png

作用:是当mysql停止工作时自动关闭本机的keeplived服务,从而实现将故障主机踢出热备组,因每台机器上keepalived只添加了本机为realserver,所以当mysqld正常启动后,我们还需要手动启动keepalived服务。

(5)分别启动两个节点的keepalived服务

e555847b01807f726d7d7db262f74b5e.png

检查两个节点keepalived启动进程

2167e8dd2f37ac7d26a3c8bfd79417e3.png021fe997005ee667219308c8ac79716f.png

检查两个节点的vip挂载情况,略

(6)主备机故障切换测试

停止master2的mysql服务,看keepalived健康检查程序是否会触发脚本,自动进行故障切换,步骤略

查看master1节点的VIP挂载情况,验证是否实现了自动切换,步骤略

说明在master2服务器的mysql服务发生故障时,触发了脚本,自动完成了切换。

(7)现在我们把master2的mysql服务开起来,并且keepalived的服务也需要启动。

即便master2的mysql服务和keepalived服务都重新开启了,master1仍然是主master了,master2未对主master的权利进行抢夺,说明设置的nopreempt参数生效了,为了保证群集的稳定性,生产环境不允许抢占配置,只有当master1的mysql服务坏掉的时候,master2才会再次成为主master,否则它永远只能当master1的备份。(注:nopreempt一般是在优先级高的mysql上设置)

  • 三、基于sysbench工具测试

  • 主主同步效率测试:

Sysbench是一个模块化的、跨平台、多线程基准测试工具,可用于评估数据库负载情况,通过sysbench命令配置IP地址、端口号、用户名、密码连接到指定的数据库db1中,创建多个表,并快速插入指定条数的记录,观察主备库同步效率

(1)  下载开源工具sysbench-0.4.12.14.tar.gz,放置在相应目录下并解压

(2)  使用iso配置本地yum源并安装Sysbench如下的依赖包(步骤略):autoconf/automake/cdbs/debhelper(>=9)/docbook-xml/docbook-xsl/libmysqlclient15-dev/libtool/xsltproc

(3)  编译sysbench

编辑配置文件/etc/ld.so.conf中添加mysql lib目录/mysql/app/5.7.21/lib,并执行命令ldconfig生效

08a85a06ad1531e8da76a742c1b4c297.png

(4)  执行sysbench压测

使用sysbench工具向主节点的db1数据库中创建5张表,并且每张表分别插入10万条记录d59c50c1854f076fca5f5a8eef127bf8.png

同时观察备机同步效率

几个重要的参数说明:

e556dd78a5686a6981e3b3e3dcfab9ec.png

B、半自动同步模式、异步模式切换测试

(1)  检查主备同步状态,及同步参数设置

ca887a562778d4ad35426cd441eaa413.png

rpl_semi_sync_master_enabled参数表示启用半同步模式;

rpl_semi_sync_master_timeout参数单位为毫秒,表示主库事务等待从库返回commit成功信息超过10秒就降为异步模式,不再等待从库,等探测到从库io线程恢复后,再返回为半自动同步;

rpl_semi_sync_master_wait_no_slave参数表示事务提交后需要等待从库返回确认信息;

(2)  将slave的io线程停止

922517d8a3c16095d177f341be11fb2f.png

dabd635be3db1ad1b715d26735dc5908.png

(3)  使用sysbench向master写入少量的数据,本例创建一张表,并插入10条记录,命令包装在1.sh测试脚本中

668538b526f55ba95f83bf4ab20e6dee.png

通过记录的时间戳发现,master在等待了slave10秒无响应,自动切换为异步模式,将数据写入本地。

(4)  Slave启动io线程,数据自动追平

 至此MySQL主主复制配置完成,运行在半自动同步模式,通过keepalived实现Mysql的HA高可用。

  • 四、监控、备份配置

上线后应符合统一的标准监控策略,添加备份协议对数据进行周期备份并保存到带库中,以及定期的数据恢复测试。

由于是靠keepalived实现的高可用,还应将如下资源添加到监控管理平台:

1、 对每台数据库主机的3个keepalived进程进行监控;

2、 对主备节点的io线程、sql线程工作状态进行监控;

615cc27bf2463bb8b0669abb86020dc9.png

本文仅描述对特定需求的方案选择、实施过程进行整理,其要点如下:同城跨机房基于GTID的双主复制、半自动同步模式保护数据、keepalived实施快速切换,上线后还应加强对运行状态的监控、数据备份、以及完善运维手册,本文仅起到一个抛砖引玉的作用,不同的系统架构可结合特定的需求,制定适用的分布式及高可用方案。开源软件和分布式数据库等技术在同业处于起步阶段,随着业务转型,高并发、大数据量、以及联机事务处理的交易型应用需要,对传统业务架构提出了诸多要求,也对底层数据存取、处理提出了更高的要求,而基于mysql分库分表的分布式数据库解决方案也被广泛使用,我们也会逐步加大对相关技术的探索,希望各位同学多提宝贵意见。

44a4cf62f7e7e293ab74a51987f90ce9.png

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

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

相关文章

小爱同学100个奇葩回复_小米小爱音箱Pro开箱评测,看到的不仅是全面升级更是小米loT的高速发展...

Hello,大家好,这里是科技能量站,今天有何大家见面了,本期小编给大家带来的是小米最新推出的小爱同学“小米小爱音箱Pro”,小米在前两年推出了自家的小米AI音箱,那一刻起,智能语音人工助手在小米…

你了解的继承方式html,法定继承、遗嘱继承、遗赠,这三种房产过户方式你了解多少?...

在房产过户的中,与继承相关的方式有三种:法定继承、遗嘱继承和遗赠。这三种过户方式其实是有较大不同的,下面我们就来具体分析下,希望能对需要的朋友有帮助。过户在房产过户中,与继承相关的有三种,分别是法…

wedo2.0编程模块介绍_福特福克斯TCM重新编程操作

适用范围支持车型/年款:新福克斯 2011 – 2018 1.6L/2.0L DPS6变速箱 车型嘉年华 2013 1.5L DPS6变速箱 车型翼博 2013 – 2016 1.5L DPS6变速箱 车型功能介绍升级ECU版本或者对空白ECU写入数据, PAD Ⅲ请使用有线连接进行编程, 测试时保证车辆电瓶电压充足条件要求…

必须重启计算机才能关闭用户账户控制,Win10系统怎么彻底关闭用户帐户控制?...

大多是win10系统用户都知道,微软所推出的用户帐户控制能够限制一些病毒程序启动,从而较好的保护我们的电脑安全,以达到降低win10系统中毒的风险。可是每当我们运行一个程序的时候系统总会出现提示,感觉很烦,那么怎么永…

三菱plcfx5u指令手册_从西门子200的PLC程序来看三菱FX5U的PLC程序

小型PLC系统中西门子200系列和三菱的FX系列是应用的比较多的,作为工控行业的工程师是很有必要明白他们之间的一些不同点的,特别是从程序上来说,因此来写一篇文章,简单的聊聊他们在编程上的一下不同!西门子PLC和三菱PLC…

cron 每10分钟执行一次_早餐儿子最爱它,简单卷一卷,10分钟做一大盘,三天两头吃一次...

早餐儿子最爱它,卷一卷特简单,10分钟做一大盘,三天两头吃一次。俗话说得好“早餐要吃好,午餐要吃饱,晚餐要吃少。”可见,早餐的重要性,一般早餐在一日三餐中占30%的热量,碳水化合物、…

计算机刚过国家线能调剂到哪些学校,2020考研:刚过国家线好不好调剂?这4个调剂策略!考生要知道...

原标题:2020考研:刚过国家线好不好调剂?这4个调剂策略!考生要知道近日,2020年全国硕士研究生基本分数线已经公布。对于340万左右的考研人来说,心中的那块石头终于有了着落,不管考得好或者不好&a…

生命银行怎么样_减脂就像是从“脂肪银行”中提款,想要成功,你要做到这两点...

本期内容,我们来深刻的聊一聊减脂,减肥。食物为什么会让你长胖?怎样快速的瘦下来?1 食物能量的储存人是铁,饭是钢,一天不吃饿得慌!食物是维持人体正常运转的唯一能量来源,被我们吃进…

二次开发_企业ERP系统二次开发问题的探讨分析

新朋友点上方蓝字“ERP之家”快速关注导读:根据笔者多年在企业中实施及推进ERP,概的实战经验,阐述了ERP系统二次开发的必然性和二次发开的成因及存在的风险,提出如何合理地规避二次开发所带来的风险,值得为实施ERP系统…

西门子逻辑运算指令_西门子S7-200 SMART逻辑运算指令应用实例

本篇我们通过一个实例来讲解一下西门子S7-200 SMART逻辑运算指令在程序中的使用。要求将VW2和VW4中的数据进行逻辑与后,送到VW6。首先我们双击电脑桌面上的STEP7-Micro/WIN SMART图标,打开编程软件,从指令树的位逻辑中选择一个常开触点拖放到…

强行终止python_中国的真实离婚率:一点也不高,反而低的惊人 | 用python计算离婚率...

3600字。现在的网络上,似乎普遍有一种共识,那就是中国的离婚率高的吓人。 各种耸人听闻的标题,比如什么“北上广深等一线城市离婚率高达40%”、“天津的离婚率高达70%”……搞得人心惶惶。有网友对此提出质疑,说,我怎么…

单片机拼字程序怎么做_餐饮怎么用微信小程序?餐饮行业怎么做小程序

随着移动互联网的发展,互联网餐饮这种新型餐饮模式已经发展到了很成熟的地步。很多餐厅都会觉得,自己的活动很有吸引力,但是推广力度不够,不能迅速营造人气,提升收益。对于餐饮人来说,微信是主要的传播渠道…

测试金士顿固态硬盘软件,金士顿固态硬盘优化工具(Kingston Toolbox)

金士顿固态硬盘优化工具KingstonToolbox是金士顿官方出品的SSD优化工具,通过软件能够对金士顿的固态硬盘进行优化设置,同时软件还支持对硬盘进行固件升级,有需要的可以下载使用。金士顿固态硬盘优化工具(Kingston Toolbox)是金士顿官方出品的…

绝地求生测试服画面优化软件,绝地求生正式服设置详解 教你调校最完美的画质...

在绝地求生新版本正式上线之后,蓝洞对于绝地求生的两张地图都做了比较大的优化,令低配玩家的游戏帧数都有了比较大的提升,而此前普遍反映的掉帧问题也得到了不小的改善。不过,由于游戏自身的原因(场景较大,玩家较多&am…

小学计算机画线反思,小学《我们身边的线条》教学反思

小学《我们身边的线条》教学反思《我们身边的线条》教学反思线条课从第一册开始,一直贯穿整个小学美术课程,由简到繁,由易到难。《我们身边的线条》一课,就是要引导学生发现生活中到处都有的线条。线条是绘画造型的基本元素&#…

.net 实时通信_【WebSocket】实时多人答题对战游戏

本文公众号来源:后端技术漫谈 作者:蛮三刀把刀前言前两章教程,我们使用WebSocket的基础特性打造了一个小小聊天室,并在第二章对其进行了集群化改造。系列教程回顾:手把手搭建WebSocket多人在线聊天室【多人聊天室】Web…

磊科路由虚拟服务器设置,磊科路由器虚拟转发服务设置的方法

磊科路由器虚拟转发服务设置的方法磊科路由的虚拟 MAC 地址的分配功能实现了不同主机将流量发送给备份组中不同的路由器,但为了使备份组中的路由器能够转发主机发送的流量,还需要在路由器上创建虚拟转发器,每个虚拟转发器都对应备份组的一个虚…

css动画执行保持forwards,css3动画如何在动作结束时保持该状态不变

animation-fill-mode : none | forwards | backwards | both;none:不改变默认行为。forwards :当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)。backwards:在 animation-delay 所指定的一段时间内,在动画显…

anylogic中如何构建复杂网络_如何对复杂网络建模所需要的数据进行预处理

上一篇文章介绍了如何构建Space L实体网络的模型,这一篇是对上一篇文章的一个补充优化。以下部分摘自上一篇文章:邢八宝:如何建立复杂网络实体网络的Space L模型?​zhuanlan.zhihu.com地铁网络,一般都有三四百个节点&a…

消息存储服务器吗,消息服务器 消息存储

消息服务器 消息存储 内容精选换一换华为云分布式消息服务帮助中心,为用户提供产品介绍、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用分布式消息服务。消息服务器 消息存储 相关内容联邦学习部署服务的FL-Client接口…