Oracle公共云中的MySQL InnoDB集群

题记:本文我们将引导大家完成在Oracle公共云(OPC)中创建3节点InnoDB集群的整个过程,包括从OPC IaaS资源的初始配置,到InnoDB集群的创建和配置的每个步骤。

在OPC上配置三个MySQL实例

开始之前,必须在OPC上创建三个MySQL实例。

登录到Oracle Cloud Dashboard并打开MySQL Cloud Service Console。

在Oracle MySQL云服务控制台上,按[Create Service]添加新的MySQL实例。实验中使用3个名称为ic01,ic02,ic03的MySQL实例。 输入服务说明,然后单击[Next >]。

在下一个屏幕上,选择虚拟机类型 - 它将运行Oracle Linux 6作为操作系统 - 提供SSH公共密钥 - 以便稍后可以访问该机器,并且指定了一些基本的MySQL配置详细信息。

注意:本实验使用root作为管理员用户。 请确保在所有3个实例上使用相同的管理员密码。

创建虚拟机需要几分钟的时间,可以用这个时间开始创建另外两个MySQL服务实例。

MySQL服务实例可用后,单击实例名称-ic01以获取有关MySQL实例的更多信息。 请注意公共IP地址,因为需要使用此信息更新本地主机文件。

在这种情况下,MySQL服务实例正在140.86.13.239上运行。 对所有实例重复此操作,然后更新本地/ etc / hosts文件。 用编辑器打开文件 - 我使用的是nano:

sudo nano /etc/hosts

并为所有三个MySQL服务实例添加条目,指定其主机名和IP地址:

140.86.32.38 ic03-mysql-1140.86.35.55 ic02-mysql-1140.86.13.239 ic01-mysql-1

完成此操作后,可以更新访问规则以允许MySQL实例在OPC网络内相互通信,并允许公众访问机器(如果需要的话)。 单击上下文菜单,然后选择[Access Rules]。

在“Access Rules”屏幕上,单击[Create Rule]以显示创建访问规则对话框。

创建三个新规则并启用公共访问机器:

创建访问规则#1

Rule name: local_mysql_ic_access Description: Allow local InnoDB cluster communication Source: <custom> 10.196.0.0/16 Destination: mysql_MASTER Destination Port(s): 3306, 13306

创建访问规则#2

Rule name: local_mysql_ic_access2 Description: Allow local InnoDB cluster communication Source: <custom> 10.196.0.0/16 Destination: mysql_MASTER Destination Port(s): 13306

创建访问规则#3

Rule name: mysql_p2admin_x Description: Permit public access to MySQL X Protocol Port Source: PUBLIC-INTERNET Destination: mysql_MASTER Destination Port(s): 33060

启用访问规则以进行公共3306访问

Rule Name: ora_p2admin_mysql

在这些步骤之后,就有三个实例可以准备好从SSH会话中为InnoDB集群使用。

准备InnoDB群集使用的MySQL服务实例

前面我们在OPC中创建了MySQL Cloud Service实例,并上传了公共SSH密钥,将OPC实例名称添加到本地主机文件中,以便可以通过(短)名称而非IP访问。 现在可以通过本地机器上的SSH访问OPC中的MySQL服务实例。

打开终端并键入以下连接到第一个实例:

ssh opc@ic01-mysql-1

如果一切配置正确,我们将看到以下欢迎消息:

安装Python 2.7

由于MySQL Shell需要Python,所以需要在继续之前进行安装。 我们将使用Oracle Linux的软件集合库2.3安装Python。 使用以下命令下载包含软件集合存储库条目的yum存储库文件:

sudo wget -O /etc/yum.repos.d/public-yum-ol6.repo http://yum.oracle.com/public-yum-ol6.repo

启用存储库的简单方法是使用本教程中使用的yum-utils软件包。 由于默认情况下未安装,因此将使用以下命令进行安装:

sudo yum install yum-utils

一旦yum-utils包的安装完成,启用Software Collection存储库:

sudo yum-config-manager --enable ol6_software_collections

要继续,请安装Software Collection Library Utility和Python 2.7:

sudo yum install scl-utils python27

现在,启用使用Python 2.7:

scl enable python27 -- bash

安装MySQL Shell

首先要安装MySQL Shell,需要安装官方的MySQL yum存储库。 运行以下命令来安装yum仓库:

sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el6-10.noarch.rpm

