MySQL双主+keepalived实现高可用

mysql+keepalived实现高可用+主主复制模式

为了解决mysql的单点故障问题,衍生出很多mysql的高可用方案:

keepalived+双主、MHA、PXC、MMM、Hearbeat+DRBD等,比较常用的一般是keepalived+双主,MHA和PXC

在此搭建实验环境,实现keepalived+mysql双主模式。

实验思路:

两台MySQL互为主从关系(双主),通过keepalived配置虚拟vip,实现当其中的一台MySQL数据库宕机后,应用能自动切换到另外一台MySQL数据库,保证系统的高可用。

keepalived的概念:

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

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

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

keepalived主要有三个模块:

core模块:主要负责主进程的启动,维护以及全局配置文件的加载和解析

check模块:主要负责健康检查,常见的健康检查方式有:

(1)、TCP_CHECK:工作在四层

(2)、HTTP_GET | SSL_GET :向指定的URL执行http请求,将得到的结果用md5加密并与指定的md5值比较看是否匹配,不匹配的从服务器池中移除。

(3)、misc_check:用脚本来检测方式

(4)、smtp_check:用来检测邮件服务

vrrp模块:实现vrrp协议。

实验环境:

OS:centos7 x86_64

Mysql版本:mysql5.7.13

Mysql-vip地址:192.168.1.100

Mysql-master1:192.168.1.101

Mysql-master2:192.168.1.102

MySQL主主同步:

(1)、master将更新的数据存入Binary log(二进制日志)中。

(2)、slave启用一个I/O线程负责将binary log中变化的数据拷贝至slave的relay log(中继日志)中。

(3)、slave启用SQL线程,重放relay log中的事件而更新slave数据,使其与master中的数据一致。

主主同步就是两台机器互为主从关系,在任何一台机器上写入都会同步

实现主主同步的思路:

(1)、分别修改mysql配置文件,启动二进制日志,分别开启relay-log日志。修改server-id值,注两台机器不可相同。

(2)、分别创建用于复制数据的用户,并授权

(3)、查看binlog日志信息和当前binlog的位置信息。

(4)、分别在互为从服务器上执行change master to操作,用于更新当前位置开始的数据。

在实现主主同步中,需要注意的事项为:

(1)、mysql中有自增长字段,需要在配置文件中指定自动增长值和起始值,两台不可唯一,防止自动增长列的冲突。

例如:

在一张表有id列,设为自动增长,默认值为1,设为主键,当在同步数据中,因其中一台master故障,无法实时同步此时的数据,另一台会继续写入数据,当修复后,此时写入数据id=3,同步至另一台服务器时,因设置了自动增长,会发现id=3的列已经有了,此时同步就会出错,所以一般,第一台服务器设置增长值为偶数,第二台服务器增长值为基数值,这样就不会造成冲突。

配置参数:

auto-increment-increment = 2 :表示自增长字段每次递增的量。默认值为1

auto-increment-offset = 1: 表示起始值,可以将两台服务器的起始值设置为不一样,就可以避免两台服务器数据同步时出现主键冲突。

注:可以在my.cnf文件中添加 binlog_do_db=’数据库名’ :用来指定要同步的数据库。

接下来就是具体实施此方案的流程:(在虚拟环境中进行测试)

实验步骤:

防火墙添加3306端口,将ip地址规划完成!

1、在master1上修改mysql配置文件:

首先确保mysql服务正常启动,防火墙添加3306端口:

修改配置文件

vim  /etc/my.cnf

master-2的配置:

修改mysql配置文件:

vim  /etc/my.cnf

分别在两台机器上执行重启mysqld服务

2、授予用户权限,用于同步数据,并查看当前binlog日志信息(master-1)

3、在master-2上执行change master to操作,指定同步master上此位置的数据信息,并启动slave

查看同步状态:

如果发现状态不是以上所标记的状态信息,根据下图中标记位置,查看错误信息是什么,根据错误来判断具体的问题出在哪里?

一般问题为:

确保两台主机的通信正常;

确保防火墙问题;

如果为克隆机器,需修改uuid值。vim /usr/local/mysql/data/auto.cnf,在原有的基础上,将uuid随意改动一个值即可。

4、以上只实现了单主从复制,即master-1为主,master-2为从,所谓主主复制就是互为主从,接下来还是根据此前的步骤,设置master-2为主,master-1为从,无非就是在master-1上执行change master to操作,同步master-2的数据。

