这里是文章模块栏目内容页
MySQL InnoDB Cluster 集群搭建(1)-MGR组复制
  • 三台机器(Centos7.x系统),博主使用虚拟机搭建。

  • 安装网络工具

yum install -y net-tools


  • 修改hostname

hostnamectl set-hostname node1
bash

hostnamectl set-hostname node2
bash

hostnamectl set-hostname node3
bash
  • 关闭selinux

#临时关闭setenforce 0#永久关闭sed -i 's/enforcing/disabled/' /etc/selinux/config
  • 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
  • 修改三台机器的hosts

cat >> /etc/hosts << EOF192.168.30.128 node1192.168.30.129 node2192.168.30.130 node3EOF


三个机器上安装MYSQL-SERVER
  • 添加 MySQL Yum 存储库

下载yum源(MySQL :: Download MySQL Yum Repository

将文件传到服务器。

使用rz指令上传

yum install -y lrzsz

安装

yum install -y mysql80-community-release-el7-4.noarch.rpm

安装mysql-server:

yum install -y mysql-community-server

启动mysql

systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld

显示如下信息代表各个机器上的mysql实例安装成功

此时每个机器上的mysql实例,密码都是系统初始化的,并且不相同。

先通过指令查看下

sudo grep 'temporary password' /var/log/mysqld.log


登录到mysql:

mysql -uroot -p#输入密码

修改msyql密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'gWL855wrkWe5XA==';


MGR组复制配置

我们有三个节点,我将node1作为初始化主节点。两外两个作为从节点

  • 配置node1、node2、node3

node1

#存储引擎设置
##Group Replication 数据必须存储在InnoDB 事务引擎中, 所以要设置禁用其他引擎
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
##服务编号
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
##mysql 8.0.20需要之前(包括)需要设置
##binlog_checksum=NONE
#8.0.3 早期版本要配置如下
#log_bin=binlog
#log_slave_updates=ON
#binlog_format=ROW
#master_info_repository=TABLE
#relay_log_info_repository=TABLE
#transaction_write_set_extraction=XXHASH64


#Group Replication 设置
#将 Group Replication 插件添加到服务器在启动时加载的插件列表中。这在生产部署中比手动安装插件更可取。
plugin_load_add='group_replication.so'
#组名称,必须是uuid,官方建议使用select uuid() 生成,其他方式也可。
group_replication_group_name="1adc90a8-1932-11ec-8156-5227ce957eb9"
#插件在系统启动时是否自动启动,它确保可以在手动启动插件之前配置服务器
group_replication_start_on_boot=off
#本服务通信地址
group_replication_local_address= "node1:33061"
#成员以及内部通信地址
group_replication_group_seeds= "node1:33061,node2:33061,node3:33061"
#指示插件是否引导group
group_replication_bootstrap_group=off

node2

#存储引擎设置
##Group Replication 数据必须存储在InnoDB 事务引擎中, 所以要设置禁用其他引擎
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
##服务编号
server_id=2
gtid_mode=ON
enforce_gtid_consistency=ON
##mysql 8.0.20需要之前(包括)需要设置
##binlog_checksum=NONE
#8.0.3 早期版本要配置如下
#log_bin=binlog
#log_slave_updates=ON
#binlog_format=ROW
#master_info_repository=TABLE
#relay_log_info_repository=TABLE
#transaction_write_set_extraction=XXHASH64


#Group Replication 设置
#将 Group Replication 插件添加到服务器在启动时加载的插件列表中。这在生产部署中比手动安装插件更可取。
plugin_load_add='group_replication.so'
#组名称,必须是uuid,官方建议使用select uuid() 生成,其他方式也可。
group_replication_group_name="1adc90a8-1932-11ec-8156-5227ce957eb9"
#插件在系统启动时是否自动启动,它确保可以在手动启动插件之前配置服务器
group_replication_start_on_boot=off
#本服务通信地址
group_replication_local_address= "node2:33061"
#成员以及内部通信地址
group_replication_group_seeds= "node1:33061,node2:33061,node3:33061"
#指示插件是否引导group
group_replication_bootstrap_group=off

node3

#存储引擎设置
##Group Replication 数据必须存储在InnoDB 事务引擎中, 所以要设置禁用其他引擎
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
##服务编号
server_id=3
gtid_mode=ON
enforce_gtid_consistency=ON
##mysql 8.0.20需要之前(包括)需要设置
##binlog_checksum=NONE
#8.0.3 早期版本要配置如下
#log_bin=binlog
#log_slave_updates=ON
#binlog_format=ROW
#master_info_repository=TABLE
#relay_log_info_repository=TABLE
#transaction_write_set_extraction=XXHASH64


#Group Replication 设置
#将 Group Replication 插件添加到服务器在启动时加载的插件列表中。这在生产部署中比手动安装插件更可取。
plugin_load_add='group_replication.so'
#组名称,必须是uuid,官方建议使用select uuid() 生成,其他方式也可。
group_replication_group_name="1adc90a8-1932-11ec-8156-5227ce957eb9"
#插件在系统启动时是否自动启动,它确保可以在手动启动插件之前配置服务器
group_replication_start_on_boot=off
#本服务通信地址
group_replication_local_address= "node3:33061"
#成员以及内部通信地址
group_replication_group_seeds= "node1:33061,node2:33061,node3:33061"
#指示插件是否引导group
group_replication_bootstrap_group=off

分别重启三个服务器的mysql。


systemctl restart mysqld
  • 配置分布式恢复凭据(连接mysql),三台机器先执行primary(node1),node2和node3的顺序没有影响

mysql -uroot -pgWL855wrkWe5XA==

mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'gWL855wrkWe5XA==';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;

实例加入集群需要密钥

mysql> set global group_replication_recovery_get_public_key=on;

mysql> CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='gWL855wrkWe5XA==' FOR CHANNEL 'group_replication_recovery';


接下来要特别注意,primary和sencondary的引导是不一样的。

primary(node1):

mysql> SET GLOBAL group_replication_bootstrap_group=ON;mysql> START GROUP_REPLICATION USER='rpl_user', PASSWORD='gWL855wrkWe5XA==';mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

secondary(node2,node3)

mysql> START GROUP_REPLICATION USER='rpl_user', PASSWORD='gWL855wrkWe5XA==';


为什么呢?请自行看官方文档说明,其实从参数名上也能看出来。

三台节点都执行完毕后。

查看组成员信息:

mysql> SELECT * FROM performance_schema.replication_group_members \G

至此组复制安装完毕。


接下来测试:

再primary节点(node1)创建表。并insert数据。

mysql> CREATE DATABASE test;mysql> USE test;mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);mysql> INSERT INTO t1 VALUES (1, 'Luis');

在其他节点上查询数据(node2,node3)即可

接下来配置innerDb集群。后续会发布,敬请关注。



梦想越是美丽,就越是显得遥不可及。可奇怪的是,一旦你下定了决心,很快地,那些梦想就一一成为了现实!