Current user:root@localhost
SSL: Not in use
Server version:8.0.18 MySQL Community Server - GPL
Protocol version:10
Connection: Localhost via UNIX socket

MySQL InnoDB Cluster高可用框架,主要由以下三个组件构成:
MySQL Shell
MySQL Router
MySQL Group Replication

MySQL InnoDB Cluster架构图
MySQL Shell 统一进行集群管理和操作的客户端
扩展化mysql 客户端工具
为所有MySQL相关的任务提供了一个直观、灵活、功能强大的接口,支持快速搭建
和管理InnoDB Cluster, 配置MySQL Router
支持多种交互语言:
具备JavaScript、Python、SQL等可编程能力
开放完整的ADMIN API接口:
很容易用一种自描述的自然语言来创建,监控和管理包括MySQL Router在内的
MySQL InnoDB集群,屏蔽复杂结构
简单易用

MySQL Router 使应用程序能透明的使用高可用数据库
客户端透明连接路由
确保客户端请求是负载平衡的,并在数据库故障时路由到正确的服务器
无状态的设计模式:
简化Router高可用,可以作为应用程序的一部分进行部署
为MGR量身打造

MySQL Group Replication
构建MySQLInnoDB Cluster集群的核心组件
向集群的所有成员复制数据,同时提供容错、自动故障转移和弹性扩缩节点
基于Paxos算法,实现数据复制的一致性
插件化设计,没有第三方组件依赖
维护分布式执行内容
自动侦测和处理冲突
处理分布式集群的恢复
推送事务给其它组员
接收其它组员的事务并处理
决定事务的最终结果commit/rollback

单主模式
MGR集群中各个MySQL数据库节点里只有一个主节点对外提供读写服务,其它节点作为备用节点,可以对外提供读服务,如果主节点down掉,MGR会从其它的节点中选举出一个作为主节点对外提供服务,路由节点会实时监控集群的状态变化,将前端的连接路由到正常的服务节点上,无需人工参与。

多主模式:
MGR集群中各个MySQL数据库节点角色都是一样的,都可以对外提供读写服务,如果其中一个主节点down掉,其它的主节点是不受影响的,路由节点会实时监控集群的状态变化,将前端的连接路由到正常的服务节点上,无需人工参与。

金融级高可用
集群高可用性,具有更好的容错度,搭建和配置都很简单,原生方案,官方支持,不依赖与外部工具、脚本
弹性复制
节点可以弹性动态扩容/减少(自动感知),每个群组最多具有9个成员,SHELL操作简单,克隆部署非常快,支持分布式恢复和增量式恢复
避免脑裂
MGR 会自动检测网络分区,避免出现脑裂问题
完善的监控视图
内置有几十个的集群状态信息视图,可用MySQLEnterprise Monitor展示集群状态
完全兼容云架构
原生的MySQL数据库架构,对云支持优化,上云/下云无需调整架构
单主和多主模式
支持单主和多主模式,多主模式下群组内所有的成员都可以进行数据写入、读取操作
http://mysqlhighavailability.com/performance-evaluation-mysql-5-7-group-replication/

组复制提供了异步复制吞吐量的80%以上性能,Galera的吞吐量只达到异步复制吞吐量的46%(3个成员)到38%(9个成员)。
开启数据持久性在组复制和异步复制上几乎没有开销。在Galera上开启持久性时只能达到异步复制吞吐量的30%。
在组复制和异步复制上,当成员数增加到9台服务器时,吞吐量几乎稳定,这使得扩展到大型组非常有保证。
组复制可提供Galera最大吞吐量的2倍左右,而开启数据持久性则可达到3倍左右。
单个DataCenter,可按照MySQL InnoDB Cluster标准架构进行部署。

在多个DataCenter中部署MySQL InnoDB Cluster,多个DC间采用异步复制的模式进行数据同步,如果是同城DC的话,为降低成本,可考虑将单个DC中的节点部署在同城DC中,切换优先切换同一个DC中的节点。

软件信息:
| 软件版本 |
8.0.18 MySQL Community Server - GP |
8.0.18 MySQL Community Shell - GP |
8.0.18 MySQL Community Router - GP |
机器信息:
| 机器名 | IP | 端口 |
| dkf01 | 10.0.0.11 | 3307 |
| dkf02 | 10.0.0.12 | 3307 |
| dkf03 | 10.0.0.13 | 3307 |
Step 1: 在3台机器上分别安装好MySQL数据库软件,并启动,参数文件my.cnf中需增加组复制参数,见最后

