Gelara Cluster
说明:Galera Cluster是一套在MySQL/MariaDB的InnoDB存储引擎上实现multi-master及数据实时同步的系统架构。它采用了同步复制机制,保证了所有节点上的数据都是实时一致的。在Galera Cluster中,所有的MariaDB实例都是对等的,互为主从,客户端可以连接到任何一个节点进行读写操作
节点类型 | IP | PORT |
---|---|---|
主从节点 | 192.168.5.81 | 3306 |
主从节点 | 192.168.5.82 | 3306 |
主从节点 | 192.168.5.83 | 3306 |
搭建前准备
- 关闭SELinux(否则主节点同步会出现错误)
- 关闭防火墙
#如果SELinux status参数为enabled即为开启状态
/usr/sbin/sestatus -v
#也可以用这个命令检查
getenforce
#关闭SELinux:
setenforce 0 #临时关闭(不用重启机器)
#永久生效修改 将SELINUX=enforcing改为SELINUX=disabled重启机器即可
vi /etc/selinux/config
#关闭防火墙
systemctl stop firewalld.service
#禁止开机启动
systemctl disable firewalld.service
如果不想关闭防火墙,可以设定相关权限规则,参照官方提供的说明
https://galeracluster.com/library/documentation/firewall-settings.html
配置yum源
vi /etc/yum.repos.d/mariadb-10.11.8.repo
mariadb-10.11.8.repo内容如下
[mariadb]
name = MariaDB
#官方镜像下载速度慢,替换成了清华镜像站
baseurl = https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.11.8/centos7-amd64/
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
安装
#在MariaDB 10.4及更高版本中,还需要安装该galera-4软件包以获取Galera 4 wsrep提供程序库
yum install MariaDB-server MariaDB-client galera-4 -y
集群启动
启动前需注意:需要打通端口,由于本说明在关闭防火墙下测试无需配置,未关闭需开启以下端口
Galera复制端口(默认4567,可更改)
Galera节点间通信的端口。它负责同步数据、维护集群状态以及检测节点故障等。确保所有Galera集群节点之间的这个端口是开放的
IST增量状态端口(默认4568,可更改)
当一个新的节点加入集群时,需要从集群中的一个现有节点接收数据库状态的快照。这个端口用于增量状态传输(IST),通常只在节点加入时短暂使用。尽管不是持续开放的,但确保在节点加入时端口可用
SST全量状态端口(默认4444,可更改)
状态快照传输(SST)用于在节点加入集群时传输完整的数据库状态。SST可以使用不同的方法,如rsync或xtrabackup,它们使用各自的端口。通常这些端口不是固定的,而是由SST方法决定的。确保防火墙或安全组规则允许SST方法所需的通信端口
分别修改server配置
vim /etc/my.cnf.d/server.cnf
配置参照mariadb官网 点击可直达查看
配置参照galera官网 点击可直达查看
81server配置内容如下
[mysqld]
# 设置默认存储引擎为INNODB
default-storage-engine=INNODB
# 设置默认字符编码为utf8
character-set-server=utf8
# utf8mb4_unicode_ci比较准确,utf8mb4_general_ci速度比较快。通常情况下,新建数据库时一般选用 utf8mb4_general_ci 就可以了
collation-server=utf8_general_ci
[galera]
# 开启全同步复制模式
# 在10.1以上版本的mariadb中,该参数的默认值为OFF,意为该节点的事务将不会发送给集群中的其他节点
wsrep_on=ON
# 指定Galera插件库位置,MariaDB 10.4之前是galera,之后是galera-4
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
# 定义集群节点信息
wsrep_cluster_address="gcomm://192.168.5.81,192.168.5.82,192.168.5.83"
# 二进制日志格式设置为row行级
binlog_format=row
# 设置服务器的默认字符集为utf8
character_set_server=utf8
# 设置默认的存储引擎为InnoDB
default_storage_engine=InnoDB
# 设置innodb事务插入模式为交错模式,并发性能最高,适用于bin-log格式为row的场景
# 此模式下,插入语句来一个分配一个自增 id,而不会锁表,只会锁住分配 ID 的过程
innodb_autoinc_lock_mode=2
# 设置Galera复制时全局缓存大小
wsrep_provider_options="gcache.size=1G"
# 设置Galera集群名称
wsrep_cluster_name=MariaDB-Galera-Cluster
# 设置Galera集群中节点名称,需保证集群中名称唯一,一般用自定义host名或ip即可
wsrep_node_name=cluster1
# 指定当前节点的wsrep地址与端口,默认端口为4567
wsrep_node_address=192.168.5.81
# 绑定本地所有IP
bind-address=0.0.0.0
# 用于进行状态快照传输(SST)的方法【可选】
# SST是当新节点加入集群或现有节点从集群中恢复时,用于同步节点状态的过程
# rsync是一个常用的文件同步工具,它通过网络复制文件和目录
wsrep_sst_method=rsync
# 同步认证的用户与密码信息【可选】
wsrep_sst_auth=root:root
82server配置内容如下
[mysqld]
# 设置默认存储引擎为INNODB
default-storage-engine=INNODB
# 设置默认字符编码为utf8
character-set-server=utf8
# utf8mb4_unicode_ci比较准确,utf8mb4_general_ci速度比较快。通常情况下,新建数据库时一般选用 utf8mb4_general_ci 就可以了
collation-server=utf8_general_ci
[galera]
# 开启全同步复制模式
# 在10.1以上版本的mariadb中,该参数的默认值为OFF,意为该节点的事务将不会发送给集群中的其他节点
wsrep_on=ON
# 指定Galera插件库位置,MariaDB 10.4之前是galera,之后是galera-4
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
# 定义集群节点信息
wsrep_cluster_address="gcomm://192.168.5.81,192.168.5.82,192.168.5.83"
# 二进制日志格式设置为row行级
binlog_format=row
# 设置服务器的默认字符集为utf8
character_set_server=utf8
# 设置默认的存储引擎为InnoDB
default_storage_engine=InnoDB
# 设置innodb事务插入模式为交错模式,并发性能最高,适用于bin-log格式为row的场景
# 此模式下,插入语句来一个分配一个自增 id,而不会锁表,只会锁住分配 ID 的过程
innodb_autoinc_lock_mode=2
# 设置Galera复制时全局缓存大小
wsrep_provider_options="gcache.size=1G"
# 设置Galera集群名称
wsrep_cluster_name=MariaDB-Galera-Cluster
# 设置Galera集群中节点名称,需保证集群中名称唯一,一般用自定义host名或ip即可
wsrep_node_name=cluster2
# 指定当前节点的wsrep地址与端口,默认端口为4567
wsrep_node_address=192.168.5.82
# 绑定本地所有IP
bind-address=0.0.0.0
# 用于进行状态快照传输(SST)的方法【可选】
# SST是当新节点加入集群或现有节点从集群中恢复时,用于同步节点状态的过程
# rsync是一个常用的文件同步工具,它通过网络复制文件和目录
wsrep_sst_method=rsync
# 同步认证的用户与密码信息【可选】
wsrep_sst_auth=root:root
83server配置内容如下
[mysqld]
# 设置默认存储引擎为INNODB
default-storage-engine=INNODB
# 设置默认字符编码为utf8
character-set-server=utf8
# utf8mb4_unicode_ci比较准确,utf8mb4_general_ci速度比较快。通常情况下,新建数据库时一般选用 utf8mb4_general_ci 就可以了
collation-server=utf8_general_ci
[galera]
# 开启全同步复制模式
# 在10.1以上版本的mariadb中,该参数的默认值为OFF,意为该节点的事务将不会发送给集群中的其他节点
wsrep_on=ON
# 指定Galera插件库位置,MariaDB 10.4之前是galera,之后是galera-4
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
# 定义集群节点信息
wsrep_cluster_address="gcomm://192.168.5.81,192.168.5.82,192.168.5.83"
# 二进制日志格式设置为row行级
binlog_format=row
# 设置服务器的默认字符集为utf8
character_set_server=utf8
# 设置默认的存储引擎为InnoDB
default_storage_engine=InnoDB
# 设置innodb事务插入模式为交错模式,并发性能最高,适用于bin-log格式为row的场景
# 此模式下,插入语句来一个分配一个自增 id,而不会锁表,只会锁住分配 ID 的过程
innodb_autoinc_lock_mode=2
# 设置Galera复制时全局缓存大小
wsrep_provider_options="gcache.size=1G"
# 设置Galera集群名称
wsrep_cluster_name=MariaDB-Galera-Cluster
# 设置Galera集群中节点名称,需保证集群中名称唯一,一般用自定义host名或ip即可
wsrep_node_name=cluster3
# 指定当前节点的wsrep地址与端口,默认端口为4567
wsrep_node_address=192.168.5.83
# 绑定本地所有IP
bind-address=0.0.0.0
# 用于进行状态快照传输(SST)的方法【可选】
# SST是当新节点加入集群或现有节点从集群中恢复时,用于同步节点状态的过程
# rsync是一个常用的文件同步工具,它通过网络复制文件和目录
wsrep_sst_method=rsync
# 同步认证的用户与密码信息【可选】
wsrep_sst_auth=root:root
启动集群
启动集群中任意一个节点,以81为例
# 底层调用的是mysqld --wsrep-new-cluster命令
galera_new_cluster
启动其它节点
82、83启动
# 底层调用的是/bin/systemctl start mariadb.service命令,会自动加入集群中
systemctl start mariadb.service
82、83查看进程信息
ps aux | grep mysql
集群命令
登录数据库
mysql #登录数据库,还未配置root密码可直接登录
查看集群成员数
SHOW STATUS LIKE"wsrep_cluster_size"
查看集群信息
show status like 'wsrep_cluster%';
查看wsrep信息
#wsrep_connected 和 wsrep_ready 都是on状态
SHOW STATUS LIKE 'wsrep%';
查看集群中的主机IP
show variables like 'wsrep_%address%';
授权【在其中一台授权即可,会自动同步】
#用于非用一网段下测试【可选】
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.5.%' IDENTIFIED BY 'root';
select user,host,password from mysql.user ;
FLUSH PRIVILEGES;
查看数据库使用的字符集
show variables like '%char%';
允许最大的连接数
show variables like "max_connections";
查看当前的连接数
show status like '%connect%';
查看被锁表
show open tables where in_use>0;
集群停止
#依次在每个节点上停止mariadb即可
systemctl stop mariadb
Galera集群停止和运行注意:
关机顺序为A>B>C,那么开机顺序则为C>B>A,且开机时的C应执行 galera_new_cluster
,后面启动的节点用 systemctl start mariadb
正常启动数据库
若忘记关机顺序,则在启动之前,应通过命令 cat /var/lib/mysql/grastate.dat
查看 safe_to_bootstrap
字段的数值,若发现有节点的数值为1,则首先通过 galera_new_cluster
启动该节点,其他节点用 systemctl start mariadb
正常启动,若所有节点的 /var/lib/mysql/grastate.dat
文件里,safe_to_bootstrap
字段都为0,则可以根据实际情况选择一个节点手动将该数值修改为1,而后通过 galera_new_cluster
启动该节点,其他节点用systemctl start mariadb
正常启动,
cat /var/lib/mysql/grastate.dat # 查看 safe_to_bootstrap
vi cat /var/lib/mysql/grastate.dat # 如果全为0 手动修改任意节点 safe_to_bootstrap 为1
galera_new_cluster # 在 safe_to_bootstrap 为1的节点上执行集群运行命令
systemctl start mariadb # 在 safe_to_bootstrap 为0的节点上启动mariadb 自动加入 Galera 集群
标签:Gelara,Galera,mariadb,wsrep,Cluster,galera,集群,Mariadb,节点
From: https://blog.csdn.net/weixin_43267623/article/details/144853543