由MySQL迁移到MariaDB Galera Cluster数据库集群教程
介绍
这阵子在研究如何用分布式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均可)