MySQL Galera Cluster集群搭建

MySQL Galera Cluster集群搭建

Galera Cluster是由Codership开发的MySQL多主结构集群,这些主节点互为其它节点的从节点。不同于MySQL原生的主从异步复制,Galera采用的是多主同步复制,并针对同步复制过程中,会大概率出现的事务冲突和死锁进行优化,就是复制不基于官方binlog而是Galera复制插件,重写了wsrep api。

一.下载

    需要从galera官网下载重写了wsrep api版本的MySQL,至少需要三个节点,这里用三台CentOS7的虚拟机为例安装。

https://galeracluster.com/downloads/

最后一个test可以不用。

  • 二. 安装配置集群

2.1配置SELinux

        如果在服务器上启用了SELinux(增强安全性的Linux),则它可能会阻止mysqld执行所需的操作。

su
gedit /etc//selinux/config

或者用下面语句直接修改

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

需重启生效。

2.2 关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

2.3 安装

如果系统已装MySQL或mariadb,需要先卸载掉。CentOS7默认有装mariadb的。

systemctl stop mariadb
rpm -qa |grep mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

如果装有mysql也用同样的方法卸载掉。

systemctl stop mysqld
rpm -qa |grep mysql

卸载完后删掉以前的数据和配置文件。

rm -rf /etc/my.cnf.rpmsave;
rm -rf /etc/my.cnf.d/;
rm -rf /var/log/mysqld.log;
rm -rf /var/lib/mysql/;

先安装依赖包

yum -y install socat stunnel

我在centos7上需要依赖这两个包,具体也可以根据后面安装MySQL时提示依赖包在进行安装。

有的包有依赖关系,按下面顺序安装即可。

rpm -ivh mysql-wsrep-common-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-libs-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-client-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-libs-compat-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-server-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-devel-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh galera-3-25.3.37-1.el7.x86_64.rpm;

systemctl start mysqld

安装完后即可启动服务,需要的话也可以用以下设置开机启动systemctl enable mysqld

2.4 修改root密码

Mysql安装后自动给root生成一个随机密码,保存在/var/log/mysqld.log

输入cat /var/log/mysqld.log | grep password查看

mysql -uroot -p’ pglor5E#XX>6’

进入MySQL管理命令,修改密码策略

set global validate_password_policy=0;
set global validate_password_length=0;
alter user 'root'@'localhost' identified by '123456';

2.5 新建同步用户

由于MySQL默认的root用户只是用来修改本机配置,我们需要新建一个用户用来同步数据。

create user 'vivi'@'%' IDENTIFIED BY '123456';

授予权限

grant all on *.* to 'vivi'@'%';

2.6 配置galera集群

编辑/etc/my.cnf,三台服务器配置是不同的

服务器1

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='node1'
wsrep_node_address='192.168.79.130'
wsrep_sst_auth=vivi:123456
wsrep_sst_method=rsync

服务器2

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://'
wsrep_node_name='node2'
wsrep_node_address='192.168.79.146'
wsrep_sst_auth=vivi:123456
wsrep_sst_method=rsync

服务器3

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://'
wsrep_node_name='node3'
wsrep_node_address='192.168.79.150'
wsrep_sst_auth=vivi:123456
wsrep_sst_method=rsync

其中

server_id每台都不重复

wsrep_cluster_name一个集群用同一个名字

wsrep_node_name每台都不重复

wsrep_node_address本机IP地址

wsrep_sst_auth前面创建的用于同步的用户名和密码

wsrep_cluster_address这个比较重要,服务器1设置为'gcomm://'即可,服务器2和3需等1开启之后,再去设置成除本机之外的另外两台IP地址

服务器2设置为'gcomm:// 192.168.79.130, 192.168.79.150'

服务器3设置为'gcomm:// 192.168.79.130, 192.168.79.146'

2.7 启动集群

启动第一个节点

启动第一个节点以前,其节点的配置文件里面,不能配置其它节点的ip,即 wsrep_cluster_address=gcomm:// 这样就行了,否则会导致启动报错。待集群启动后,再修改它的配置文件,把其他节点的ip补充上去。

启动第一个节点,该命令会启动本机的 mysqld 服务,命令只在集群第一个节点启动时使用,因为该脚本中带有一个参数:–wsrep-new-cluster,代表新建集群。

