Home  >  Article  >  Database  >  利用MariaDB Galera Cluster实现mariadb的多主复制

利用MariaDB Galera Cluster实现mariadb的多主复制

WBOY
WBOYOriginal
2016-06-07 17:36:551101browse

更多博文请关注:没有伞的孩子必须努力奔跑(www.xuchanggang.cn)一、MariaDBGaleraCluster概要:1.简述:MariaDBGaleraCluster是一套在mysqlinnodb存储引擎上面

   更多博文请关注:没有伞的孩子必须努力奔跑 ()

一、MariaDB Galera Cluster概要:

1.简述:

     MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步的系统架构,业务层面无需做读写分离工作,数据库读写压力都能按照既定的规则分发到各个节点上去。在数据方面完全兼容 MariaDB 和 MySQL。

2.特性:

     (1).同步复制 Synchronous replication

     (2).Active-active multi-master 拓扑逻辑

     (3).可对集群中任一节点进行数据读写

     (4).自动成员控制,故障节点自动从集群中移除

     (5).自动节点加入

     (6).真正并行的复制,基于行级

     (7).直接客户端连接,原生的 MySQL 接口

     (8).每个节点都包含完整的数据副本

     (9).多台数据库中数据同步由 wsrep 接口实现

3.局限性

     (1).目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的.

     (2).DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.

     (3).在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…

     (4).查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。

     (5).允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。

     (6).由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).

     (7).XA事务不支持,由于在提交上可能回滚。

     (8).整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。

     (9).集群节点建议最少3个。

     (10).如果DDL语句有问题将破坏集群。

二、MariaDB Galera Cluster搭建演示

1.环境描述

OS: red hat linux 6.0 64bit

MariaDB server1:192.168.1.137

MariaDB server2:192.168.1.138

MariaDB server3:192.168.1.139

Galera SST user:sst

Galera SST password:sstpass123

MySQL root password:kongzhong

2. 配置mariadb的yum源

[root@client137 ~]# vim /etc/yum.repos.d/mariadb.repo [root@client138 ~]# vim /etc/yum.repos.d/mariadb.repo [root@client139 ~]# vim /etc/yum.repos.d/mariadb.repo # yum源的内容如下: [mariadb] name = MariaDB baseurl = enabled = 1 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 [root@client137 ~]# yum makecache [root@client138 ~]# yum makecache [root@client139 ~]# yum makecache

3.安装 MariaDB-Galera-server galera MariaDB-client

[root@client137 ~]# yum -y install MariaDB-Galera-server galera MariaDB-client [root@client138 ~]# yum -y install MariaDB-Galera-server galera MariaDB-client [root@client139 ~]# yum -y install MariaDB-Galera-server galera MariaDB-client

4.编辑每台机器的hosts文件,添加如下内容

[root@client137 ~]# vim /etc/hosts 192.168.1.137 client137.kongzhong.com client137 192.168.1.138 client138.kongzhong.com client138 192.168.1.139 client139.kongzhong.com client139 # 启动测试一下 [root@client137 ~]# /etc/init.d/mysql start Starting MySQL.... SUCCESS! [root@client137 ~]# chkconfig mysql on

5.设置MariaDB的root密码,并做安全加固

[root@client137 ~]# /usr/bin/mysql_secure_installation [root@client137 ~]# /usr/bin/mysql_secure_installation # 登陆数据库,授权用于集群同步的用户和密码 [root@client137 ~]# mysql -uroot -pkongzhong mysql> GRANT USAGE ON *.* to sst@'%' IDENTIFIED BY 'sstpass123'; mysql> GRANT ALL PRIVILEGES on *.* to sst@'%'; mysql> FLUSH PRIVILEGES; mysql> quit # 创建并配置wsrep.cnf文件 [root@client137 ~]# cp /usr/share/mysql/wsrep.cnf /etc/my.cnf.d/ [root@client137 ~]# vim /etc/my.cnf.d/wsrep.cnf # 只需要修改如下4行: wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://" wsrep_sst_auth=sst:sstpass123 wsrep_sst_method=rsync # 注意: # "gcomm://" 是特殊的地址,仅仅是Galera cluster初始化启动时候使用。 # 如果集群启动以后,我们关闭了第一个节点,那么再次启动的时候必须先修改,"gcomm://"为其他节点的集群地址,例如wsrep_cluster_address="gcomm://192.168.1.138:4567"
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn