Centos7搭建MySQL的galera集群

简介

原理
当一个事务在当前写入的节点提交后,通过wsrep API(write set replication API)将这个事务变成写集(write set)广播到同集群的其他节点中,其他节点收到写集事务后,对这个事务进行可行性检查,并返回结果给wsrep API。若大多数节点都预估自己可以成功执行这个事务,则wsrep API会做出仲裁,通知所有可以成功执行这个事务的节点提交这个事务,并将事务成功提交的消息返回给客户端,同时根据需要剔除没有成功执行事务的节点。
优缺点
1.数据备份安全性高,因为集群中的每个节点都保存着一份完整的数据副本,
2.集群扩展性强,当有新节点上线时,可以从空库状态直接拉取集群的数据来获取全量数据传输(SST),也可以选择从恢复最新备份状态加入集群,获取差量数据传输(IST)。而当其中一个结点下线时,直接关闭实例,集群就会自动踢出这个结点。重新上线时,会根据自身数据与集群数据的落后程度决定通过SST或者IST传输数据。
3.同步效率高效,集群提供了高性能的读写状态(相对于同步复制),而由于同步机制的原因,甚至可以通过增加slave线程的办法来使结点同步效率更进一步提高
4.更加友好的软硬件兼容性
5、DDL操作会严重阻塞同步线程,线上大动作DDL会导致有可能导致节点堵塞无响应,更进一步会导致部分结点下线。

集群准备

准备虚拟机
部署安装三台Centos6虚拟机,设置hostname和IP地址,关闭selinux和防火墙,实现hostname和IP地址的映射

hostnameip
galera1192.168.29.135
galera2192.168.29.136
galera3192.168.29.137

安装galera-mysql
安装epel源
在galera-cluster网站中下载对应版本的galera-MySQL和Replication Library并安装到三个结点中
下载链接:https://galeracluster.com/downloads/

配置galera-MySQL

每个结点都创建用于集群同步的账号

mysql>grant all on *.* to 'sst'@'192.168.29.%' identified by 'your_password';
mysql>flush privileges;

修改配置文件
galera1结点

#可选项
server_id=1
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2

wsrep_on=ON
#模块的路径
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
#集群名称
wsrep_cluster_name='galera'
#集群通信地址
wsrep_cluster_address='gcomm://'
#本结点名字
wsrep_node_name='galera1'
#本节点ip地址
wsrep_node_address='192.168.29.135'
#集群同步账号和密码
wsrep_sst_auth=sst:your_password
#数据传输方式
wsrep_sst_method=rsync

重启galera1的mysqld服务
查看端口除了3306外,还监听了4567号通信端口

[root@galera1 ~]# netstat -tnlp |grep mysqld
tcp        0      0 0.0.0.0:4567                0.0.0.0:*                   LISTEN      3824/mysqld         
tcp        0      0 :::3306                     :::*                        LISTEN      3824/mysqld         

galera2配置文件

server_id=2
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
#添加到集群中
wsrep_cluster_address='gcomm://192.168.29.135'
wsrep_node_name='galera2'
wsrep_node_address='192.168.29.136'
wsrep_sst_auth=sst:your_password
wsrep_sst_method=rsync

galera3配置文件

server_id=3
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
#添加到集群中
wsrep_cluster_address='gcomm://192.168.29.135'
wsrep_node_name='galera3'
wsrep_node_address='192.168.29.137'
wsrep_sst_auth=sst:your_password
wsrep_sst_method=rsync

配置好配置文件后启动galera2和galera3的mysqld服务,观察集群状态

mysql> show status like 'wsrep%';
wsrep_incoming_addresses|192.168.29.135:3306,192.168.29.136:3306,192.168.29.137:3306

可看到三个结点均已经加入集群中

测试验证

在任意结点创建mydb库,并创建test表,出入数据,观察其余结点是否进行数据同步

#galera2执行SQL语句
mysql> create database mydb charset utf8;
mysql> use mydb;
mysql> create table test(num int primary key,name char(12) not null);
mysql>insert into test values(2,'Jack');
#galera1中查看数据
mysql> select * from mydb.test;
+-----+------+
| num | name |
+-----+------+
|   2 | Jack |
+-----+------+

自此MySQL的galera集群搭建完毕

重启问题

1、单独重启

单独重启galera2和galera3结点的mysqld服务能正常加入到集群中,重启galera1结点会发现galera1单独在一个新的集群中,galera2和galera3在另一个集群中,这是由于galera1的配置文件中wsrep_cluster_address='gcomm://'会使galera1新建一个集群
因此在重启galera1前,应该修改配置文件

wsrep_cluster_address='gcomm://192.168.29.136,192.168.29.137'

此时重启galera的mysqld服务将会重新进入集群中

2、集群重启

当所有结点的mysqld都停止后,想要重启集群则需要先把/var/lib/mysql中的galera.cache ,grastate.dat,gvwstate.dat三个文件删除,依次启动galera1、galera2、galera3的mysqld服务即可使集群恢复正常

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值