初识MariaDB之9——keepalive+GTID双主实现高可用

一、背景介绍

传统的主从复制架构下,尽管可以使用半同步的方式进行读写分离,但是主节点仍然存在单点隐患,在规模不大的情况下可以采用keepalive+双主的模式对主节点进行高可用保护,客户端通过VIP访问MySQL服务器

二、实现方式

keepalive是通过vrrp协议实现,之前有过介绍这里不多赘述,要注意的是在云主机是禁用vrrp协议的。本次实验采用CentOS7.4,数据库版本为MariaDB-10.2.14,2台MySQL服务器互为主从,172.16.10.30/24为keepalived服务的Master主机,172.16.10.40/24为keepalived服务的Backup主机,可以使用半同步的方式保证数据一致性,缺点是始终有一个服务器处于待机状态

三、实验目的

采用keepalived+双主模型对MySQL服务器做高可用,模拟A主机宕机时B主机继续对外提供服务,当A主机上线后,重新成为Master节点

四、操作步骤

1.将MasterA与MasterB互为主从

(1)编辑AB主机配置文件并启动MySQL服务

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

skip_name_resolve=ON

relay_log=mysql-relaylog

relay_log_index=mysql-relaylog

relay_log_purge=OFF

slow_query_log=ON

server-id=10

innodb_file_per_table=ON

binlog_format=ROW

log_bin=mysql-binlog

log_slave_updates=ON

gtid_strict_mode=ON

(2)在A主机上创建复制账号并导入数据库

MariaDB [(none)]> grant replication slave on *.* to 'bak'@'172.16.10.%' identified by 'bakpassword';

MariaDB [(none)]> flush privileges;

MariaDB [(none)]> source /root/hellodb.sql;

MariaDB [hellodb]> show global variables like 'gtid%';

+------------------------+---------+

| Variable_name          | Value   |

+------------------------+---------+

| gtid_binlog_pos        | 0-10-37 |

| gtid_binlog_state      | 0-10-37 |

| gtid_current_pos       | 0-10-37 |

| gtid_domain_id         | 0       |

| gtid_ignore_duplicates | OFF     |

| gtid_slave_pos         |         |

| gtid_strict_mode       | ON      |

+------------------------+---------+

(3)将B主机的Master指向A主机

MariaDB [(none)]> CHANGE MASTER TO master_host='172.16.10.30', master_port=3306, master_user='bak', master_password='bakpassword',master_use_gtid=current_pos;

MariaDB [(none)]> start slave;

MariaDB [(none)]> show global variables like 'gtid%';

+------------------------+---------+

| Variable_name          | Value   |

+------------------------+---------+

| gtid_binlog_pos        | 0-10-37 |

| gtid_binlog_state      | 0-10-37 |

| gtid_current_pos       | 0-10-37 |

| gtid_domain_id         | 0       |

| gtid_ignore_duplicates | OFF     |

| gtid_slave_pos         | 0-10-37 |

| gtid_strict_mode       | ON      |

+------------------------+---------+

(4)将A主机的Master指向B主机

MariaDB [(none)]> CHANGE MASTER TO master_host='172.16.10.40', master_port=3306, master_user='bak', master_password='bakpassword',master_use_gtid=current_pos;

MariaDB [(none)]> start slave;

此时双主模型已经构建完成,主机B之所以不用创建复制账号是因为已将A创建账号是的语句同步了过来

2.安装配置keepalived

(1)AB主机安装keepalived

(2)编辑A主机的故障转移脚本

[[email protected] ~]# vim /etc/keepalived/chk_mysql.sh

#!/bin/bash

mysqlStr=/usr/bin/mysql

hostIP=172.16.10.30

chkUser=chk

chkPassword=chkpassword

mysqlPort=3306

$mysqlStr -h$hostIP -u$chkUser -p$chkPassword -P$mysqlPort -e "show global variables like '%gtid%';" > /dev/null 2>&1

if [ $? != 0 ];then

/usr/bin/systemctl stop keepalived.service

fi

(3)编辑A主机配置文件,启动服务,让A成为对外提供服务的主机

[[email protected] ~]# vim /etc/keepalived/keepalived.conf

vrrp_script  chk_mysql {

script "/etc/keepalived/chk_mysql.sh"

interval 10

}

vrrp_instance VI_1 {

state MASTER

interface ens32

virtual_router_id 100

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

172.16.10.100

}