Step 2: 在3台机器上分别安装好MySQLShell软件
[root@dkf01 ~]# rpm -ivh mysql-shell-8.0.18-1.el7.x86_64.rpmwarning: mysql-shell-8.0.18-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEYPreparing... ################################# [100%]Updating installing...1:mysql-shell-8.0.18-1.el7 ################################# [100%][root@dkf01 ~]#
Step 3: 分别登录三台数据库实例,创建管理用户
SET SQL_LOG_BIN=0;CREATE USER root@'%' IDENTIFIED BY 'root1234';GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO 'root'@'%' WITH GRANT OPTION;GRANT BACKUP_ADMIN, BINLOG_ADMIN, CONNECTION_ADMIN, ENCRYPTION_KEY_ADMIN, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, REPLICATION_SLAVE_ADMIN, RESOURCE_GROUP_ADMIN, RESOURCE_GROUP_USER, ROLE_ADMIN, SET_USER_ID, SYSTEM_VARIABLES_ADMIN, XA_RECOVER_ADMIN ON *.* TO 'root'@'%' WITH GRANT OPTION;FLUSH PRIVILEGES;SET SQL_LOG_BIN=1;
Step 4: 登录mysqlsh客户端,连接到第一个节点

Step 5: 检查实例配置是否满足集群配置条件
dba.configureLocalInstance()dba.checkInstanceConfiguration()

Step 6: 执行创建集群的命令
dba.createCluster('dkfCluster')

Step 7-1: 加入其它两个实例,组成三节点集群
var cluster=dba.getCluster()cluster.addInstance('root@dkf02:3307')

Step 7-2: 确定第二个节点是空的节点,我们选择Clone,让它自动从当前节点克隆所有数据到新的节点
验证节点配置信息
克隆集群节点数据到新节点
重启新实例节点
进行恢复操作
完成克隆

Step 8: 看下当前集群信息

Step 9 : 使用同样的方式增加第三个节点,过程略
Step 10 : 查看三节点的集群信息


Step 11 : 数据库中也可以看集群信息

附1: 数据库配置文件my.cnf中需增加如下信息
transaction_write_set_extraction=XXHASH64loose-group_replication_group_name="a439d208-8776-11eb-8008-000c292ba342"loose-group_replication_start_on_boot=offloose-group_replication_local_address="10.0.0.11:33071"loose-group_replication_group_seeds="10.0.0.11:33071,10.0.0.12:33071,10.0.0.13:33071"loose-group_replication_bootstrap_group=offloose-group_replication_single_primary_mode = onloose-group_replication_auto_increment_increment=1loose-group_replication_ip_whitelist="10.0.0.0/24"
附2: Cluster常用管理命令
请保证集群中的数据库表都存在主键,不然集群会挂掉;
dba.getCluster(); ---查看集群名cluster.status(); ---查看集群状态dba.checkInstanceConfiguration('root@10.0.0.11:3307') ---检查节点状态是否正常dba.configureLocalInstance() ; ---检查/etc/my.cnf是否正常var cluster = dba.createCluster(‘dkfCluster’); ---创建一个名为dkfCluster的集群dba.createCluster(‘dkfCluster’); ---创建一个名字为dkfCluster的集群cluster.addInstance(‘root@dkf02:3307’); ---集群添加节点cluster.removeInstance(“dkf03:3307”); ---移除节点dba.rebootClusterFromCompleteOutage() ---机器关掉,重启所有节点cluster.rejoinInstance(‘root@dkf03:3307’) ---重新加入此节点到集群cluster.switch_to_multi_primary_mode() ---将集群调整为多主架构cluster.switch_to_single_primary_mode ---将集群调整为单主架构dba.rebootClusterFromCompleteOutage(‘dkfCluster’); ---重启集群
MySQL InnoDB Cluster架构在部署和运维过程中,比传统的高可用架构要方便很多,借助MySQL Shell和MySQL Router工具可以很快的搭建好集群对业务提供服务,大大方便了运维人员,降低了工作量,而且高可用架构能够很好的保障数据的一致性和业务的连续性。真的可谓"倚天一出,谁与争锋!"

完
=end=





