(原创)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语句有问题将破坏集群。




准备三台服务器

 node1  192.168.5.74

node2   192.168.5.73

node3   192.168.6.110


在分别设置三台服务器的hosts






1.设置yum源 (https://mariadb.com/kb/en/mariadb/yum/)

vi /etc/yum.repos.d/MariaDB.repo


[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.1/centos6-amd64

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1


2.

 yum remove mysql-libs  (如果有冲突)

file /etc/my.cnf from install of MariaDB-common-10.1.16-1.el6.x86_64 conflicts with file from package mariadb-libs-1:5.5.44-2.el7.centos.x86_64



    [root@node1 mysql]#  安装  yum install  MariaDB-server MariaDB-client rsync galera


 yum list maria*

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

Available Packages

MariaDB-cassandra-engine.x86_64                                                                                  10.1.14-1.el6                                                                                  mariadb

MariaDB-client.x86_64                                                                                            10.1.14-1.el6                                                                                  mariadb

MariaDB-common.x86_64                                                                                            10.1.14-1.el6                                                                                  mariadb

MariaDB-compat.x86_64                                                                                            10.1.14-1.el6                                                                                  mariadb

MariaDB-connect-engine.x86_64                                                                                    10.1.14-1.el6                                                                                  mariadb

MariaDB-devel.x86_64                                                                                             10.1.14-1.el6                                                                                  mariadb

MariaDB-gssapi-client.x86_64                                                                                     10.1.14-1.el6                                                                                  mariadb

MariaDB-oqgraph-engine.x86_64                                                                                    10.1.14-1.el6                                                                                  mariadb

MariaDB-server.x86_64                                                                                            10.1.14-1.el6                                                                                  mariadb

MariaDB-shared.x86_64                                                                                            10.1.14-1.el6                                                                                  mariadb

MariaDB-test.x86_64   



3. 安装完毕启动 数据库 service mysql start


 #设置数据库的安全:mysql_secure_installation (设置root用户密码,清除测试数据库,清除其他用户等操作,可以跳过)


 GRANT ALL PRIVILEGES ON *.* TO 'sst_user'@'%' IDENTIFIED BY '123456' ;

 FLUSH PRIVILEGES;


    

 GRANT ALL PRIVILEGES ON *.* TO 'cluster'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;


4.关闭防火墙  

1) 重启后生效 

开启: chkconfig iptables on 

关闭: chkconfig iptables off 


2) 即时生效,重启后失效 

开启: service iptables start 

关闭: service iptables stop 


3)关闭selinux

sestatus -v  查看状态

1 永久方法 – 需要重启服务器

修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。

2 临时方法 – 设置系统参数

使用命令setenforce 0


iptables -A INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT

 iptables -A INPUT -i eth0 -p tcp --dport 4567 -j ACCEPT


5.  service mysql stop



6. 编辑配置文件 vi   /etc/my.conf.d/server.cnf

添加以下内容

[mariadb-10.1]

query_cache_size=0

binlog_format=ROW

default_storage_engine=innodb

innodb_autoinc_lock_mode=2

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address="gcomm://node1,node2,node3"

wsrep_cluster_name='cluster1'

wsrep_node_address='192.168.5.74'   

wsrep_node_name='node1'

wsrep_sst_method=rsync

wsrep_sst_auth=sst_user:123456




7. 初始化 node1   etc/init.d/mysql bootstrap

(centos7 使用

galera_new_cluster

)


参考:https://mariadb.com/kb/en/mariadb-enterprise/mariadb-enterprise-installation-guide/

8.添加node2 到集群

vi   /etc/my.conf.d/server.cnf

添加以下内容

[mariadb-10.1]

query_cache_size=0

binlog_format=ROW

default_storage_engine=innodb

innodb_autoinc_lock_mode=2

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address="gcomm://node1,node2,node3"

wsrep_cluster_name='cluster1'

wsrep_node_address='192.168.5.73'   

wsrep_node_name='node2'

wsrep_sst_method=rsync

