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

相关文章

来自专栏青玉伏案

OracleDBA之数据库管理

  以下这些东西是我的麦库上存的当时学Oracle的学习笔记今天拿出来和大家分享一下,转载请注明出处,下面用的Oracle的版本是10g,用的时WinServe...

22390
来自专栏LIN_ZONE

远程连接ubuntu mysql出现2003错误 cant connect to mysql(转载)

2.打开my.cnf文件,找到 bind-address = 127.0.0.1 在前面加上#注释掉,如下: #bind-address = 127.0.0....

26920
来自专栏我是攻城师

ElasticSearch的一些删除用法笔记

37270
来自专栏蓝天

MySQL-5.7.10主主同步的安装和配置

这里安装的是最新的MySQL 5.7.10(5.7.12、5.7.13(后续更新版本可能类似)有些区别,安装过程中遇到错误可搜索下本文,也许可以找到解决办法...

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

# 如何在Ubuntu 14.04上使用Bottle Micro Framework部署Python Web应用程序 ##

由于其灵活性和高级功能,Python是一种优秀的Web编程语言。Web框架可以使编程Web应用程序更加简单,因为它们连接了强大的Web界面所需的许多组件。

19110
来自专栏CaiRui

Mysql-12-mysql的备份和恢复

1.数据库的备份   备份=拷贝加管理,防止数据的丢失同时记录用户的操作记录。其中最有效的备份是对IT架构进行备份。 原则: (1)数据库要定期备份,备份的周期...

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

如何使用CentOS 7上的Bottle Micro Framework部署Python Web应用程序

由于其灵活性和高级功能,Python是一种优秀的Web编程语言。Web框架可以使编程Web应用程序更加简单,因为它们连接了强大的Web界面所需的许多组件。

45440
来自专栏我和PYTHON有个约会

数据库最大连接数量

在数据库操作过程中,经常会遇到一些非业务逻辑错误,这样的错误要求开发人员对于自己正在操作的硬件软件乃至网络都有一定的了解,这里说说关于数据库最大连接数量的那点事...

12120
来自专栏张戈的专栏

zabbix agentd客户端插件Shell一键自动安装脚本

这次生产环境上线了多台 Linux 服务器,需要全部纳入 Zabbix 监控范畴,一台一台的去装 Zabbix Agentd 插件那就太苦逼了,所幸 Zabbi...

36750
来自专栏Pythonista

Django之常用命令以及问题汇总

django-admin.py startproject project-name

18810

扫码关注云+社区

领取腾讯云代金券