(1)、在master-2上创建授权用户,用于同步数据,并查看当前binlog日志信息;

(2)、在master-1上执行change master to操作,并启用slave

查看同步状态:

测试:

在master-1上创建数据库test_db,创建表tb1,插入数据zhangsan,lisi,在master-2上查看是否同步。

在master-2上查看:

在master-2上向test_db.tb1表插入一条数据wanwu,查看master-2是否同步:

在master-1上查看:

master-1上也同步了数据,从实验中分析,无论master-1如何更新新的数据,id列的值永远是基数,这就保证了当master-2因故障再次修复后,同步数据时防止主键ID列冲突的问题!

注:

若主mysql服务器已经存在,只是后期才搭建从mysql服务器,在配置数据同步前应先将主mysql服务器要同步的数据拷贝至从mysql服务器上,才可以开始执行同步操作。

将主mysql服务器的数据拷贝至从mysql服务器上,可以使用以下方法:

(1)、使用mysqldump备份数据,将数据拷贝至从服务器上恢复数据。

(2)、使用xtrabackup功能备份数据,将数据拷贝至从服务器上恢复数据。

小结:

此上已经实现主主复制功能,但是依然存在单点故障的问题,所以以下实验通过keepalived软件实现主主的高可用功能。

二、keepalived的安装配置:

1、在master-1和master-2上分别安装软件包keepalived

(1)、在master-1和master-2上分别使用yum安装内核开发包kernel-devel 以及openssl-devel ,popt-devel等支持库

(2)、编译安装keepalived

注释:

在centos6.5中,编译安装时,使用指定的linux内核位置对keepalived进行配置,使用此参数

--with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64,并将安装路径指定为根目录,这样就无需额外创建连接文件了。

在centos7中,不需要指定linux内核位置。

执行make install操作之后,会自动生成/etc/init.d/keepalived脚本文件,但还需要手动添加为系统服务,使用service、chkconfig工具对keepalived进行管理。

在master-2上也执行相同的操作,进行编译安装keepalived

2、上述已介绍过keepalived通过组播地址224.0.0.18发送报文,用于告知本机的存活信息,如果开启了防火墙,需要添加规则,在centos7中创建富策略规则:

在master-2上也执行相同的操作,添加防火墙规则。

3、修改keepalived配置文件(修改前,建议先做个备份)

keepalived.conf配置文件注释:

在master-1主机上具体的配置信息如下:(无用的配置参数可以删除)

创建mysql.sh脚本,并添加执行权限

启动keepalived服务

4、master-2主机上的keepalived.conf文件的修改

同上,创建/etc/keepalived/bin/mysql.sh脚本文件,添加执行权限

启动keepalived服务

5、测试:

在master-1和master-2上分别执行 ip a命令,查看master-1和master-2对vip(群集虚拟ip)的控制权

(1)、master-1上查看

(2)、master-2上查看:

master-2对VIP地址无控制权,此时为备用状态。

(3)、将master-1的mysql服务停掉,查看keepalived.conf配置文件中定义的脚本,是否顺利执行,将keepalived服务停止,master-2将成为主服务器

keepalived已成功被停止掉

在master-2上查看,是否已为主服务器,拥有vip地址的控制权

此时master-2已为主服务器。

(3)通过客户端测试:(mysql的高可用)

在客户端使用mysql命令通过vip地址,连接mysql

需要分别在master-1和master-2上创建授权用户

在master-2上也执行此操作。

测试客户端登录:

在mysql中执行命令查看当前的server id是:

将master-1的mysql服务down掉,再次执行命令查看server id号

在客户端上查看:

说明master-2已成为主服务器,工作状态。

总结:

(1)、keepalived+mysq双主一般来说,中小型规模的时候,采用这种架构是最省事的。

在master节点发生故障后,利用keepalived的高可用机制实现快速切换到备用节点。

在这个方案里,有几个需要注意的地方:

1、采用keepalived作为高可用方案时,两个节点最好都设置成BACKUP模式,避免因为意外情况下(比如脑裂)相互抢占导致往两个节点写入相同数据而发生冲突。

2、把两个节点的auto_increment_increment(自动增长)和auto_increment_offset(起始值)设为不同值,其目的是为了避免master节点意外宕机时,可能会有部分binlog未能及时复制到slave上被应用,从而会导致slave新写入数据的自增值和原先master冲突。

3、slave节点服务器配置不要太差,否则容易导致复制延迟。作为热备节点的slave服务器硬件配置不能低于master节点