在终端中键入以下命令来安装MySQL Shell:

sudo yum install mysql-shell

准备InnoDB群集使用的MySQL实例

首先,需要切换到“oracle”用户,然后启动MySQL Shell,指定应该为其启用Python 2.7:

sudo su - oracle scl enable python27 -- mysqlsh

切换到“oracle”用户,因为MySQL服务(mysqld)仅暴露给“oracle”用户,并且它不在“opc”用户的PATH中。

由于OPC MySQL服务实例使用密码验证插件,并且其默认值对于自动生成的路由器引导密码可能会太严格,将通过使用MySQL Shell在每个实例上将密码策略降低一级以避免可能出现的问题:

mysql-js> \sqlmysql-sql> SET validate_password_policy=0;mysql-sql> \js

接下来,通过调用以下函数配置本地实例,在出现提示时输入root用户的密码:

mysql-js> dba.configureLocalInstance();

需要指定MySQL配置文件(my.cnf),并在/u01/bin/mysql/my.cnf中找到。 如果使用不同于“root”的其他管理用户,那么当使用dba.configureLocalInstance()配置主机时,MySQL Shell可以为InnoDB集群创建新的管理用户,但是由于我们测试中使用“root” ,不需要创建新的用户。

然后,将看到一个报告,其中包含由MySQL Shell所做的更改,并显示一条消息,指出需要重新启动MySQL服务实例以应用:

要重新启动MySQL服务器,首先退出MySQL Shell:

mysql-js>\q然后使用“oracle”用户运行以下命令来停止MySQL Server实例:su oracle -c 'mysqladmin shutdown'

然后再次启动MySQL服务器:su oracle -c 'cd $MYSQL_HOME && bin/mysqld_safe &'一旦服务再次运行,启动MySQL Shell,指定应启用Python 2.7:scl enable python27 -- mysqlsh然后运行以下命令来验证主机是否准备好进行集群使用:mysql-js> dba.checkInstanceConfiguration('root@localhost:3306');

创建InnoDB集群

要创建InnoDB集群,将使用root用户在本地计算机上运行shell,并指定运行MySQL的端口:

$ mysqlsh root@ic01-mysql-1:3306

请记住配置本地/ etc / hosts文件,以便能够使用远程连接的短主机名而不是IP地址现在,创建一个经典会话到主机,输入root的密码时出现提示:mysql-js> shell.connect('root@ic01-mysql-1:3306');

在以下命令中,请注意ipWhitelist选项参数。 由于每个主机都有自己的网络,因此必须指定要允许连接到集群的IP的范围。 默认情况下存储该值的变量设置为“AUTOMATIC”,这允许仅从主机上的专用子网连接。 可以添加多个IP范围,用逗号分隔它们。 斜线后的数字是使用CIDR值时的网络位数。 将集群创建分配给一个变量供以后使用:

mysql-js> var cluster = dba.createCluster('myCluster', {ipWhitelist:'10.196.0.0/16,127.0.0.1/8'});

一旦创建集群,就会出现一些有关集群创建信息和向集群添加实例所需的功能的消息。

然后我们可以使用以下命令验证集群的状态:

mysql-js> cluster.status();

将实例添加到InnoDB集群

现在是时候向集群添加实例了。 运行以下功能添加已配置的第二个实例。 由于上述原因,还可以指定可选参数ipWhitelist:

