Linux:MYSQL(十六)高可用GALERA_CLUSTER
Galera Cluster
- Galera Cluster:集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster及MariaDB Cluster,Galera本身是具有多主特性的,即采用multi-master的集群架构,是一个既稳健,又在数据一致性、完整性及高性能方面有出色表现的高可用解决方案
- 三个节点组成了一个集群,与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,称为multi-master架构,当有客户端要写入或者读取数据时,连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构
Galera Cluster特点
- 多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的
- 同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失
- 并发复制:从节点APPLY数据时,支持并行执行,更好的性能
- 故障切换:在出现数据库故障时,因支持多点写入,切换容易
- 热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务时间就会非常少。在节点故障期间,节点本身对集群的影响非常小
- 自动节点克隆:在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,Galera Cluster会自动拉取在线节点数据,最终集群会变为一致
- 对应用透明:集群的维护,对应用程序是透明的
Galera Cluster
Galera Cluster官方文档:
http://galeracluster.com/documentation-webpages/galera-documentation.pdf
http://galeracluster.com/documentation-webpages/index.html
https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/
Galera Cluster包括两个组件:
Galera replication library (galera-3)
WSREP:MySQL extended with the Write Set Replication
WSREP复制实现:
percona-cluster
MariaDB-Cluster
注意:都至少需要三个节点,不能安装mariadb-server
MySQL复制
- 配置epel源
https://downloads.mariadb.org/进去找
- 首次启动时,需要初始化集群,在其中一个节点上执行命令
/etc/init.d/mysql start --wsrep-new-cluster
- 而后正常启动其它节点
service mysql start
查看集群中相关系统变量和状态变量
SHOW VARIABLES LIKE 'wsrep_%'; 变量
SHOW STATUS LIKE 'wsrep_%'; 状态变量
SHOW STATUS LIKE 'wsrep_cluster_size';
实战操作:
192.168.32.7:
yum install MariaDB-Galera-server
vim /etc/my.cnf.d/server.cnf 配置文件
#Mandatory settings 以下是必选设置,必须启用
wsrep_provider = /usr/lib64/galera/libgalera_smm.so 指定模块
wsrep_cluster_address="gcomm://192.168.32.7,192.168.32.17,192.168.32.27" 几个节点添几个
binlog_format=row 可默认
default_storage_engine=InnoDB 可默认
innodb_autoinc_lock_mode=2 可默认
bind-address=0.0.0.0 可默认
#Optional setting 以下是可选设置,按需启用
wsrep_cluster_name = 'mycluster' 集群名称默认my_wsrep_cluster
wsrep_node_name = 'node1' 每个节点的名字
wsrep_node_address = ‘192.168.32.7' 节点IP
scp /etc/my.cnf.d/server.cnf 192.168.32.17:/etc/my.cnf.d
scp /etc/my.cnf.d/server.cnf 192.168.32.27:/etc/my.cnf.d
/etc/init.d/mysql start --wsrep-new-cluster
192.168.32.17:
service mysql start
192.168.32.27:
service mysql start:
测试:同时插入数据是否会出现冲突
insert teachers (name,age,gender) values('a',30,'M');