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

MariaDB 2016年3月12日

介绍

这阵子在研究如何用分布式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均可)

Tags

Howard Liu

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

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.