4、在mysql5.7版本中,利用多线程复制的方式可以很大程度降低复制延迟性。

时间: 2024-10-19 06:49:58

MySQL双主+keepalived实现高可用的相关文章

通过KeepAlived搭建MySQL双主模式的高可用集群系统

企业级MySQL集群具备高可用.可扩展.易管理.低成本的特点.下面将介绍企业环境中经常应用的一个解决方案,即MySQL的双主互备架构,主要设计思路是通过MySQL Replication技术将两台MySQL Server互相将对方作为自己的Master,自己又同时作为对方的Slave来进行复制.这样就实现了高可用构架中的数据同步功能,同时,将采用KeepAlived来实现Mysql的自动failover.在这个构架中,虽然两台MySQL Server互为主从,但同一时刻只有一个MySQL Ser

企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)

前言: 原理与思想 这里选用GTID主从复制模式Mysql主从复制模式,是为了更加确保主从复制的正确性.健康性与易配性.这里做的是两服务器A,B各有Mysql实例3310,两个实例间互为主从 主从复制模式采用GTID主从复制模式,在服务器A,B上配置keepalived负载均衡,通过VIP连接数据库,目的是一旦有某数据库宕机,keepalived 就会立即建VIP执行另外一台 健康的数据库实例上,实现快速切换,避免单点故障,从而保证业务的正常运行. 这里只做了 双主+keepalived  ,

heartbeat+mysql双主复制实现高可用

实验环境 一:搭建主主复制环境 1.1实验环境 两台机器事先都已经装好了MySQL单实例. IP: 10.192.203.201 10.192.203.202 端口都是3307. 二者的端口号需要保持一致,否则在最后用vip连接的时候,不能使用相同端口号连接. 1.2实验步骤 1.2.1修改配置文件 修改master1: 在[mysqld]下面添加: server-id = 1 relay-log=/data/server/mysql_3307/binlog/ZabbixServer-relay

DNS域名服务器双master+ntp时间服务器双主+keepalived企业高可用方案 附脚本

一.环境 [[email protected] ~]# cat /etc/issue Red Hat Enterprise Linux Server release 6.6 (Santiago) Kernel \r on an \m [[email protected] ~]# uname -r 2.6.32-504.el6.x86_64 角色 master-backup backup-master client ip 192.168.42.9 192.168.42.11 192.168.42.

Mysql+Keepalived双主热备高可用操作步骤详细解析

mysql+keepalived双主热备高可用的介绍: 我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.使用Keepalived,可以通过虚拟IP,实现双主对外的统一接口以及自动检查.失败切换机制,从而实现MySQL数据库的

Mysql+Keepalived双主热备高可用操作记录

环境: ubuntu18.04.2 mysql5.7.21 1 #1)安装keepalived并将其配置成系统服务.master1和master2两台机器上同样进行如下操作: 2 apt-get install libssl-dev 3 apt-get install openssl 4 apt-get install libpopt-dev 5 [[email protected] ~]# cd /usr/local/src/ 6 [[email protected] src]# wget h

Mysql+keeoalived双主热备高可用操作记录

我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.之前梳理了Mysql主从同步,下面说下Mysql+keeoalived双主热备高可用方案的实施. 1)Keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议.在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器. 2)VRRP路由器

Mysql5.7.22+Keepalived双主互备高可用集群

DB1:192.168.254.128DB2:192.168.254.129配置前进行校时操作#安装ntpdate工具yum install ntpdate -y#使用ntpdate校时(后面的是ntp服务器)ntpdate pool.ntp.org 配置mysql双主备 安装数据库链接(在主页数据库里面可以看到)http://blog.51cto.com/10158955/1926574 DB1修改配置文件(需重启)vi /etc/my.cnf#在[mysqld]添加server-id=166

keepalived + haproxy 实现web 双主模型的高可用负载均衡

1.本文的架构图: 阐述各服务器用途: 1.haproxy在本构架中实现的是:负载均衡 2.keepalived实现对haproxy的高可用 3.apache static 实现静态页面的访问 4.aoache dynamic实现动态页面的访问,图中有两个是实现负载均衡的 配置各功能模块: 一.配置haproxy和keepalived 验证: 1.当一台keepalived宕机后,VIP会不会转移到另外一台服务器 2.当一台haproxy服务出故障,VIP会不会转移到另外一台服务器 注意: 那如