Galera Cluster是MariaDB的一个双活多主集群,其可以使得MariDB的所有节点保持同步,Galera为MariaDB提供了同步复制(相对于原生的异步复制),因此其可以保证HA,且其当前仅支持XtraDB/InnoDB存储引擎(扩展支持MyISAM),并且只可在Linux下使用。
Galera Cluster拥有以下特性:
真正的多主架构,任何节点都可以进行读写
同步复制,各节点间无延迟且节点宕机不会导致数据丢失
紧密耦合,所有节点均保持相同状态,节点间无不同数据
无需主从切换操作或使用VIP
热Standby,在Failover过程中无停机时间(由于不需要Failover)
自动节点配置,无需手工备份当前数据库并拷贝至新节点
支持InnoDB存储引擎
对应于透明,无需更改应用或是进行极小的更改
无需进行读写分离
本文主要说明Galera的集群如何搭建,使用环境是centos6.5,使用三台服务器
机器信息
节点node1 Ip 1.1.1.1
节点node2 Ip 1.1.1.2
节点node3 Ip 1.1.1.3
第一步:添加Mariadb源
创建 mariadb 源 /etc/yum.repos.d/mariadb.repo
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
第二步:安装MariaDB
yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/socat-1.7.2.3-1.el6.x86_64.rpm yum install MariaDB-Galera-server MariaDB-client rsync galera
如果安装Mariadb失败,请先把自带的mysql卸掉 ,使用rpm -q mysql 查找安装包信息,rpm -e 进行卸载
第三步:设置Mariadb 安全
service mysql start /usr/bin/mysql_secure_installation
密码当前设置是dbpass,所有问题都是默认 default
第四步:创建MariaDB Galera集群用户
现在创建每个节点通用授权的用户sst_user,在每个节点上执行下面的命令
mysql -u root -p mysql> DELETE FROM mysql.user WHERE user=''; mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'dbpass'; mysql> GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'dbpass'; mysql> GRANT ALL PRIVILEGES on *.* to sst_user@'%'; mysql> FLUSH PRIVILEGES; mysql> quit
第五步: 创建集群的配置
所有节点停止mysql 服务,
service mysql stop
我们进行node1,node2,node3上的环境配置,下面是node1的配置
cat >> /etc/my.cnf.d/server.cnf << EOF
binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 innodb_locks_unsafe_for_binlog=1 query_cache_size=0 query_cache_type=0 bind-address=0.0.0.0 datadir=/var/lib/mysql innodb_log_file_size=100M innodb_file_per_table innodb_flush_log_at_trx_commit=2 wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://1.1.1.1,1.1.1.2,1.1.1.3" wsrep_cluster_name='galera_cluster' wsrep_node_address='1.1.1.1' wsrep_node_name='node1' wsrep_sst_method=rsync wsrep_sst_auth=sst_user:dbpass EOF
node2的配置在wsrep_node_address 和wsrep_node_name 有修改
wsrep_node_address=1.1.1.2 wsrep_node_name='node2'
node3
wsrep_node_address=1.1.1.3 wsrep_node_name='node3'
第六步:初始化node1节点
/etc/init.d/mysql start --wsrep-new-cluster
查看一下node1上的状态信息
mysql -u root-p -e "show status like 'wsrep%'"
正确信息如下:
wsrep_local_state_comment | Synced wsrep_incoming_addresses | 1.1.1.1:3306 wsrep_cluster_size | 1 wsrep_ready | ON
第七步:启动其他节点
其他节点启动和平常命令一下
service mysql start
在node2上查看一下状态
mysql -u root-p -e "show status like 'wsrep%'"
显示如下:
| wsrep_local_state_comment | Synced | | wsrep_incoming_addre sses | 1.1.1.1:3306,1.1.1.2:3306 | | wsrep_cluster_size | 2 | | wsrep_connected | ON | | wsrep_ready | ON |
启动node3后显示信息如下
| wsrep_local_state_comment | Synced | | wsrep_incoming_addre sses | 1.1.1.1:3306,1.1.1.2:3306,1.1.1.3:3306 | | wsrep_cluster_size | 2 | | wsrep_connected | ON | | wsrep_ready | ON |
第八步:验证同步
mysql -u root -p -e 'CREATE DATABASE clustertest;' mysql -u root -p -e 'CREATE TABLE clustertest.mycluster ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), ipaddress VARCHAR(20), PRIMARY KEY(id));' mysql -u root -p -e 'INSERT INTO clustertest.mycluster (name, ipaddress) VALUES ("node1", "1.1.1.1");'
在node2和node3上检查相应的表信息,如果能够如下显示,表示已经成功同步
mysql -u root -p -e 'SELECT * FROM clustertest.mycluster;'
Enter password: +----+------+-----------+ | id | name | ipaddress | +----+------+-----------+ | 2 | node1 | 1.1.1.1 | +----+------+-----------+
成功完成
参考文章:http://www.unixmen.com/setup-mariadb-galera-cluster-10-0-centos/