track_script {

chk_mysql

}

}

[[email protected] ~]# systemctl start keepalived.service

(4)编辑A主机配置文件,启动服务

[[email protected] ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

state BACKUP

nopreempt

interface ens32

virtual_router_id 100

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

172.16.10.100

}

}

[[email protected] ~]# systemctl start keepalived.service

五、效果验证

(1)在AB任意主机上创建一个可以远程管理的账号

MariaDB [hellodb]> grant all  on *.* to 'chk'@'172.16.10.%' identified by 'chkpassword';

MariaDB [hellodb]> flush privileges;

(2)再使用另一个主机通过VIP发现当前gtid_binlog_pos在B主机上,说明之前对外提供服务的是B主机

[[email protected] ~]# mysql -h172.16.10.100 -uchk -pchkpassword -P3306 -e"show global variables like '%gtid%';"

+------------------------+-----------------+

| Variable_name          | Value           |

+------------------------+-----------------+

| gtid_binlog_pos        | 0-20-42         |

| gtid_binlog_state      | 0-10-40,0-20-42 |

| gtid_current_pos       | 0-20-42         |

| gtid_domain_id         | 0               |

| gtid_ignore_duplicates | OFF             |

| gtid_slave_pos         | 0-20-42         |

| gtid_strict_mode       | ON              |

| wsrep_gtid_domain_id   | 0               |

| wsrep_gtid_mode        | OFF             |

+------------------------+-----------------+

(3)从远程节点通过VIP对数据库执行任意DML操作后,发现gtid_binlog_pos回到了A主机,说明A主机已持有VIP

[[email protected] ~]# mysql -h172.16.10.100 -uchk -pchkpassword -P3306 -e"delete from hellodb.students where stuid=11;"

[[email protected] ~]# mysql -h172.16.10.100 -uchk -pchkpassword -P3306 -e"show global variables like '%gtid%';"

+------------------------+-----------------+

| Variable_name          | Value           |

+------------------------+-----------------+

| gtid_binlog_pos        | 0-10-43         |

| gtid_binlog_state      | 0-20-42,0-10-43 |

| gtid_current_pos       | 0-10-43         |

| gtid_domain_id         | 0               |

| gtid_ignore_duplicates | OFF             |

| gtid_slave_pos         | 0-10-43         |

| gtid_strict_mode       | ON              |

| wsrep_gtid_domain_id   | 0               |

| wsrep_gtid_mode        | OFF             |

+------------------------+-----------------+

(4)停止A主机MySQL服务,模拟故障,再通过VIP执行DML操作后发现gtid_binlog_pos回到了B主机,此时B主机对外提供服务,故障已切换

[[email protected] ~]# systemctl stop keepalived.service

[[email protected] ~]# mysql -h172.16.10.100 -uchk -pchkpassword -P3306 -e"delete from hellodb.students where stuid=7;"

[[email protected] ~]# mysql -h172.16.10.100 -uchk -pchkpassword -P3306 -e"show global variables like '%gtid%';"

+------------------------+-----------------+

| Variable_name          | Value           |

+------------------------+-----------------+

| gtid_binlog_pos        | 0-20-45         |

| gtid_binlog_state      | 0-10-44,0-20-45 |

| gtid_current_pos       | 0-20-45         |

| gtid_domain_id         | 0               |

| gtid_ignore_duplicates | OFF             |

| gtid_slave_pos         | 0-20-45         |

| gtid_strict_mode       | ON              |

| wsrep_gtid_domain_id   | 0               |

| wsrep_gtid_mode        | OFF             |

+------------------------+-----------------+

(5)重启A主机MySQL服务,再重启keepalived服务,A主机重新持有VIP,此时再通过VIP执行DML操作后发现gtid_binlog_pos回到A主机,说明A主机重新持有VIP,至此所有操作完成

补充说明:

以本文为例,当A主机的MySQLd服务停止后,其keepalived服务也会跟着停止,重启MySQLd服务,keepalived服务并不会跟着启动,必须手动启动,否则主机A将无法持有VIP

原文地址:http://blog.51cto.com/arkling/2114963

时间: 2024-11-03 13:22:05

初识MariaDB之9——keepalive+GTID双主实现高可用的相关文章

企业级应用,持久层架构方案二(双主同步高可用二)

