原理
Galera复制插件不同于传统的MySQL复制,可以解决多个问题,包括多主写入冲突,复制滞后和主从不同步。
Galera Cluster与传统的复制方式不同,不通过I/O_thread和sql_thread进行同步,而是在更底层通过wsrep实现文件系统级别的同步,可以做到几乎实时同步
集群安装
说明:Galera集群至少需要三个节点的服务器硬件。
1、主机名、hosts文件修改
10.17.12.98 node1 10.17.12.99 node2 10.17.12.101 node3
2、防火墙、selinux关闭等
setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config systemctl disable firewalld.service systemctl stop firewalld.service
3、配置yum源
more mariadb.repo [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
安装软件
yum install mariadb-client mariadb-server galera -y
配置修改
编辑/etc/my.cnf,添加如下配置
[mysqld] # 监听哪个地址,这里每个节点填对应的ip地址 bind-address=10.17.12.98 # 监听哪个端口 port = 3306 # 设置默认字符编码集 collation-server = utf8_general_ci init-connect = SET NAMES utf8 character-set-server = utf8 # 设置日志路径 log-error = /var/log/mariadb/mariadb.log # 设置binlog log-bin = mysql-bin binlog_format=ROW # 设置默认数据目录 datadir = /var/lib/mysql/ # 设置默认存储引擎 default-storage-engine=innodb innodb_autoinc_lock_mode=2 [galera] wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so # galera集群名字 wsrep_cluster_name="galera_cluster" # 本节点的主机名,这里每个节点填对应的ip地址 wsrep_node_name="node1" wsrep_cluster_address = gcomm://10.17.12.98:4567,10.17.12.99:4567,10.17.12.101:4567 wsrep_provider_options = gmcast.listen_addr=tcp://10.17.12.98:4567;ist.recv_addr=10.17.12.98:4568 wsrep_node_address="10.17.12.98:4567" # 设置galera集群同步的方法和用户名密码 wsrep_sst_auth=sst:password wsrep_sst_method=xtrabackup-v2 #其他节点好像不需要加,待验证 max_connections = 10000 key_buffer_size = 64M max_heap_table_size = 64M tmp_table_size = 64M innodb_buffer_pool_size = 128M
其他节点需要修改/etc/my.cnf与每个节点对应
启动集群
完成安装和配置Galera Cluster后,需要使用--wsrep-new-cluster选择一个节点上启动mysqld。 这将会初始化集群的核心组件。 在此之后启动的每个节点都将连接到该组件并开始复制
galera_new_cluster
注意警告:只有在初始化主要组件时才使用--wsrep-new-cluster参数。 如果希望节点连接到现有群集时,不要执行这条命令。
启动数据库服务后,登录mysql数据库库,通过wsrep_cluster_size参数来判断启动是否成功。
SHOW STATUS LIKE 'wsrep_cluster_size';
直接启动其他节点
systemctl start mariadb