Galera集群

安装配置MariaDB-Galera集群

基本环境

两台及两台以上安装CentOS 7的虚拟机(作为集群节点)。同时需要保证这两个节点间网络互通。
1.2MariaDB及Galera安装
1.列表内容

添加MariaDB YUM源:

#vim /etc/yum/repos.d/MariaDB.repo
[mariadb]
name=MariaDB
baseurl=http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

2.安装MariaDB组件及Galera

#yum install MariaDB-server MariaDB-client

3.配置MariaDB及Galera
修改/etc/my.cnf.d/server.cnf内容如下:

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.1.112,192.168.1.113 "
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name="MyCluster"
wsrep_node_address="192.168.1.112"
wsrep_node_name="node1"
wsrep_sst_method=rsync
wsrep_sst_auth=root:command

注意:
此处wsrep_cluster_address为集群中所有节点或非自己的任意集群节点ip即可。
不同节点的配置内容基本类似。
要保证wsrep_cluster_name必须一致,wsrep_node_address为本服务器地址。
wsrep_sst_auth为本机MariaDB用户及密码。

4.CentOS 7下启动MariaDB-Galera集群

CentOS 7使用了systemd作为它的初始化系统。不幸的是,systemd并不能传递命令行参数到相应的运行文件中。所以下面的命令是不能被执行的的:

#systemctl start mariadb –wsrep_new_cluster

systemctl:unrecognized option ‘-wsrep_new_cluster’

可以通过如下方案避免这样的问题:
[root@Node1]#mysqld_safe –wsrep-new-cluster
直接用mysql相应命令代入相关参数启动Node1及相关集群,此时新集群中只有Node1。
[root@Node2]#systemctl start mariadb
启动Node2上mariadb
show global stauts like ‘wsrep%’
检查Node2是否接入集群
[root@Node1]#ctrl+\
关闭Node1上的MariaDB,此时集群中只有Node2节点
[root@Node1]# systemctl start mariadb
在Node1上用systemd启动mariadb,此时Node1节点接入到Node2节点所在集群。

Galera集群优势

配置简单

使用同步复制系统

高可用

当节点发生崩溃时无数据丢失。
数据复制保持连续性。
不复杂,不耗时的故障处理。

规避传统同步复制系统数据同步效率低下的问题

群通讯:这是一种高级别抽象机制,定义了数据库节点间的通讯。该实现保证数据复制的连续性。
写集:它捆绑了数据库写入单一写集的消息。该实现避免了节点间协作一次只进行一个操作。
数据库状态机:它在一个数据库地址上处理只读事务。该实现升级事务开始只在一个数据库上运行,经过浅复制后,作为一个读集传播到其它数据库作认证和可能的提交。
事务再组织:在数据库提交和传播事务到其它数据库地址前对事物进行再组织。该实现提升了事务能够通过认证测试的数量。

Galera局限性

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.整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。
4Galera集群脑裂问题处理
使用仲裁人方式进行处理,脑裂是否网络断开后立即触发脑裂。
5负载均衡
5.1HAProxy结合Galera Cluster
在前端应用如Java里的jdbc配置文件,把ip改为HaProxy,通过HaProxy把读写请求轮询转发到后端Galera Cluster的几个节点上,当有一个节点宕掉。通过HAProxy检测到并让该节点做下线处理,从而不会影响业务。保证业务7*24小时不间断访问。
5.2Galera Load Balancing 结合Gelara Cluster
6限制
7问题
1.HAProxy, Galera路由过程
2.分布式运行时由于事务冲突发生死锁是否能自动解开,解开后该节点数据是否保持一致

你可能感兴趣的:(数据库)