内容简介: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-1
140.86.35.55 ic02-mysql-1
140.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> \sql
mysql-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地址时,此方案非常有用。
还有很多其他功能,我们仍然想与你分享,敬请关注本系列的第二部分!
如果您对本文所述的基本设置有任何疑问,请在评论中通知我们。谢谢你使用MySQL!
加入"云和恩墨大讲堂"微信群,参与讨论学习
搜索 盖国强(Eygle)微信号:eyygle,或者扫描下面二维码,备注:云和恩墨大讲堂,即可入群。每周与千人共享免费技术分享,与讲师在线讨论。
关注公众号,获得后续精彩分享
近期文章
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Elasticsearch 集群搭建和集群原理
- Zookeeper集群 + Kafka集群 + KafkaOffsetMonitor 监控
- Zookeeper学习系列【二】Zookeeper 集群章节之集群搭建
- Kafka从上手到实践-Kafka集群:启动Kafka集群
- 借 Redis cluster 集群,聊一聊集群中数据分布算法
- K8S集群入门:运行一个应用程序究竟需要多少集群?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Fluent Python
Luciano Ramalho / O'Reilly Media / 2015-8-20 / USD 39.99
Learn how to write idiomatic, effective Python code by leveraging its best features. Python's simplicity quickly lets you become productive with it, but this often means you aren’t using everything th......一起来看看 《Fluent Python》 这本书的介绍吧!