mysql-js> cluster.addInstance('root@ic02-mysql-1:3306', {ipWhitelist:'10.196.0.0/16,127.0.0.1/8

运行以下命令来验证集群中的实例的状态:

mysql-js> cluster.status();

然后添加第三个实例:

mysql-js> cluster.addInstance('root@ic03-mysql-1:3306', {ipWhitelist:'10.196.0.0/16,127.0.0.1/8'});

并再次运行命令来验证集群的状态:

mysql-js> cluster.status();

保持集群配置

为了在每个实例上保持集群配置 - 以便当重新启动时,实例会自动重新加入集群 - 必须在每个实例上再次使用dba.configureLocalInstance()。 该命令将使用自动重新加入群集所需的参数来更新本地my.cnf文件。

为此,请在每个实例上本地运行以下命令:

mysql-js> dba.configureLocalInstance();

配置MySQL路由器

下一步是引导集群。 我们假设已经安装了MySQL路由器2.1.3+。 打开终端或命令提示符并键入以下命令:

windows:

mysqlrouter --bootstrap root@ic01-mysql-1:3306 -d %HOMEPATH%\myrouter

Linux:

mysqlrouter --bootstrap root@ic01-mysql-1:3306 -d myrouter

启动MySQL路由器

Windows:

start /B mysqlrouter -c %HOMEPATH%\myrouter\mysqlrouter.conf

linux:(假设myrouter目录在主路径上)

myrouter/start.sh

测试InnoDB集群

现在将演示故障切换的工作原理。

启动MySQL Shell并使用指向远程集群的MySQL路由器端口在本地连接:

mysqlsh root@localhost:6446

然后使用以下函数获取集群句柄:

mysql-js> var cluster = dba.getCluster();然后显示集群的状态:mysql-js> cluster.status();

可以通过查找标记为具有“R / W”模式的实例来查看当前为PRIMARY的实例。 然后远程连接到该实例并停止MySQL服务:

su oracle -c 'mysqladmin shutdown'

一旦MySQL服务停止,请再次检查集群状态:

mysql-js> cluster.status();将看到一条消息,指出在查询期间与MySQL的连接已丢失。要重新连接,请运行以下命令:mysql-js> shell.connect('root@localhost:6446');然后执行该功能以再次验证集群状态:mysql-js> cluster.status();

请注意,实例ic01-mysql-1具有“MISSING”状态,而其他实例之一则将PRIMARY(或“master”)角色从“R / O”更改为“R / W”。

在远程主机连接上再次启动MySQL服务:

cd $MYSQL_HOME; bin/mysqld_safe &

再次检查集群状态:

mysql-js> cluster.status();

请注意,实例ico1-mysql-1返回“ONLINE”,但现在它具有一个SECONDARY(或“从”)角色,其模式设置为“R / O”。

结论

现在已经获得了使用Oracle公共云和MySQL云服务实例正确创建和配置集群的基本知识,包括如何引导远程集群,以便可以在本地访问。 当不想公开运行MySQL服务器的服务器,而是提供仅处理应用程序流量的另一台服务器的IP地址时,此方案非常有用。

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Laoqi's Linux运维专列

安装配置kibana+logstash

1042
来自专栏Spark学习技巧

聊聊spark-submit的几个有用选项

833

在Windows 10上使用Hyper-V创建VM

如果您运行的是Windows 10并且您的系统硬件支持Hyper-V,那么你可以创建一个独立的存储空间来部署自己的虚拟机并使用它。您可以创建一个或多个虚拟机并同...

1889
来自专栏静默虚空的博客

Elastic 技术栈之 Filebeat

Elastic 技术栈之 Filebeat 简介 Beats 是安装在服务器上的数据中转代理。 Beats 可以将数据直接传输到 Elasticsearch 或...

3667
来自专栏Java开发

Linux 新建扩展分区

此时已经看见扩展分区创建完成,在扩展分区下面新建2个分区 因为现在扩展分区是20G 所以下面的2个分区都给10G

441
来自专栏小狼的世界

Jenkins 快速搭建

Jenkins 作为持续集成的重要工具,在DevOps整个工具链中有重要的地位。Jenkins 一般作为独立的应用运行在Java Servlet容器中如Jett...

903
来自专栏云计算教程系列

使用LXD搭建Web网站

Linux的容器是Linux的一组进程,通过使用Linux内核功能与系统隔离。它是一个类似于虚拟机的构造,但它的更轻量级。您可以在同一台服务器上轻松创建多个容器...

1791
来自专栏hbbliyong

Revit二次开发: 文件损坏

哪些因素可能会导致损坏? 损坏的原因也各不相同,包括但不限于 无法读取/写入存储介质 程序发生崩溃(特别是在数据写入 RVT 模型时) 附加模块以通过正...

462
来自专栏乐百川的学习频道

安装和使用Redis

Redis是一个高性能的内存数据库,它体积轻巧性能又高,在企业中被广泛使用。 安装Redis Windows安装 Redis是为Linux系统设计的,但是也有团...

30210
来自专栏C/C++基础

MySQL出现:ERROR 3 (HY000): Error writing file '/tmp/MYbEd05t' (Errcode: 28)

在执行一个有1000万条记录的MySQL查询语句时,出现了上面的错误。百度折腾了很长时间,终于解决,特此记录。

863

扫描关注云+社区