PolarDB-X replica 原理和使用

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 《PolarDB-X 动手实践》系列第九期,体验如何用 PolarDB-X Replica 将 PolarDB-X 作为不同上游数据库的备库。

PolarDB-X replica 原理和使用


《PolarDB-X 动手实践》系列第九期,体验如何用PolarDB-X Replica将PolarDB-X作为不同上游数据库的备库。

1. 创建实验资源

开始实验之前,您需要先创建ECS实例资源。

在实验室页面,单击创建资源

(可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。

说明:资源创建过程需要1~3分钟。

2. 连接云服务器ECS

本步骤将指导您如何连接云产品资源列表中的云服务器ECS_1、云服务器ECS_2和云服务器ECS_3三台实例。

连接云服务器ECS_1实例。

a.执行如下命令,连接云服务器ECS_1的实例。

说明:你需要将命令中的<弹性ip>替换为云产品资源列表中的云服务器ECS_1实例的弹性ip。

ssh root@<弹性ip>

b.输入yes,继续连接。

c.输入服务器ECS_1实例的密码,然后按Enter键。

说明:你可在云产品资源列表中查看云服务器ECS_1实例的密码。

连接云服务器ECS_2实例。

a.在实验页面,单击右上角的 图标,创建新的终端二。

b.在终端二中,执行如下命令,连接云服务器ECS_2的实例。

说明:你需要将命令中的<弹性ip>替换为云产品资源列表中的云服务器ECS_2实例的弹性ip。

ssh root@<弹性ip>

c.输入yes,继续连接。

d.输入云服务器ECS_2实例的密码,然后按Enter键。

说明:你可在云产品资源列表中查看云服务器ECS_2实例的密码。

连接云服务器ECS_3实例。

a.在实验页面,单击右上角的图标,创建新的终端三。

b.在终端二中,执行如下命令,连接云服务器ECS_3的实例。

说明:你需要将命令中的<弹性ip>替换为云产品资源列表中的云服务器ECS_3实例的弹性ip。

ssh root@<弹性ip>

c.输入yes,继续连接。

d.输入云服务器ECS_3实例的密码,然后按Enter键。

说明:你可在云产品资源列表中查看云服务器ECS_3实例的密码。

3. 安装和启动MySQL

本步骤将指导您如何在云产品资源列表中的云服务器ECS_1安装和启动MySQL 8.0服务,在云服务器ECS_2和云服务器ECS_3台实例中安装MySQL Client。其中,云服务器ECS_1实例的MySQL 8.0数据库将用来做主库,云服务器ECS_2实例和云服务器ECS_3实例的MySQL Client作用是,您可通过MySQL Client命令行连接到PolarDB-X集群。

在云服务器ECS_1实例上安装并启动MySQL 8.0。

a.切换至终端一,执行如下命令,安装MySQL 8.0。

wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install -y mysql-server

b.执行如下命令,启动MySQL 8.0。

systemctl start mysqld.service

c.执行如下命令,查看MySQL 8.0状态。

systemctl status mysqld.service

返回结果如下,表示您已成功启动MySQL 8.0已启动。

d.执行如下命令,查看云服务器ECS_1实例上的MySQL 8.0的初始密码。

cat /var/log/mysqld.log | grep password

在云服务器ECS_2实例上安装MySQL Client。

切换至终端二,执行如下命令,安装MySQL Client。

yum install -y mysql

在云服务器ECS_3实例上安装并启动MySQL 8.0。

切换至终端三,执行如下命令,安装MySQL 8.0。

yum install -y mysql

4. 安装PolarDB-X

本步骤将指导您如何在云产品资源列表中的云服务器ECS_2和云服务器ECS_3中,安装PolarDB-X。

在云服务器ECS_2中,安装PolarDB-X。

a.切换至终端二,执行如下命令,创建并激活虚拟场景。

python3 -m venv venv
source venv/bin/activate

b.执行如下命令,升级pip。

pip install --upgrade pip

c.执行如下命令,安装PXD。

pip install pxd

d.执行如下命令,创建PolarDB-X的拓扑文件polardbx.yaml。

vim polardbx.yaml

e.按i键进入编辑模式,将如下代码添加到polardbx.yaml文件中。

version: v1
type: polardbx
cluster:
  name: pxc_test
  gms:
    image: polardbx/galaxyengine:latest
    host_group: [127.0.0.1]
  cn:
    image: polardbx/galaxysql:latest
    replica: 1
    nodes:
      - host: 127.0.0.1
    resources:
      mem_limit: 10G
  dn:
    image: polardbx/galaxyengine:latest
    replica: 1
    nodes:
      - host_group: [127.0.0.1]
    resources:
      mem_limit: 6G
  cdc:
    image: polardbx/galaxycdc:latest
    replica: 1
    nodes:
      - host: 127.0.0.1
    resources:
      mem_limit: 8G

f.添加完成后按下Esc键后,输入:wq后按下Enter键保存并退出。

g.执行如下命令,创建PolarDB-X集群。

pxd create -file polardbx.yaml

请您大约等待5-10分钟,返回结果如下,表示您已成功部署PolarDB-X数据库,您可以看到输出的PolarDB-X连接方式,使用该连接方式通过MySQL Client即可连接到PolarDB-X数据库。

注意:PolarDB-X管理员账号的密码随机生成,仅出现这一次,请您注意保存。

在云服务器ECS_3中,安装PolarDB-X。

a.执行如下命令,创建并激活虚拟场景。

python3 -m venv venv
source venv/bin/activate

b.执行如下命令,升级pip。

pip install --upgrade pip

c.执行如下命令,安装PXD。

pip install pxd

d.执行如下命令,创建PolarDB-X的拓扑文件polardbx.yaml。

vim polardbx.yaml

e.按i键进入编辑模式,将如下代码添加到polardbx.yaml文件中。

version: v1
type: polardbx
cluster:
  name: pxc_test
  gms:
    image: polardbx/galaxyengine:latest
    host_group: [127.0.0.1]
  cn:
    image: polardbx/galaxysql:latest
    replica: 1
    nodes:
      - host: 127.0.0.1
    resources:
      mem_limit: 10G
  dn:
    image: polardbx/galaxyengine:latest
    replica: 1
    nodes:
      - host_group: [127.0.0.1]
    resources:
      mem_limit: 6G
  cdc:
    image: polardbx/galaxycdc:latest
    replica: 1
    nodes:
      - host: 127.0.0.1
    resources:
      mem_limit: 8G

f.添加完成后按下Esc键后,输入:wq后按下Enter键保存并退出。

g.执行如下命令,创建PolarDB-X集群。

pxd create -file polardbx.yaml

返回结果如下,表示您已成功部署PolarDB-X数据库,您可以看到输出的连接信息,通过MySQL Client即可连接。

注意:PolarDB-X管理员账号的密码随机生成,仅出现这一次,请您注意保存。


5. PolarDB-X作为MySQL的备库

本步骤将指导您如何使用PolarDB-X作为MySQL的备库。

建立复制链路。

a.切换至终端一,执行如下命令,登录云服务器ECS_1实例中的MySQL。

说明:您需要将如下命令中的<PASSWORD>替换为云服务器ECS_1实例上的MySQL 8.0的初始密码。

mysql -uroot -p<PASSWORD>

b.执行如下命令,修改MySQL的root用户的初始密码为Aliyun123!

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Aliyun123!';

c.执行如下命令,修改root用户的登录ip白名单.

update mysql.user set host='%' where user='root';

d.执行如下命令,使权限相关修改生效。

FLUSH PRIVILEGES;

e.执行如下命令,查看最新的binlog File和binlog Position。

show master status;

返回结果如下,您可查看到源库的binlog File和binlog Position。

f.切换至终端二,执行PolarDB-X安装完成后输出的的连接方式,登录PolarDB-X。例如mysql -h127.0.0.1 -P7148 -upolardbx_root -pXXXXXX

g.执行如下命令,修改相关参数,建立复制链路。

说明:如果您想了解更多有关MySQL Replica用法,详情请参考MySQL官方文档

参数说明:

MASTER_HOST:源库主机的主机名(或 IP 地址),本示例填写为云服务器ECS_1实例的私有地址

MASTER_USER:源库的用户名,本示例填写为云服务器ECS_1实例的MySQL数据库的用户名root

MASTER_PASSWORD:源库的密码,本示例填写为Aliyun123!

MASTER_PORT:源库主机的TCP/IP端口,本示例填写为3306。

MASTER_LOG_FILE:复制I/O线程应该在下次线程启动时开始从源库读取的坐标,填写为上一步中从源库获取的binlog File。

MASTER_LOG_POS:复制I/O线程应该在下次线程启动时开始从源库读取的坐标,填写为上一步中从源库获取的binlog Postion。

SOURCE_HOST_TYPE:源库类型,本示例填写为mysql。

CHANGE MASTER TO
    MASTER_HOST='云服务器ECS_1实例的私有地址',            
    MASTER_USER='root',
    MASTER_PASSWORD='Aliyun123!',
    MASTER_PORT=3306,
    MASTER_LOG_FILE='binlog File',
    MASTER_LOG_POS=binlog Postion,
    SOURCE_HOST_TYPE=mysql
FOR CHANNEL 'mysql';

h.执行如下命令,仅复制新添加的库。由于主备是异构系统,我们将复制仅限于我们即将要新添加的库,防止主库的心跳等数据影响同步。

CHANGE REPLICATION FILTER replicate_do_db=(rpl) for channel 'mysql';

i.执行如下命令,查看链路状态。

SHOW SLAVE STATUS\G

j.执行如下命令,启动链路。

START SLAVE;

在master上执行DDL和DML语句。

a.切换至终端一,执行如下命令,创建数据库rpl。

create database rpl;

b.执行如下命令,使用数据库rpl。

use rpl;

c.执行如下命令,创建表example。

create table example (
  `id` bigint(11) auto_increment NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `score` bigint(11) DEFAULT NULL,
  primary key (`id`)
) engine=InnoDB default charset=utf8;

d.执行如下命令,插入数据。

insert into example values(null,'lily',375),(null,'lisa',400),(null,'ljh',500);

e.执行如下命令,查看数据。

select * from example;

返回结果如下,您可以看到源库中有三条数据。

在slave上查看数据

a.切换至终端二,执行如下命令,使用数据库rpl。

use rpl;

b.执行如下命令,查询数据库rpl中的表。

show tables;

c.执行如下命令,查看数据。

select * from example;

返回结果如下,你可查看到源库中的数据已经同步到备库中。

暂停并删除测试链路

a.执行如下命令,暂停链路。

STOP SLAVE;

b.执行如下命令,删除链路。

RESET SLAVE ALL;

c.执行如下命令,查看链路是否删除。

SHOW SLAVE STATUS;

6. 使用PolarDB-X作为PolarDB-X的备库

本步骤将指导您如何使用一个PolarDB-X集群作为另外一个PolarDB-X集群的备库,并进行TPC-C测试。

建立复制链路。

a.切换至终端三,执行PolarDB-X安装完成后输出的的连接方式,登录PolarDB-X。例如mysql -h127.0.0.1 -P7148 -upolardbx_root -pXXXXXX

b.执行如下命令,查看最新的binlog position。

SHOW MASTER STATUS\G

返回结果如下,您可查看到源库的binlog File和binlog Position。

c.切换至终端二,执行如下命令,修改相关参数,建立复制链路。

说明:如果您想了解更多有关MySQL Replica用法,详情请参考MySQL官方文档

参数说明:

MASTER_HOST:源库主机的主机名(或 IP 地址),本示例填写为云服务器ECS_3实例的私有地址

MASTER_USER:源库的用户名,本示例填写为polardbx_root

MASTER_PASSWORD:源库的密码,本示例填写为云服务器ECS_3实例的PolarDB-X集群的密码。

MASTER_PORT:源库主机的TCP/IP端口,本示例填写为云服务器ECS_3实例的PolarDB-X集群的端口号。

MASTER_LOG_FILE:复制I/O线程应该在下次线程启动时开始从源库读取的坐标,填写为上一步中从源库获取的binlog File。

MASTER_LOG_POS:复制I/O线程应该在下次线程启动时开始从源库读取的坐标,填写为上一步中从源库获取的binlog Postion。

SOURCE_HOST_TYPE:源库类型,本示例填写为polardbx

CHANGE MASTER TO
    MASTER_HOST='云服务器ECS_3实例的私有地址',
    MASTER_USER='polardbx_root',
    MASTER_PASSWORD='云服务器ECS_3实例的PolarDB-X集群的密码',
    MASTER_PORT=云服务器ECS_3实例的PolarDB-X集群的端口号,
    MASTER_LOG_FILE='binlog File',
    MASTER_LOG_POS=binlog Postion,
    SOURCE_HOST_TYPE=polardbx
FOR CHANNEL 'tpcc';

d.执行如下命令,仅复制新添加的库。由于主备是异构系统,我们将复制仅限于我们即将要新添加的库,防止主库的心跳等数据影响同步

CHANGE REPLICATION FILTER replicate_do_db=(tpcc);

e.执行如下命令,启动链路。

START SLAVE;

f.执行如下命令,查看链路状态

SHOW SLAVE STATUS\G

TPC-C测试。

a.首先请阅读PolarDB-X TPCC测试指南,了解PolarDB TPCC测试。

b.切换至终端三,执行如下命令,创建数据库tpcc。

create database tpcc;

c.输入exit退出PolarDB-X集群。

d.执行如下命令,使用yum安装JDK 1.8。

yum -y install java-1.8.0-openjdk*

e.执行如下命令,下载压测工具包。

wget https://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/file-manage-files/zh-CN/40302202/cgaj_benchmarksql.tar.gz

f.执行如下命令,解压压测工具包。

tar xzvf cgaj_benchmarksql.tar.gz

g.执行如下命令,编辑props.mysql配置文件。填入对应的PolarDB-X实例连接信息。

cd benchmarksql/run 
vim props.mysql

h.在props.mysql配置文件中,按下i键进入编辑模式,修改如下参数后,按下Esc键后,输入:wq后按下Enter键保存并退出。

参数说明:

FOST:主机名{HOST},在本示例中您需要将{HOST}替换为127.0.0.1

PORT:端口号{PORT},在本示例中您需要将{PORT}替换为云服务器ECS_3实例的PolarDB-X集群的端口号。

user:用户名,在本示例中您需要将{USER}替换为云服务器ECS_3实例的PolarDB-X集群的用户名polardbx_root

password:密码,在本示例中您需要将{PASSWORD}替换为云服务器ECS_3实例的PolarDB-X的密码。

warehouses:仓库数,在本示例中填写为1。

loadWorkers:导入数据并发数,在本示例中填写为1。

terminals:压测并发数,在本示例中填写为5。

runMins:压测时间,在本示例中填写为2。

i.执行如下命令,导入压测数据。

nohup ./runDatabaseBuild.sh props.mysql &

j.按下Ctrl+C键后,执行如下命令,查看导入压测数据的日志。

cat nohup.out

请您等待大约3分钟,压测数据的日志返回结果如下,表示压测数据已成功导入。

说明:由于实验室资源有限,此处使用非生产规格实例,导致压测数据导入速度较慢。

k.执行云服务器ECS_3实例的PolarDB-X集群安装完成后输出的的连接方式,登录PolarDB-X。例如mysql -h127.0.0.1 -P7148 -upolardbx_root -pXXXXXX

l.待数据导入完毕后,执行如下命令,在源端验证压测数据的完整性。

use tpcc;
select a.* from (Select w_id, w_ytd from bmsql_warehouse) a left join (select d_w_id, sum(d_ytd) as d_ytd_sum from bmsql_district group by d_w_id) b on a.w_id = b.d_w_id and a.w_ytd = b.d_ytd_sum where b.d_w_id is null;
select a.* from (Select d_w_id, d_id, D_NEXT_O_ID - 1 as d_n_o_id from bmsql_district) a left join (select o_w_id, o_d_id, max(o_id) as o_id_max from bmsql_oorder group by  o_w_id, o_d_id) b on a.d_w_id = b.o_w_id and a.d_id = b.o_d_id and a.d_n_o_id = b.o_id_max where b.o_w_id is null;
select a.* from (Select d_w_id, d_id, D_NEXT_O_ID - 1 as d_n_o_id from bmsql_district) a left join (select no_w_id, no_d_id, max(no_o_id) as no_id_max from bmsql_new_order group by no_w_id, no_d_id) b on a.d_w_id = b.no_w_id and a.d_id = b.no_d_id and a.d_n_o_id = b.no_id_max where b.no_id_max is null;
select * from (select (count(no_o_id)-(max(no_o_id)-min(no_o_id)+1)) as diff from bmsql_new_order group by no_w_id, no_d_id) a where diff != 0;
select a.* from (select o_w_id, o_d_id, sum(o_ol_cnt) as o_ol_cnt_cnt from bmsql_oorder  group by o_w_id, o_d_id) a left join (select ol_w_id, ol_d_id, count(ol_o_id) as ol_o_id_cnt from bmsql_order_line group by ol_w_id, ol_d_id) b on a.o_w_id = b.ol_w_id and a.o_d_id = b.ol_d_id and a.o_ol_cnt_cnt = b.ol_o_id_cnt where b.ol_w_id is null;
select a.* from (select d_w_id, sum(d_ytd) as d_ytd_sum from bmsql_district group by d_w_id) a left join (Select w_id, w_ytd from bmsql_warehouse) b on a.d_w_id = b.w_id and a.d_ytd_sum = b.w_ytd where b.w_id is null;

返回结果如下,若结果集均为空,则证明压测数据完整。

m.输入exit退出PolarDB-X集群。

n.执行如下命令,运行TPC-C测试。

./runBenchmark.sh props.mysql

返回结果如下,运行TPC-C测试后可以您看到实时的tpmC数值。请您耐心等待2分钟后,运行结束后会显示平均的tpmC数值。

o.执行云服务器ECS_3实例的PolarDB-X集群安装完成后输出的的连接方式,登录PolarDB-X。例如mysql -h127.0.0.1 -P7148 -upolardbx_root -pXXXXXX

p.分别在终端二和终端三的PolarDB-X集群中执行如下命令,进行数据校验。

use tpcc;
select bit_xor(crc32(CONCAT_WS(',', `ol_w_id`, `ol_d_id`, `ol_o_id`, `ol_number`, `ol_i_id`, `ol_amount`, `ol_supply_w_id`, `ol_quantity`, `ol_dist_info`))) as checksum from  bmsql_order_line;

当源端和目标端返回结果一致时,表示两侧数据一致,replica保证了数据的一致性。

7. (选做)清理现场和回收资源

本步骤将指导您如何停止MySQL服务和删除PolarDB-X集群。

说明:在云起实验室中您可直接在页面右上角单击结束实验,即可释放所有资源。

停止MySQL服务。

a.切换至终端一,输入exit退出MySQL数据库。

b.执行如下命令,停止MySQL服务。

systemctl stop mysqld.service

删除PolarDB-X集群。

a.切换至终端二,输入exit退出PolarDB-X集群。

b.执行如下命令,删除云服务器ECS_2实例的PolarDB-X集群。

pxd cleanup

c.切换至终端三,输入exit退出PolarDB-X集群。

d.执行如下命令,删除云服务器ECS_3实例的PolarDB-X集群。

pxd cleanup

8. 了解更多

如果您想了解更多有关PolarDB-X Replica原理和使用知识,详情请参见如下内容。

PolarDB-X全局Binlog解读

MySQL 官方文档

跟我学直播回放

实验链接:https://developer.aliyun.com/adc/scenario/exp/4a079a73893947b9a220f790de8f4652?spm=a2c6h.13858375.0.i11.c12d6988cZBRGN

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
5月前
|
运维 关系型数据库 分布式数据库
PolarDB产品使用问题之列存索引的原理是什么
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
11月前
|
存储 关系型数据库 分布式数据库
PolarDB的降本增效原理
PolarDB的降本增效原理
62 0
|
分布式数据库 调度 数据库
直播预告 | PolarDB-X 备份恢复原理与实践
备份恢复是生产级数据库必不可少的功能,而PolarDB-X 作为一款分布式数据库,备份数据的全局一致也是最基本的要求。本期分享将介绍PolarDB-X 开源版备份恢复功能的背景与原理,以及如何使用 PolarDB-X Operator 实现备份调度。
直播预告 | PolarDB-X 备份恢复原理与实践
|
关系型数据库 MySQL 测试技术
PolarDB-X replica原理和使用
《PolarDB-X 动手实践》系列第九期,体验如何用PolarDB-X Replica将PolarDB-X作为不同上游数据库的备库。
|
SQL Kubernetes Cloud Native
云原生数据库PolarDB分布式版(PolarDB-X)原理导读
由于PolarDB-X相关文档比较丰富,知识点分布广泛,因此我专门整理一篇导读文章帮助大家更有节奏有方向的学习。本文所推荐文章会按照由浅入深的顺序,并且每个知识点前都会进行提问,大家可以带着问题进入章节学习。最后希望大家都能领会到分布式数据库的魅力。
|
存储 AliSQL 关系型数据库
《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL高可用原理(上)
《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL高可用原理(上)
182 0
|
6月前
|
关系型数据库 分布式数据库 数据库
【PolarDB开源】PolarDB-X源码解读:分布式事务处理机制揭秘
【5月更文挑战第20天】PolarDB-X,PolarDB家族的一员,专注于大规模分布式事务处理,采用2PC协议保证ACID特性。源码解析揭示其通过预提交、一致性快照隔离和乐观锁优化事务性能,以及利用事务日志进行故障恢复。深入理解其事务处理机制对开发者掌握分布式数据库核心技术至关重要。随着开源社区的发展,更多优化方案将涌现,助力构建更强大的分布式数据库系统。
219 6
|
4月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用问题之如何基于Docker进行PolarDB-X单机模拟部署
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
PolarDB产品使用问题之如何基于Docker进行PolarDB-X单机模拟部署
|
4月前
|
Oracle 关系型数据库 分布式数据库
PolarDB产品使用问题之使用pxd安装PolarDB-X出现报错,该怎么办
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
Kubernetes 关系型数据库 分布式数据库
PolarDB产品使用问题之PolarDB-X的架构形态有什么区别
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。

相关产品

  • 云原生分布式数据库 PolarDB-X
  • 下一篇
    无影云桌面