wsrep_sst_auth=sst_user:123456


       启动 node2  service mysql start



9.添加node3 到集群

vi   /etc/my.conf.d/server.cnf

添加以下内容

[mariadb-10.1]

query_cache_size=0

binlog_format=ROW

default_storage_engine=innodb

innodb_autoinc_lock_mode=2

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address="gcomm://node1,node2,node3"

wsrep_cluster_name='cluster1'

wsrep_node_address='192.168.6.110'   

wsrep_node_name='node3'

wsrep_sst_method=rsync

wsrep_sst_auth=sst_user:123456


 启动 node3 service mysql start



10. 测试是否同步

   在Node 1上次创建一个数据库 test_db ,查看 node2 ,node3  是否同步




参考文档

http://tecadmin.net/setup-mariadb-galera-cluster-10-on-centos-redhat-fedora/


/etc/init.d/mysql bootstrap

 node2完整的配置示例

# Use it for options that only the server (but not clients) should see## See the examples of server my.cnf files in /usr/share/mysql/## this is read by the standalone daemon and embedded servers[server]# this is only for the mysqld standalone daemon[mysqld]log-error                      = /var/lib/mysql/mysql-error.loglog-queries-not-using-indexes  = 1slow-query-log                 = 1slow-query-log-file = /var/lib/mysql/slow.loglong_query_time = 1## * Galera-related settings#[galera]# Mandatory settingswsrep_on=ON#wsrep_provider=#wsrep_cluster_address=#binlog_format=row#default_storage_engine=InnoDB#innodb_autoinc_lock_mode=2## Allow server to accept connections on all interfaces.##bind-address=0.0.0.0## Optional setting#wsrep_slave_threads=1#innodb_flush_log_at_trx_commit=0# this is only for embedded server[embedded]# This group is only read by MariaDB servers, not by MySQL.# If you use the same .cnf file for MySQL and MariaDB,# you can put MariaDB-only options here[mariadb]# This group is only read by MariaDB-10.1 servers.# If you use the same .cnf file for MariaDB of different versions,# use this group for options that older servers don't understand[mariadb-10.1]query_cache_size=0binlog_format=ROWdefault_storage_engine=innodbinnodb_autoinc_lock_mode=2wsrep_provider=/usr/lib64/galera/libgalera_smm.sowsrep_cluster_address="gcomm://node1,node2,node3"wsrep_cluster_name='cluster1'wsrep_node_address='node2'wsrep_node_name='node2'wsrep_sst_method=rsyncwsrep_sst_auth=sst_user:123456"/etc/my.cnf.d/server.cnf" 61L, 1610C     




wsrep_sst_auth=sst_user:123456



遇到启动不了,先需要启动第一个节点

service mysql start --wsrep-new-cluster






曾梦想仗剑走天涯 看一看世界的繁华 年少的心总有些轻狂 如今你四海为家 曾让你心疼的姑娘 如今已悄然无踪影 爱情总让你渴望又感到烦恼 曾让你遍体鳞伤 Dilililidilililidenda Dilililidilililidada Dilililidilililidada 走在勇往直前的路上 Dilililidilililidenda Dilililidilililidada Dilililidilililidada 有难过也有精彩 每一次难过的时候 就独自看一看大海 总想起身边走在路上的朋友 有多少正在疗伤 Dilililidilililidenda Dilililidilililidada Dilililidilililidada 不知多少孤独的夜晚 Dilililidilililidenda Dilililidilililidada Dilililidilililidada 从昨夜酒醉醒来 每一次难过的时候 就独自看一看大海 总想起身边走在路上的朋友 有多少正在醒来 让我们干了这杯酒 好男儿胸怀像大海 经历了人生百态世间的冷暖 这笑容温暖纯真 每一次难过的时候 就独自看一看大海 总想起身边走在路上的朋友 有多少正在醒来 让我们干了这杯酒 好男儿胸怀像大海 经历了人生百态世间的冷暖 这笑容温暖纯真

关键字

最近访客