mariadb+amoeba 基于GTID的双主复制+读写分离

项目中需要构建尽量满足高可用的数据库配置,目前的资源是:两台阿里云主机(A和B,centos7系统),数据库采用mariadb

首先,sharding就不考虑了,因为两台主机,主从+sharding怎么也没法分配,生产环境,用docker什么的模拟也不合适。最关键的是,最关键的是,最关键的是(重要的事情说三遍),目前没有一个十分好用的mysql系的sharding方案(包括mariadb自己的spider、amoeba等在sharding方面都有这样或那样的问题,360出品的atlas没有试,有兴趣的可以自己实验一下)。
其次,如果只做一主一从,没法保证高可用,所以采用双主互为主从的配置方案,然后利用amoeba的轮询机制保证高可用。

下面是配置过程

第一步:安装mariadb 最新的稳定版 10.0.21

创建MariaDB.repo

内容为

安装(注意大小写)

第二步:配置双主复制

修改/etc/my.cnf.d/server.conf
在[mysqld]标签下,配置以下关键参数

在做主从复制关系前,需要先明确几个变量
global.gtid_current_pos:从服务器上的当前gtid位置(只读)
global.gtid_slave_pos:从服务器gtid位置变量

可以看出@@global.gtid_current_pos ,由于数据不断写入,值是变的,而@@GLOBAL.gtid_slave_pos 由于复制关系还没有搭建,目前是空值.
一旦建立复制关系,这三个值将相等

下面分别进入两个数据库实例,添加对方为主服务器,这里以A为主,B为从为例

在A中

从库B上执行:

看到这几个值就成功了

第三步:配置amoeba读写分离

mariadb的读写分离有很多方案,相对于lua脚本什么的,amoeba比较简单直观,也不用考虑太多线程啊,安全啊之类的,只用专注于两个配置文件(amoeba.xml和dbServers.xml)就好了。
首先去sourceforge下载amoeba(看简介知道是淘宝团队出品)

然后配置dbServers.xml,这个配置文件是采用继承的机制配置各个mariadb的实例,然后用virtualpool方式配置mariadb的实例组,以及他们的协作方式

接下来配置amoeba.xml
主要修改这三个地方,指定读写实例池,defaultpool的意思是除了CRUD以外的命令执行在哪个实例

然后可以修改amoeba的用户名密码和端口号

最后,执行amoeba目录中,bin/launcher(注意后台运行)

即可访问,可以在A和B实例中,采用stop slave命令停止同步,然后创建不同的数据,使用amoeba测试读写分离了

声明:如未作说明,则本文为 渣滓洞【解旻的博客】 原创。转载务必注明出处
注意:转载须保留全文,如需修改请联系作者

本文永久地址:http://xieminis.me/?p=328