高可用性和复制对于任何生产环境都是必须的,这样才能在发生故障时以最小的中断来建立备份过程。在本文中,我将解释如何在 OCI 上为 MySQL HeatWave 配置此架构。
目标将是具有以下架构,每个 VCN 中有两个不同的虚拟云网络 (VCN) 和一个 MySQL HeatWave 实例。在下面的示例设置中,我将在法兰克福 (FRA) 数据中心(区域)中使用我自己的租户。
因此,设置包含跨两个不同 VCN 的冗余,我们为两个 VCN 使用相同的租户,复制流量通过 VCN 对等发送。
重要提示:确保两个 VCN 之间没有重叠的 CIDR。
我已经创建了两个 VCN:
- 从 VCN1 10.3.0.0/16
- 从 VCN2 10.4.0.0/16
我还在上面的每个 VCN 中创建了一个计算实例来测试连接性。
免责声明:
- 本指南不会涵盖 Oracle 云或 MySQL 数据库服务的基础知识。
- 本指南不会涵盖所需的任何特定 IAM 策略设置,请在此处查看更多信息。
设置网络对等互连和 MySQL 复制的分步指南
观看本文底部的视频,查看所有这些步骤的演示。
1) 在每个 VCN 中创建 LPG
1.1)在VCN1中创建LGP
- 转到“网络”>“虚拟云网络”
- 选择 VCN“VCN1”
- 在左侧“资源”菜单中选择“本地对等网关”
- 按“创建本地对等网关”并指定名称,让我们使用“LPG-VNC1”
1.2) 在VCN2中创建LGP
- 转到“网络”>“虚拟云网络”
- 选择 VCN“VCN2”
- 在左侧“资源”菜单中选择“本地对等网关”
- 按“创建本地对等网关”并指定名称,让我们使用“LPG-VNC2”
2)在两个VCN之间建立连接
意识到:
- 根据 IAM 策略以及您是否使用相同的租赁,该过程可能会有所不同。
- 如果您使用 2 个不同的租约进行设置,则需要来自对等本地对等网关 (LPG) 的 OCID。
- 通常,您还可以从请求者建立连接,在我的租赁政策中为请求者/接受者设置了有关 IAM 政策的更多详细信息。
让我们从 VNC2 建立连接。
- 转到“网络”>“虚拟云网络”
- 选择 VCN“VCN2”
- 在左侧菜单中选择“本地对等网关”
- 现在,在您的液化石油气“LPG-VCN2”右侧,单击“操作”菜单(三个点),然后单击“建立对等连接”。
- 然后指定要与之对等的 LPG:
- 选择“浏览下方”并从提供的列表中选择“VCN1”和“LPG-VCN1”。
- 然后点击“建立对等连接”
一段时间后,您应该会看到“Peering Status”变为“Peered”,这意味着两个网络已连接。
3) 更新路由和防火墙
接下来,我们需要更新安全列表以允许来自彼此网络的流量,并为本地 VCN 添加路由条目。
3.1)为VCN1添加路由规则
- 转到:“网络”>“虚拟云网络”并选择 VCN1
- 在“资源”下单击“路由表”,然后单击“VCN1 的默认路由表”
- 单击“添加路由规则”并添加如下条目:
- 选择“目标类型”>“本地对等网关”
- 目标 CIDR 块“10.4.0.0/16”(此 CIDR 用于 VCN2)
- 选择“目标本地对等网关...”>选择“LPG-VCN1
- 添加描述“VCN2 的流量”
- 按“添加路由规则”
3.2)为VCN2添加路由规则
- 转到:“网络”>“虚拟云网络”并选择 VCN2
- 在“资源”下单击“路由表”,然后单击“VCN2 的默认路由表”
- 单击“添加路由规则”并添加如下条目:
- 选择“目标类型”>“本地对等网关”
- 目标 CIDR 块“10.3.0.0/16”(这是 VCN1 的 CIDR)
- 选择“目标本地对等网关...”>选择“LPG-VCN2
- 按“添加路由规则”
3.3) 为 VCN1 添加安全规则
- 转到:“网络”>“虚拟云网络”,然后单击 VCN1
- 在“资源”下单击“安全列表”,然后单击“VCN1 的默认安全列表”
- 单击“添加入口规则”并添加条目以允许来自 VCN2 的 ping:
- 源 CIDR:10.4.0.0/16
- IP 协议:ICMP
- 说明:来自 VCN2 的 Ping
- 按“添加入口规则”
- 为 MySQL 流量添加另一个规则:
- 源 CIDR:10.0.0.0/8
- IP协议:TCP
- 目的端口范围:3306,33060
- 说明:MySQL 流量
- 按“添加入口规则”
3.4) 为 VCN2 添加安全规则
- 转到:“网络”>“虚拟云网络”,然后单击 VCN2
- 在“资源”下单击“安全列表”,然后单击“VCN2 的默认安全列表”
- 单击“添加入口规则”并添加条目以允许从 VCN1 ping:
- 源 CIDR:10.3.0.0/16
- IP 协议:ICMP
- 说明:来自 VCN1 的 Ping
- 按“添加入口规则”
- 为 MySQL 流量添加另一个规则:
- 源 CIDR:10.0.0.0/8
- IP协议:TCP
- 目的端口范围:3306,33060
- 说明:来自 VCN1 的 MySQL 流量
- 按“添加入口规则”
3.5) 测试连通性
最简单的方法是在 VCN1 和 VCN2 中创建一个计算实例。然后测试您是否可以相互 ping(我们为 ICMP 流量添加规则)您的计算节点,即从 VNC1 中的计算 ping VCN2 中的计算,反之亦然。
4) 创建 MySQL 数据库
4.1)在VCN1中创建MySQL数据库服务:
转到“数据库”>“MySQL”,然后按“创建 MySQL 数据库系统”
- 将名称设置为“mysqlVCN1”,
- 选择“独立”,
- 设置用户名和密码(我使用“admin”和“Welcome1!),
- 使用 VCN1 和对应的子网,
- 将其余部分保留为默认值,然后按“创建”
几分钟后,您的数据库应该会启动并运行。
4.2)在VCN2中创建MySQL数据库服务:
转到“数据库”>“MySQL”,然后按“创建 MySQL 数据库系统”
- 将名称设置为“mysqlVCN2”,
- 选择“独立”,
- 设置用户名和密码(我使用“admin”和“Welcome1!),
- 使用 VCN2 和对应的子网,
- 将其余部分保留为默认值,然后按“创建”
几分钟后,您的数据库应该会启动并运行。
4.3) 测试从同一VCN中的计算实例连接到MySQL(以下是VCN1中的计算)并跨VCN
如果尚未完成,请安装 MySQL 客户端:
sudo yum install mysql
获取 VCN1 中 MySQL 数据库服务的私有 IP:
- “数据库”>“MySQL”,然后单击“mysqlVNC1”,在“端点”>“私有 IP 地址”部分下
连接:
mysql -uadmin -pWelcome1! -h<private IP of mysql from above>
获取 VCN2 中 MySQL 数据库服务的私有 IP:
- “数据库”>“MySQL”,然后单击“mysqlVNC2”,在“端点”>“私有 IP 地址”部分下
连接:
mysql -uadmin -pWelcome1! -h<private IP of mysql from above>
4.4)从VCN1中的计算将一些测试数据插入VCN1中的MySQL数据库服务(源):
获取 VCN1 中 MySQL 数据库服务的私有 IP:
- “数据库”>“MySQL”,然后单击“mysqlVNC1”,在“端点”>“私有 IP 地址”部分下
连接:
mysql -uadmin -pWelcome1! -h<private IP of mysql from above>
插入一些虚拟数据:
create database ted;
use ted;
create table t (i int primary key, ts timestamp);
insert into ted.t values (1,now());
insert into ted.t values (2,now());
insert into ted.t values (3,now());
select * from ted.t;
5)配置并开始复制
5.1) 在 VCN1 的 MySQL HeatWave 实例上创建复制用户
这将用于从 VCN2 中的 MySQL HeatWave 实例配置和启动复制 Chanel。
- 登录到 VCN1 上的计算节点。
- 连接到 VCN1 中的 MySQL HeatWave:
- 在 VCN1 中获取 MySQL HeatWave 的私有 IP:“数据库”>“MySQL”,然后单击“端点”>“私有 IP 地址”部分下的“mysqlVNC1”
- 连接:
mysql -uadmin -pWelcome1!-h<上面的mysql的私有IP>
- 创建复制用户:
mysql> CREATE USER 'repl'@'10.4.%' IDENTIFIED BY 'Welcome1!' REQUIRE SSL;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.4.%';
5.2) 从 VCN1 中的 MySQL HeatWave 向 VCN2 中的 MySQL HW 提供数据
创建文件夹来存储转储文件:
mkdir /home/opc/dump-files
从 VCN1 中的计算启动 MySQL Shell(通过键入:sudo yum install mysql-shell 进行安装):
mysqlsh
(Connect to MySQL HeatWave in VCN1)
\connect admin@<private IP of MySQL Database Service in VCN1>
(input password Welcome1!)
(dump all data)
util.dumpInstance("/home/opc/dump-files/20220412", {ocimds:true, threads:8, showProgress:true, compatibility:["force_innodb","strip_definers","strip_restricted_grants","strip_tablespaces"]})
(now connect to MySQL Database Service in VCN2)
\connect admin@<private IP of MySQL HeatWave in VCN2>
(load dump file into MySQL HeatWave instance in VCN2)
util.loadDump("/home/opc/dump-files/20220412",{updateGtidSet:"append", threads:8, waitDumpTimeout:1800})
5.3) 在 VCN1 (source) > VCN2 (replica) 中设置 MySQL 的复制,复制通道是从 VCN2 (replica) 设置的
- 转到“数据库”>“MySQL”并按“mysqlVCN2”
- 然后在“资源”下选择“频道”并单击“创建频道”
- 输入名称“ReplicationFromVCN1toVCN2”
- 在“源连接”下提供 VCN1 中 MySQL 实例的详细信息,将 rest 保留为默认值并按“创建通道”
- 几分钟后,您应该会看到 Channel 处于“Active”状态
- 如果您导航到“数据库”>“MySQL”并按“mysqlVCN2”,您还应该在“入站复制通道”部分看到状态
5.4) 测试复制设置
在 VCN1 中将一些数据插入到 MySQL 源中,然后在 VCN2 中查看 MySQL。
连接到 VCN1 中的 MySQL 源:
- 获取 VCN1 中 MySQL 数据库服务的私有 IP:“数据库”>“MySQL”,然后单击“端点”>“私有 IP 地址”部分下的“mysqlVNC1”
- 连接:
mysql -uadmin -pWelcome1! -h<private IP of mysql from above>
然后输入:
use ted;
删除下面的“CREATE TABLE”行。保留其他一切。
create table t (i int primary key, ts timestamp);
insert into ted.t values (4,now());
insert into ted.t values (5,now());
select * from ted.t;
连接到 VCN2 中的 MySQL 副本:
- 在 VCN2 中获取 MySQL 数据库服务的私有 IP:“数据库”>“MySQL”,然后单击“端点”>“私有 IP 地址”部分下的“mysqlVNC2”
- 连接:
mysql -uadmin -pWelcome1! -h<private IP of mysql from above>
然后输入:
mysql> select * from ted.t;
+---+---------------------+
| i | ts |
+---+---------------------+
| 1 | 2022-03-31 15:40:34 |
| 2 | 2022-03-31 15:40:34 |
| 3 | 2022-03-31 15:40:34 |
+---+---------------------+
将上面的选择替换为:
mysql> select * from ted.t;
+---+---------------------+
| i | ts |
+---+---------------------+
| 1 | 2022-03-31 15:40:34 |
| 2 | 2022-03-31 15:40:34 |
| 3 | 2022-03-31 15:40:34 |
| 4 | 2022-03-31 16:37:57 |
| 5 | 2022-03-31 16:38:57 |
+---+---------------------+
所以,一切都完成了,复制已经启动并运行,下面是我们已经完成的设置!
特德温马克
MySQL 解决方案架构师 EMEA
Ted Wennmark 是 Oracle 的 MySQL EMEA 小组的 MySQL 解决方案架构师,他的日常职责是帮助 EMEA 各地的客户构建基于 MySQL 的安全、可扩展和高度可用的解决方案。Ted 还是 MySQL NDB Cluster 专家团队的领导者,该团队使用 MySQL NDB 分布式内存数据库帮助全球客户构建可扩展且高度可用的解决方案。在加入甲骨文之前,Ted 曾担任软件工程师和架构师,专注于构建可 扩展和高性能的系统,此外,Ted 还担任 MySQL/Sun/Oracle 的顾问,自 2005 年起为北欧地区的客户提供支持。
原文作者:特德温马克
原文地址:https://blogs.oracle.com/mysql/post/how-to-setup-high-availability-and-replication-inside-oci-for-mysql-heatwave
原文标题:How to Setup High Availability and Replication inside OCI for MySQL HeatWave




