由MySQL迁移到MariaDB Galera Cluster数据库集群教程

MariaDB Mar 12, 2016

介绍

这阵子在研究如何用分布式MySQL集群来加速数据库处理,发现MySQL的主-从热备或者是互为主从集群的配置实在非常麻烦,而且会有Slavelag(延迟)。虽然实际上我的站对分布式并没需求,我决定尝试一下MariaDB Galera Cluster这个开源的数据库集群解决方案。

MariaDB Galera Cluster有着诸多MySQL所没有的优点:

  • 因为是多主,所以不存在Slavelag(延迟)
  • 不存在丢失事务的情况
  • 同时具有读和写的扩展能力
  • 更小的客户端延迟
  • 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的

更重要的是,MySQL可以无缝迁移到MariaDB(基本上语法甚至是shell命令都是一样的,完全不需要更改你原本的程序,直接new mysqli()或者mysql_connect()就可以连接)。

准备

我准备教程的环境:Ubuntu 14.04

两台机子:日本软银(KVM)和香港SL(OpenVZ)

1.首先备份一下MySQL的数据库,因为需要清除所有的数据以方便后期同步后导入

用PHPMyAdmin或者Adminer导出一下你的数据库到.sql文件即可。

2.卸载MySQL-server

sudo apt-get purge ^mysql* && sudo apt-get autoremove

3.添加MariaDB的Repo到你机子的apt repo
注意:这一步的镜像地址用的是中科院开源协会的镜像,版本仅适用于Ubuntu 14.04(trusty)。你可以在这里生成你自己服务器对应的添加repo指令。

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository 'deb [arch=amd64,i386] http://mirrors.opencas.cn/mariadb/repo/10.0/ubuntu trusty main'

4.安装MariaDB Galera Cluster

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install mariadb-galera-server
sudo mysql_upgrade -p # 指令没变,检查一下是否需升级一下旧版本MySQL的配置和数据库

5.把上面的步骤重复到每一台机子

6.配置集群
编辑/etc/mysql/conf.d/mariadb.cnf
添加下面几行,参数按需修改:

binlog_format = 'ROW'
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_address = "gcomm://hk1.XXXX.ixnet.work,jp1.XXXX.ixnet.work" # 把所有节点都写进去,包括本机
wsrep_node_name = hk1.XXXX.ixnet.work # 改成你本机地址
wsrep_node_address= 2.2.2.2 # 本机IP
wsrep_provider_options='pc.bootstrap=YES' # 放止一台机子挂了另一台也一并崩溃
# 如果你的服务器开了SSL那就反注释下面这行
#wsrep_provider_options="pc.bootstrap=YES; socket.ssl_key=/etc/pki/galera/galera.key; socket.ssl_cert=/etc/pki/galera/galera.crt;"

编辑/etc/mysql/my.cnf
把监听地址从127.0.0.1改为0.0.0.0或者你其它服务器的地址

然后把配置文件拷贝到每一台机子,更改wsrep_node_address和wsrep_node_name即可。

7.启动集群
在第一台机子启动(在集群第一台机子启动的时候就要执行这个):

service mysql start --wsrep-new-cluster

假如配置正确,日志会出现“ready for connections”

然后在其它的机子直接执行

service mysql start

等到第一台机子显示已经同步(日志显示Member . (<节点名字>) synced with group.),说明另外一台服务器,即<节点名字>已经连接上了整个集群,数据开始同步。

然后导入你之前导出的.sql文件,即可完成整个集群的配置。

结尾再说两句

这个东西真的很折腾人,我参考了N份教程还弄了5个小时才测试完成,再一次证明了一份好的教程的重要性。

参考文章:

本文允许转载,遵守CC BY-NC-SA 4.0协议,转载请标明本文地址以及原作者(Howard Liu或者IX Network Studio均可)

标签

Howard Liu

在读大学生,平常使用战争雷霆提高血压和听网课使自己更快入睡。