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

相关文章

来自专栏数据和云

无所不能:Oracle的数据库文件系统DBFS是什么鬼?

张乐奕 云和恩墨副总经理,Oracle ACE总监,ACOUG 联合创始人 在Oracle11g新增了一个特别的功能—DBFS,从字面翻译,DBFS=DATA...

33910
来自专栏L宝宝聊IT

Mysql备份与还原——mysqldump结合binlog

MySQL 备份一般采取全库备份加日志备份的方式,例如每天执行一次全备份,每小时执行一次二进制日志备份。这样在 MySQL 故障后可以使用全备份...

422
来自专栏Python、Flask、Django

Flask项目db.create时候出现的错误

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

如何在CentOS 7上安装MySQL

MySQL是一个开源数据库管理系统,通常情况下,安装它作为流行的LEMP(Linux,Nginx,MySQL/ MariaDB,PHP / Python /Pe...

1142
来自专栏还债之路

用户相关的文件及命令

Linux system每个文件和进程,都需要对应一个用户和组, Linux system是通过UID和GID来识别用户和组的。用户名相当于人名,UID相当于×...

914
来自专栏GopherCoder

Django:web框架的学习(1)

1224
来自专栏魏艾斯博客www.vpsss.net

宝塔服务器管理助手 Linux 面版-使用教程

3125
来自专栏信安之路

Linux 闯关游戏之通关秘籍续

这一关继续使用上一关的环境,在进入编辑模式之后,在 vi 编辑器中打开一个 shell

854
来自专栏cloudskyme

WSO2 ESB(3)

在上一篇写的是消息中介,接下来是代理服务 代理服务 顾名思义,代理服务充当了WSO2 ESB服务的代理,通常是一个已经存在的服务端点,代理服务可以使用不同的传...

3447
来自专栏铭毅天下

Elasticsearch存储深入详解

在本文中,我们将研究Elasticsearch的各个部分写入数据目录的文件。我们将查看节点,索引和分片级文件,并简要说明其内容,以便了解Elasticsearc...

1312

扫码关注云+社区