MySQL :: MySQL Shell 8.0 :: 7 MySQL InnoDB Cluster
基本概述
InnoDB Cluster是MySQL官方实现高可用+读写分离的架构方案,其中包含以下组件
- MySQL Group Replication,简称MGR,是MySQL的主从同步高可用方案,包括数据同步及角色选举
- Mysql Shell 是InnoDB Cluster的管理工具,用来创建和管理集群
- Mysql Router 是业务流量入口,支持对MGR的主从角色判断,可以配置不同的端口分别对外提供读写服务,实现读写分离
MySQL Router与组复制和MySQL Shell高度整合,只有将其与组复制和MySQL Shell共同使用,才能够称为InnoDB Cluster。
集群架构

nnoDB Cluster将三个MySQL数据库实例构成一个高可用集群。其中一个实例是具有读/写能力的主要成员,其他两个实例是具有只读能力的次要成员。组复制将数据从主要成员复制到次要成员。MySQL Router将客户端应用程序连接到集群的主要成员。
搭建一主两从InnoDB集群
1. 安装3个数据库实例
可以利用docker快速部署3个MySQL实例

# 创建组复制的网络 保证三个mysql容器之间可以通过容器名访问
docker network create --driver bridge --subnet 172.19.0.0/24 --gateway 172.19.0.1 mgr-network
mkdir -p /mysql/mgr/node1/data /mysql/mgr/node1/conf /mysql/mgr/node1/log
mkdir -p /mysql/mgr/node2/data /mysql/mgr/node2/conf /mysql/mgr/node2/log
mkdir -p /mysql/mgr/node3/data /mysql/mgr/node3/conf /mysql/mgr/node3/log
#以mgr-node1配置为例,创建/mysql/mgr/node1/conf/custom.cnf,添加以下配置:
vim /mysql/mgr/node1/conf/custom.cnf
[mysql]
# 设置mysql客户端默认编码
default-character-set=utf8
[mysqld]
#指定sever_id,三个Mysql实例需要分别改为对应的sever_id
server_id=1
# 必须开启GTID支持
gtid_mode=ON
enforce_gtid_consistency=ON
# 启用二进制日志
log-bin=mysql-bin
#启用并行复制
binlog_transaction_dependency_tracking=WRITESET
replica_preserve_commit_order=ON
replica_parallel_type=LOGICAL_CLOCK
transaction_write_set_extraction=XXHASH64
#对于Group Replication,数据必须存储在InnoDB事务存储引擎中
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
# mgr-node2和mgr-node3同上,注意配置文件路径和修改server_id
vim /mysql/mgr/node2/conf/custom.cnf
[mysql]
# 设置mysql客户端默认编码
default-character-set=utf8
[mysqld]
#指定sever_id,三个Mysql实例需要分别改为对应的sever_id
server_id=2
# 必须开启GTID支持
gtid_mode=ON
enforce_gtid_consistency=ON
# 启用二进制日志
log-bin=mysql-bin
#启用并行复制
binlog_transaction_dependency_tracking=WRITESET
replica_preserve_commit_order=ON
replica_parallel_type=LOGICAL_CLOCK
transaction_write_set_extraction=XXHASH64
#对于Group Replication,数据必须存储在InnoDB事务存储引擎中
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
vim /mysql/mgr/node3/conf/custom.cnf
[mysql]
# 设置mysql客户端默认编码
default-character-set=utf8
[mysqld]
#指定sever_id,三个Mysql实例需要分别改为对应的sever_id
server_id=3
# 必须开启GTID支持
gtid_mode=ON
enforce_gtid_consistency=ON
# 启用二进制日志
log-bin=mysql-bin
#启用并行复制
binlog_transaction_dependency_tracking=WRITESET
replica_preserve_commit_order=ON
replica_parallel_type=LOGICAL_CLOCK
transaction_write_set_extraction=XXHASH64
#对于Group Replication,数据必须存储在InnoDB事务存储引擎中
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
#运行mysql容器
# 为了便于测试,启动容器时指定好IP、hostname
docker run -d \
--name mgr-node1 \
--privileged=true \
--restart=always \
--ip 172.19.0.10 \
--hostname mgr-node1 \
--add-host mgr-node2:172.19.0.11 \
--add-host mgr-node3:172.19.0.12 \
--network mgr-network \
-p 3321:3306 \
-v /mysql/mgr/node1/data:/var/lib/mysql \
-v /mysql/mgr/node1/conf:/etc/mysql/conf.d \
-v /mysql/mgr/node1/log:/logs \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai mysql:8.0.27 \
--lower_case_table_names=1
docker run -d \
--name mgr-node2 \
--privileged=true \
--restart=always \
--ip 172.19.0.11 \
--hostname mgr-node2 \
--add-host mgr-node1:172.19.0.10 \
--add-host mgr-node3:172.19.0.12 \
--network mgr-network \
-p 3322:3306 \
-v /mysql/mgr/node2/data:/var/lib/mysql \
-v /mysql/mgr/node2/conf:/etc/mysql/conf.d \
-v /mysql/mgr/node2/log:/logs \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai mysql:8.0.27 \
--lower_case_table_names=1
docker run -d \
--name mgr-node3 \
--privileged=true \
--restart=always \
--ip 172.19.0.12 \
--hostname mgr-node3 \
--add-host mgr-node1:172.19.0.10 \
--add-host mgr-node2:172.19.0.11 \
--network mgr-network \
-p 3323:3306 \
-v /mysql/mgr/node3/data:/var/lib/mysql \
-v /mysql/mgr/node3/conf:/etc/mysql/conf.d \
-v /mysql/mgr/node3/log:/logs \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai mysql:8.0.27 \
--lower_case_table_names=1
# 在宿主机上配置mysql容器的ip和host映射
vim /etc/hosts
172.19.0.10 mgr-node1
172.19.0.11 mgr-node2
172.19.0.12 mgr-node3
所有实例分别配置远程访问
# 以node1为例
docker exec -it mgr-node1 /bin/bash
mysql -u root -p123456
#进入mysql执行
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
2. 安装mysqlrouter和安装mysqlshell
MySQL Router是MySQL Proxy的后继产品,它提供了MySQL协议的路由器功能,可以用来实现读写分离、负载均衡和高可用性解决方案。
安装mysql-router
下载地址:https://downloads.mysql.com/archives/router/
# 以centos7为例
wget https://downloads.mysql.com/archives/get/p/41/file/mysql-router-community-8.0.27-1.el7.x86_64.rpm
rpm -ivh mysql-router-community-8.0.27-1.el7.x86_64.rpm
安装mysql-shell
下载地址:MySQL :: Download MySQL Shell (Archived Versions)
# 以centos7为例
wget https://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.27-1.el7.x86_64.rpm
rpm -ivh mysql-shell-8.0.27-1.el7.x86_64.rpm
# 远程连接mysql
mysqlsh root@192.168.65.223:3321 --js
mysqlsh root@mgr-node1:3306 --j

最低0.47元/天 解锁文章
1261

被折叠的 条评论
为什么被折叠?



