三台机器(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集群。后续会发布,敬请关注。
梦想越是美丽,就越是显得遥不可及。可奇怪的是,一旦你下定了决心,很快地,那些梦想就一一成为了现实!
实用工具: JSON字符串格式化 | js压缩代码格式化工具 | 异步XMLHttpRequests库axios.js文档 | vue-axios文档 | Go语言文档