Oracle公共云中的MySQL InnoDB集群(2)

在本系列的第一部分 Oracle公共云中的MySQL InnoDB集群我们学习了如何使用Oracle Cloud配置InnoDB集群。 本文我们将了解如何以及何时使用MySQL Shell中提供的一些高级功能。

验证实例

首先需要验证一个特定的MySQL Server实例是否做好准备成为InnoDB集群的一部分。使用dba.checkInstanceConfiguration()函数:

mysql-js> dba.checkInstanceConfiguration('root@ic01-mysql-1:3306');

将看到以下三个最终状态结果之一。

1、实例已经是集群的一部分

2.实例还没有准备好进行InnoDB集群的使用

将看到显示未满足要求的列表:

mysql-js> dba.checkInstanceConfiguration('root@localhost:3306');

3、该实例已准备好被InnoDB集群使用

以下实例满足作为InnoDB集群一部分的所有要求:

mysql-js> dba.checkInstanceConfiguration('root@localhost:3306');

注意:在以上验证中,远程主机和本地主机都使用相同的函数进行验证。

手动重新添加实例

如果一个实例未配置为自动重新加入副本集/集群 - 可以通过在给定实例上执行dba.configureLocalInstance()来实现),那么每当实例出于任何原因离开副本集/集群时,将需要手动重新加入。

要手动将实例重新加入集群,可以连接到作为InnoDB集群的配置部分的一个特定主机,或者最好连接到为集群配置的MySQL路由器实例,这样能确保连接到目前在线的R / W成员 - 如下所示:

mysqlsh shell.connect('root@localhost:6446');

然后,运行以下命令手动重新加入该实例:

mysql-js> var cluster = dba.getcluster('mycluster'); mysql-js> cluster.rejoinInstance('root@ic01-mysql-1:3306');

一旦将实例添加回集群,验证是否再次在线:

mysql-js> cluster.status();

在仲裁实例缺失时恢复集群当复制环境中的大多数实例变为UNREACHABLE时,集群将不再具有执行任何成员身份更改或执行R / W用户事务的仲裁实例。 在这段时间内,只能执行只读查询,以保持系统的一致性和数据的安全。在以下屏幕截图中,可以看到一个丢失其仲裁的集群:

由于缺少仲裁,执行以下功能添加实例会导致错误:

为了处理这种情况,可以使用cluster.forceQuorumUsingPartitionOf()API调用,但使用之前,要确保所有UNREACHABLE实例都真正脱机, 避免出现脑裂。将有两个组分别接收更新。

mysql-js> cluster.forceQuorumUsingPartitionOf('root@localhost:3310');

强制仲裁功能完成后,可以查看集群的状态:

mysql-js> cluster.status();

可以看到,实例将其状态从UNREACHABLE更改为MISSING,现在集群可以执行写入操作。 现在可以添加一个新的实例,例如:

mysql-js> cluster.addInstance('root@localhost:3313');

再次检查集群状态,会注意到新实例已添加到集群:

一旦知道(丢失的)实例重新online,可以在实例没有持久配置以自动重新加入群集的情况下手动将其重新加入群集:

mysql-js> cluster.rejoinInstance('root@localhost:3311');

mysql-js> cluster.rejoinInstance('root@localhost:3312');

现在,集群中的所有实例都是ONLINE:

mysql-js> cluster.status();

在所有成员offline时恢复集群

当群集的所有成员因为某些原因离开时,只有一种方式可以恢复群集:再次启动它并重新加入其余的节点。 为群集选择初始引导/种子实例,并根据群集元数据中记录的先前状态对其进行恢复。

要完成此操作,需要打开与组的最后一个RW / PRIMARY成员的连接(因为该实例应该保证在该组内具有GTID超集),并执行命令dba.rebootClusterFromCompleteOutage()。

如果尝试通过连接到引导实例并执行dba.getCluster()命令来尝试获取集群状态,则会收到一条错误,指出该功能不适用于独立实例:

mysql-js> shell.connect('root@localhost:3310'); mysql-js> cluster = dba.getCluster();

所以现在当你使用API调用来重新启动集群。 系统将提示使用交互式邮件自动重新加入作为群集一部分的实例。 回答“y”自动添加:

mysql-js> var cluster = dba.rebootClusterFromCompleteOutage();

组恢复后,验证集群的状态:

mysql-js> cluster.status();

结论

现在已经获得了从单个实例或完整群集中断的情况下恢复所需的知识。 可以看到,这些功能易于使用,直观,旨在涵盖在高可用性环境中可能导致问题的主要场景。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-05-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iOS 开发杂谈

iOS多线程之一:基本概念

进程:就是一个正在执行的程序。 线程:是执行程序最基本的单元,它有自己栈和寄存器。

431
来自专栏武培轩的专栏

HTTP 0.9 HTTP 1.0 HTTP 1.1 HTTP 2.0区别

HTTP协议 :Hyper Text Transfer Protocol(超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文...

2755
来自专栏c#开发者

消息队列(Message Queue)简介及其使用

消息队列(Message Queue)简介及其使用 利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方...

3808
来自专栏Golang语言社区

select多路选择的模拟实现

有时候有这样一种应用场景:需要等待多个事件到达,然后返回尽可能多的事件;如果没有事件到达就阻塞等待。例如服务器等待客户端建立连接,或者等待客户端数据等就有这种应...

3175
来自专栏我爱编程

Day23网络编程

TCP编程 Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口...

2784
来自专栏腾讯Bugly的专栏

《ios爆内存问题解决方案-OOMDetector组件》

组件介绍 在iOS App中,有两种闪退是让人深恶痛绝的,一种是异常退出,另外一种是爆内存杀进程。前者已经有完备的工具协助定位分析,而后者却一直是业界的难以治愈...

4454
来自专栏微服务生态

缓存穿透、缓存并发、缓存失效之思路变迁

我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题:

1094
来自专栏决胜机器学习

优化页面访问速度(三) ——服务端优化

服务端的优化,主要可以通过消息队列、减少数据库请求(缓存)、并发处理、页面静态化等方式处理。

732
来自专栏企鹅号快讯

浅谈几种SLB技术的实现

今天小普和大家分享下,在最近的学习过程中,关于几个负载均衡技术的理解,以及几个实现的原理和关键点,希望对各位读者朋友有收获。 1 http重定向协议实现负载均衡...

2625
来自专栏皮振伟的专栏

[linux][statethread]协程库ST技术分析

前言: 在IO密集型的场景下,尤其是互联网后台,经常会使用epoll等IO复用技术。鉴于直接使用epoll的代码阅读性和开发效率等原因,就抽象出来了各种高级模型...

2668

扫描关注云+社区