这是企业级应用,持久层架构方案的第二篇.在上一篇:企业级应用,持久层架构方案一(双主同步高可用)中.已经准备好了两台mysql数据库节点:hadoop001.hadoop002.两个节点互为主备,实现舒双主同步高可用,如何叫做双主同步高可用呢?其实要分为两个问题:一个是双主同步,互为主备:另一个是高可用.那么在上一篇中已经实现了双主互为主备,本篇通过keepalived虚拟ip实现高可用: 1.安装keepalived 1.1.hadoop001节点 #安装keepalived yum inst

keepalived+mysql双主复制高可用方案

MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了双主对外的统一接口以及自动检查.失败切换机制.联合使用,可以实现MySQL数据库的高可用方案. 实验环境:OS:centos 6.x x86_64系统MySQL版本: :mysql 5.6.22   64 位A: master :192.168.79.3 3306B: slave :192.168.

【 Linux 】Keepalived实现双主模型高可用集群

要求:    1. 两台web服务器安装wordpress,数据库通过nfs共享    2. 使用keepalived实现双主模型 环境:    主机:        系统:CentOS6.7 x64        1. node1: 192.168.2.11  node2: 192.168.2.12 vip: 192.168.2.200        service iptables stop        selinux: disabled 一.两台主机分别配置lamp架构,并使用nfs实现

基于keepalived实现双主模型高可用lvs

实验环境,使用的操作系统CentOS6.5: Director: node1:IP 172.16.103.2 安装keepalived VIP:172.16.103.20 node2:IP 172.16.103.3 安装keepalived VIP:172.16.103.30 RS: RS1:IP 172.16.103.1 提供httpd服务 RS2:IP 172.16.103.4 提供httpd服务 实验效果: 前端的两台Director运行keepalived,自动生成各自的一组lvs规则,

KeepAlived双主模式高可用集群

一.keepalived简介 keepalived是vrrp协议的实现,原生设计目的是为了高可用ipvs服务,keepalived能够配置文件中的定义生成ipvs规则,并能够对各RS的健康状态进行检测:通过共用的虚拟IP地址对外提供服务:每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器宕机,其虚拟IP地址将会被其他服务器接替(优先级决定接替顺序),实现高可用为后端主机提供服务.   二.keepalived组件 Keepalived组件介绍 core:ke

双主模型高可用负载均衡集群的实现(keepalived+lvs-dr)

实现keepalived双主模型lvs高可用集群 一.拓扑图 二.环境准备 两台负载均衡调度器,两台web服务器. 调度器A环境: VS:一张网卡 DIP:192.168.0.7/24 VIP(主):192.168.0.200 VIP(备):192.168.0.201 软件包:yum install -y keepalived ipvsadm nginx(作用:sorry-server服务) 调度器B环境: VS:一张网卡 DIP:192.168.0.8/24 VIP(主):192.168.0.

keepalived双主模式高可用工作于NAT模型下的ipvs

一.Keepalived简介 ipvs提供高可用性,能够生成ipvs规则:也可以使用脚本来帮助高可用其他应用程序,没有heartbeart重量级:主要用在高可用ipvs,及一些反向代理应用程序 . 1.拓扑图 说明:1.两个代理服务器通过VIP向外提供数据 2.两个代理服务器都可以代理后端的服务器 3.为测试方便,后端服务器至提供静态页面 2.ip规划 3.安装配置haproxy 关于haproxy的详细配置, [[email protected] ~]# cat /etc/haproxy/ha

keepalived双主模型高可用+lvs-实例

拓扑图: 环境准备: Centos6.5x86_64 关闭防火墙和Selinux node5: eth0:192.168.1.190/24   VIP:192.168.1.121/24 node1:eth1:192.168.1.191/24   VIP:192.168.1.122/24 node2:RIP:eth0: 192.168.19.2/24 node3:RIP:eth0: 192.168.19.3/24   所有节点网关/DNS都为:192.168.1.1 每个服务器的hosts文件 #

mysql5.7.24 gtid双主复制+atlas+keepalived

一环境介绍: 系统: centos7 [root@mgr01 ~]# cat /etc/hosts 10.0.0.6 pxc01 10.0.0.7 pxc02 [root@pxc02 ~]# cat /etc/hosts 10.0.0.6 pxc01 10.0.0.7 pxc02 关闭selinux:vim /etc/sysconfig/selinuxgetenforce 保证服务器时间同步: ntpdate ntp1.aliyun.com */5 * * * * ntpdate ntp1.al