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 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

服务器文件同步管理

前几天有台服务器电源坏了,还好数据没有丢。因此必须做好服务器文件内容的备份。服务器主要是用来提供网站服务,带着一个数据库,数据库可以用分发和订阅来解决,网页文件...

1242
来自专栏iOS 开发杂谈

Mac安装Jenkins系列

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

1253
来自专栏Java开发

使用Hexo+GitHub搭建免费个人博客

博主GitHub博客地址:https://joeybling.github.io/

942
来自专栏张善友的专栏

Windows NLB搭配IIS的ARR搭建高可用环境

在现行的许多网络应用中,有时一台服务器往往不能满足客户端的要求,那么有没有什么办法解决服务器的高可伸缩性、高可用、高可靠性和高性能,提升服务器的SLA? 使用W...

2777
来自专栏喵了个咪的博客空间

[喵咪Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定

[喵咪Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定 ? 前言 哈喽大家好啊,好久不见啊(都快一个月了),要问为什么没有更新博客呢只应为...

3898
来自专栏编程微刊

用node.js从零开始去写一个简单的爬虫

如果你不会Python语言,正好又是一个node.js小白,看完这篇文章之后,一定会觉得受益匪浅,感受到自己又新get到了一门技能,如何用node.js从零开始...

561
来自专栏啸天"s blog

you-get一行命令下载所需音视频资源

952
来自专栏架构师小秘圈

互联网亿级日志实时分析平台,一个码农半小时就可以搞定,只因ELK

一,前言 人们常常说数据如金,可是,能被利用起的数据,才是“金”。而互联网的数据,常常以日志的媒介的形式存在,并需要从中提取其中的"数据"。 从这些数据中,我们...

1.1K7
来自专栏容器云生态

piranha-基于web界面的HA配置管理平台

piranha构建高可用平台 使用piranha红帽配置lvs集群:(虚拟伺机服务器) 内网私有ip(心跳线,用来加强ha集群的健壮度) pulse和piran...

2356
来自专栏枕边书

一键部署进化史

前言 ---- 之前的文章说过 由 PHP 转到 Java 之后,非常不适应的一点就是代码部署过程耗时长,调试不便,虽然可以使用 debug,但有时候还是需要修...

3458

扫码关注云+社区