/usr/bin/mysqld_bootstrap

启动其它节点

先配置其他节点的wsrep_cluster_address,确保节点1开启之后,再去设置成除本机之外的另外两台IP地址

服务器2设置为'gcomm:// 192.168.79.130, 192.168.79.150'

服务器3设置为'gcomm:// 192.168.79.130, 192.168.79.146'

逐个启动其它节点的服务。

systemctl restart mysqld

2.8 查看集群状态

mysql -uroot -p123456

登录MySQL

show status like 'wsrep%';

其中

wsrep_local_state_comment Synced已同步

wsrep_cluster_size 3 集群服务器数量3

说明启动成功

2.9 数据同步验证

在节点1

create database test1;
show databases;

然后在节点2和3查看

show databases;

结果一致。

继续在节点2操作

use test1;
create table t1(a int);
insert into t1 values(1);

然后在节点1和3查看

select * from test1.t1;

数据一致。

Enjoy it!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Galera Cluster 是一个基于 MySQL 的高可用性解决方案,它使用多主复制来提供高可用性和容错性。下面是详细的 Galera MySQL 搭建过程: 1. 准备环境 首先,需要在每个节点上安装 MySQLGalera Cluster 插件。可以从 Galera Cluster 官网下载相应版本的插件,然后按照官方文档的说明进行安装。 2. 配置节点 在每个节点上,需要修改 MySQL 配置文件 my.cnf,以启用 Galera Cluster 插件和相应的设置。以下是一个示例配置文件: ``` [mysqld] binlog_format=ROW default-storage-engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_provider_options="gcache.size=300M" wsrep_cluster_name="my_cluster" wsrep_cluster_address="gcomm://node1_ip,node2_ip,node3_ip" wsrep_node_address="node_ip" wsrep_node_name="node_name" ``` 其中,wsrep_cluster_address 是一个逗号分隔的节点列表,用于指定集群中所有节点的 IP 地址。wsrep_node_address 是当前节点的 IP 地址,wsrep_node_name 是当前节点的名称。 3. 启动节点 在每个节点上,启动 MySQL 服务。如果一切正常,可以在 MySQL 日志中看到 Galera Cluster 插件的输出信息。例如: ``` [Note] WSREP: Service initialized: wsrep-servicename version: 25.3.15-1.pv.el7.centos [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification. [Note] WSREP: Assign initial position for certification: 0, protocol version: -1 [Note] WSREP: Service thread queue flushed. [Note] WSREP: Assign initial position for certification: 1, protocol version: -1 [Note] WSREP: Service thread queue flushed. [Note] WSREP: Member 0.0 (node1) requested state transfer from '*any*'. Selected 1.0 (node2)(SYNCED) as donor. [Note] WSREP: Shifting PRIMARY -> JOINER (TO: 1) [Note] WSREP: Requesting state transfer: success, donor: 1 [Note] WSREP: GCache history reset: old(00000000-0000-0000-0000-000000000000:0) -> new(0bf9c446-8b85-11eb-a024-2a2ae2dbcce4:1) [Note] WSREP: Node 0.0 (node1) joined cluster at position 1 with UUID 0bf9c446-8b85-11eb-a024-2a2ae2dbcce4 [Note] WSREP: Shifting JOINER -> JOINED (TO: 1) [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification. [Note] WSREP: REPL Protocols: 9 (4, 2) [Note] WSREP: Assign initial position for certification: 1, protocol version: 4 [Note] WSREP: Service thread queue flushed. [Note] WSREP: Member 0.0 (node1) synced with group. [Note] WSREP: Shifting JOINED -> SYNCED (TO: 1) [Note] WSREP: Synchronized with group, ready for connections ``` 4. 测试节点 在任意一个节点上,连接到 MySQL 服务,创建一个测试数据库和表,并在多个节点上插入数据,以测试数据同步和故障转移功能。如果一切正常,可以在集群中的任意节点上查看到相同的数据。 5. 监控集群 为了保证 Galera Cluster 的稳定运行,需要实时监控集群状态和性能指标。可以使用第三方工具或自行编写脚本来实现监控功能。 总之,Galera Cluster 是一个非常强大的高可用性解决方案,可以为 MySQL 数据库提供可靠的容错和故障转移功能。但是,它的安装和配置比较复杂,需要仔细阅读官方文档并按照指示进行操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值