Curve 块存储实践 _ 十分钟带你体验高性能云原生数据库PolarDB

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: Curve 块存储是云原生计算基金会 (CNCF) Sandbox 项目,是网易自研和开源的高性能、易运维、云原生的分布式存储系统。而 PolarDB File System (PFS)是由阿里云自主研发的高性能类 POSIX 的用户态分布式文件系统,服务于阿里云数据库 PolarDB 产品。通过本文的介绍,大家可以快速部署一套 PolarDB+PFS+CurveBS 的云原生数据库,并在 PFS 上编译部署 PolarDB 。

Curve 块存储是云原生计算基金会 (CNCF) Sandbox 项目,是网易自研和开源的高性能、易运维、云原生的分布式存储系统。而 PolarDB File System (PFS)是由阿里云自主研发的高性能类 POSIX 的用户态分布式文件系统,服务于阿里云数据库 PolarDB 产品。通过本文的介绍,大家可以快速部署一套 PolarDB+PFS+CurveBS 的云原生数据库,并在 PFS 上编译部署 PolarDB 。


a1.jpg环境准备

Curve 块存储集群

首先大家需要一个部署完毕的 Curve 块存储集群,相关的内容大家可以参考 Curveadm Wiki,关于如何部署 Curve 块存储系统有着详细的介绍和指导,欢迎大家上手体验。如果是为了体验大家可以仅部署单机的 Curve 块存储系统,无需格式化硬盘;如果是为了性能性能建议大家部署多机版本,并格式化硬盘。

CurveAdm 是 Curve 社区为提高部署的易用性而设计的工具,其主要用于快速部署和运维 Curve块存储/Curve文件集群,其操作简单并且拥有丰富的功能和一些高级的特性。

可以使用 curveadm status 查看部署的 Curve 块存储集群。

curveadm status
Get Service Status: [OK]  
cluster name      : curve-bs
cluster kind      : curvebs
cluster mds addr  : ***.***.***.***:***0,***.***.***.***:***1,***.***.***.***:***2
cluster mds leader: ***.***.***.***:****2 / b42a0bf806c0
Id            Role           Host             Replicas  Container Id  Status                   
--            ----           ----             --------  ------------  ------                   
3f4eacb8d9bf  etcd           ***************  1/1       8e34804b0f9a  Up 33 hours              
c1cdc738ba4e  etcd           ***************  1/1       e898382a8bd4  Up 33 hours              
85c7fcc3a1a0  etcd           ***************  1/1       065ba1dad6c3  Up 33 hours              
eab7a8933d85  mds            ***************  1/1       6d52a4d48b82  Up 10 hours              
d8eef53ce9bf  mds            ***************  1/1       8c0d2065bfbf  Up 10 hours              
b42a0bf806c0  mds            ***************  1/1       a8b49cc65f4d  Up 24 hours              
acd02a245b41  chunkserver    ***************  1/1       80d7e673c789  Up 33 hours              
ad6fb1dedce0  chunkserver    ***************  1/1       fe39d4b4e34e  Up 33 hours              
c45b9a0435f9  chunkserver    ***************  1/1       9ee3d30e9895  Up 33 hours              
5f5ad870598a  snapshotclone  ***************  1/1       224d32c2e0bc  Up 33 hours
bab6e56368c6  snapshotclone  ***************  1/1       4e321e8f40cc  Up 33 hours
455b674b84e8  snapshotclone  ***************  1/1       64927e222397  Up 33 hours

PolarDB 开发镜像

Curve 社区已经准备好了专门用于适配 Curve块存储的 PFS,镜像内已经打包好所需的内容,无需再次编译安装。使用以下命令拉取对应的镜像:

docker pull opencurvedocker/polardb-build:latest-centos7

格式并挂载 PFS

在用于部署 PolarDB 的计算节点上,通过以下命令进入容器:

docker run -it \
    --network=host \
    --cap-add=SYS_PTRACE --privileged=true \
    --name curve-polardb_pg \
    opencurvedocker/polardb-build:latest-centos7 bash

创建条带化卷

在镜像内已经安装了 curve 工具,该工具可以用于创建实际存储 PolarFS 数据的 Curve 卷。打开配置文件 /etc/curve/client.conf,修改属性 mds.listen.addr 为 curveadm status 显示中的 cluster mds addr 后面的内容:

#
################### mds一侧配置信息 ##################
#
# mds的地址信息,对于mds集群,地址以逗号隔开
mds.listen.addr=***.***.***.***:***0,***.***.***.***:***1,***.***.***.***:***2
...

使用以下命令可以创建 Curve 条带化卷:

curve create --filename /volume --user my --length 10 --stripeUnit 16384 --stripeCount 64

用户可以使用 curve create -h 命令来查看创建卷命令的详细说明。上面的例子中我们创建了一个拥有以下属性的 Curve 卷:

  • 卷名为 /volume
  • 所属用户为 my
  • 大小为 10GB
  • 条带大小为 16KB
  • 条带个数为 64


格式化 Curve 卷

在使用 Curve 卷之前需要使用 pfs 来格式化对应的 curve 卷:

sudo pfs -C curve mkfs pool@@volume_my_

Tips:由于 PolarFS 解析的特殊性,需要以供 pool@@volume_my_ 的形式指定 Curve 卷,并且以@ 来替换卷名中的根 /。

启动 pfsd 守护进程

使用以下命令启动 pfsd 守护进程来挂载 PFS 文件系统:


sudo /usr/local/polarstore/pfsd/bin/start_pfsd.sh -p pool@@volume_my_


部署 PolarDB

在前面的步骤中我们已经成功的拉去了 PolarDB 的镜像,并进入容器中。下面我们需要从 GitHub 上下载 PolarDB for PostgreSQL 的源代码,稳定分支为 POLARDB_11_STABLE,代码克隆完成后,进入源代码目录:

git clone -b POLARDB_11_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL.git
cd PolarDB-for-PostgreSQL/

部署读写节点

在读写节点上,使用以下命令编译 PolarDB 内核:


./polardb_build.sh --with-pfsd

Tips上述脚本完成后会自动部署一个基于本地文件系统的实例,需要执行以下命令来停止这个实例:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl \
    -D $HOME/tmp_master_dir_polardb_pg_1100_bld/ \
    stop

初始化数据目录:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/initdb -D $HOME/primary

使用 pfs 创建共享数据目录/pool@@volume_my_/shared_data,

并初始化 db 的本地和共享数据目录:

# 使用 pfs 创建共享数据目录
sudo pfs -C curve mkdir /pool@@volume_my_/shared_data
# 初始化 db 的本地和共享数据目录
sudo $HOME/tmp_basedir_polardb_pg_1100_bld/bin/polar-initdb.sh \
    $HOME/primary/ /pool@@volume_my_/shared_data/ curve

编辑读写节点的配置文件

$HOME/primary/postgresql.conf,增加以下内容:

port=5432
polar_hostid=1
polar_enable_shared_storage_mode=on
polar_disk_name='pool@@volume_my_'
polar_datadir='/pool@@volume_my_/shared_data/'
polar_vfs.localfs_mode=off
shared_preload_libraries='$libdir/polar_vfs,$libdir/polar_worker'
polar_storage_cluster_name='disk'
logging_collector=on
log_line_prefix='%p\t%r\t%u\t%m\t'
log_directory='pg_log'
listen_addresses='*'
max_connections=1000
synchronous_standby_names='replica1'

打开 $HOME/primary/pg_hba.conf,增加以下配置项:

host replication postgres 0.0.0.0/0 trust

最后,启动读写节点:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl start -D $HOME/primary

检查读写节点能否正常运行:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/psql \
    -p 5432 \
    -d postgres \
    -c 'select version();'
            version
--------------------------------
 PostgreSQL 11.9 (POLARDB 11.9)
(1 row)

在读写节点上,为对应的只读节点创建相应的 replication slot,用于只读节点的物理流复制:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/psql \
    -p 5432 \
    -d postgres \
    -c "select pg_create_physical_replication_slot('replica1');"
 pg_create_physical_replication_slot
-------------------------------------
 (replica1,)
(1 row)

只读节点部署

在只读节点上,使用 --with-pfsd 选项编译 PolarDB 内核。

./polardb_build.sh --with-pfsd

Tips:上述脚本完成后会自动部署一个基于本地文件系统的实例,需要执行以下命令来停止这个实例:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl \
    -D $HOME/tmp_master_dir_polardb_pg_1100_bld/ \
    stop

在节点本地初始化数据目录 $HOME/replica1/:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/initdb -D $HOME/replica1

编辑只读节点的配置。

打开 $HOME/replica1/postgresql.conf,增加配置项:

port=5433
polar_hostid=2
polar_enable_shared_storage_mode=on
polar_disk_name='pool@@volume_my_'
polar_datadir='/pool@@volume_my_/shared_data/'
polar_vfs.localfs_mode=off
shared_preload_libraries='$libdir/polar_vfs,$libdir/polar_worker'
polar_storage_cluster_name='curve'
logging_collector=on
log_line_prefix='%p\t%r\t%u\t%m\t'
log_directory='pg_log'
listen_addresses='*'
max_connections=1000

创建 $HOME/replica1/recovery.conf,增加以下配置项:

Tips:请在下面替换读写节点(容器)所在的 IP 地址

polar_replica='on'
recovery_target_timeline='latest'
primary_slot_name='replica1'
primary_conninfo='host=[读写节点所在IP] port=5432 user=postgres dbname=postgres application_name=replica1'

最后,启动只读节点:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl start -D $HOME/replica1

检查只读节点能否正常运行:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/psql \
    -p 5433 \
    -d postgres \
    -c 'select version();'
# 下面为输出内容
            version
--------------------------------
 PostgreSQL 11.9 (POLARDB 11.9)
(1 row)

集群检查和测试

部署完成后,需要进行实例检查和测试,确保读写节点可正常写入数据、只读节点可以正常读取。

登录读写节点,创建测试表并插入样例数据:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/psql -q \
    -p 5432 \
    -d postgres \
    -c "create table t(t1 int primary key, t2 int);insert into t values (1, 1),(2, 3),(3, 3);"

只读节点,查询刚刚插入的样例数据:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/psql -q \
    -p 5433 \
    -d postgres \
    -c "select * from t;"
# 下面为输出内容
 t1 | t2
----+----
  1 |  1
  2 |  3
  3 |  3
(3 rows)

在读写节点上插入的数据对只读节点可见。

总结

通过以上的步骤我们基于 Curve 块存储系统部署了 PFS 系统;然后分别编译部署了 PolarDB 的读写节点和只读节点;最后通过在读写节点写入、读节点读取的方式检查测试了集群是否正常工作。

通过这种方式部署避免了直接暴露块设备,并且 PFS 通过 Curve-sdk 直接与 Curve 块存储通信,减少了 IO 的路径。好了,现在你已经成功部署了一套基于 Curve 块存储的 PFS 和 PolarDB,快去享用吧!~


<原创作者:程义, Curve Maintainer>

相关实践学习
函数计算X RDS PostgreSQL,基于LLM大语言模型构建AI知识库
基于ChatGLM6B 大语言模型构建AI知识库问答应用。答疑群17125058181
相关文章
|
6天前
|
Kubernetes Cloud Native 持续交付
云原生技术浪潮下的微服务架构实践
在数字化转型的今天,云原生技术成为推动企业IT革新的关键力量。本文将通过浅显易懂的语言和实际案例,带领读者了解云原生的核心概念、微服务架构的设计原则以及如何在云平台上高效部署和管理微服务。我们将从基础概念出发,逐步深入到微服务的生命周期管理,探讨如何在云原生生态中实现快速迭代和持续交付。无论你是云原生技术的初学者,还是希望深化理解的开发者,这篇文章都将为你提供有价值的指导和思考。
|
11天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代软件开发中的实践与挑战
【8月更文挑战第8天】随着云计算技术的不断成熟,云原生(Cloud Native)已成为推动现代软件开发和运维的关键力量。云原生不仅仅是关于容器化、微服务架构或持续交付的技术实践;它代表了一种文化和方法论的转变,旨在构建可扩展、灵活且高度自动化的应用程序。本文将探讨云原生的核心概念、其在实际开发中的应用以及面临的主要挑战,旨在为读者提供云原生技术实施的全面视角。
|
15天前
|
存储 Kubernetes Cloud Native
云原生之旅:Kubernetes 集群部署实践
【8月更文挑战第4天】本文将带领读者进入云原生的世界,通过实战演练,深入理解如何在云端构建和部署一个 Kubernetes 集群。我们不仅会探讨理论知识,更会通过代码示例,手把手教你从零开始搭建自己的 Kubernetes 环境。无论你是云原生新手,还是希望加深对 Kubernetes 的理解,这篇文章都将是你的不二选择。
|
9天前
|
运维 Cloud Native 安全
云原生技术的未来展望:探索与实践
【8月更文挑战第10天】 在数字化浪潮的席卷下,云原生技术以其灵活性、可扩展性和高效率成为推动现代软件开发和运维革新的关键力量。本文将深入探讨云原生技术的现状,分析其面临的挑战,并展望未来的发展趋势,为读者提供一个关于如何利用云原生技术来构建和优化应用的全面视角。
36 13
|
6天前
|
关系型数据库 Serverless 分布式数据库
揭秘PolarDB Serverless:大促洪峰秒级应对,无感伸缩见证科技魔法!一探云数据库管理的颠覆性革新,强一致性的守护神来了!
【8月更文挑战第13天】在云计算背景下,阿里巴巴的云原生数据库PolarDB Serverless针对弹性伸缩与高性能一致性提供了出色解决方案。本文通过一个电商平台大促活动的真实案例全面测评PolarDB Serverless的表现。面对激增流量,PolarDB Serverless能秒级自动扩展资源,如通过调用`pd_add_reader`快速增加读节点分摊压力;其无感伸缩确保服务平滑运行,不因扩展中断;强一致性模型则保障了数据准确性,即便在高并发写操作下也确保库存等数据的同步一致性。PolarDB Serverless简化了数据库管理,提升了系统效能,是追求高效云数据库管理企业的理想选择。
28 7
|
4天前
|
关系型数据库 MySQL Serverless
在部署云数据库PolarDB MySQL版 Serverless集群的过程中问题点
在部署PolarDB MySQL Serverless过程中,常见问题包括配置误解、网络配置错误、资源未及时释放及压测不熟练。建议深入理解配置项,确保合理设置伸缩策略;明确业务需求,使PolarDB与现有服务同处一地域与VPC;利用提醒功能管理资源生命周期;按官方指南执行压测。新用户面临的学习曲线、资源管理自动化不足及成本控制难题,可通过增强文档友好性、引入智能成本管理与用户界面优化来改善。
14 1
|
14天前
|
运维 Cloud Native 持续交付
云原生架构的演进与实践
【8月更文挑战第5天】随着云计算技术的飞速发展,云原生架构逐渐成为企业数字化转型的重要推手。本文将深入探讨云原生的核心概念、关键技术以及在现代IT架构中的应用,分析云原生架构如何促进服务的快速迭代和高效运维,同时指出企业在采纳云原生过程中可能面临的挑战及应对策略。
39 7
|
10天前
|
SQL 关系型数据库 分布式数据库
PolarDB Proxy配置与优化:提升数据库访问效率
PolarDB是阿里云的高性能分布式数据库,PolarDB Proxy作为关键组件,解析并转发SQL请求至集群。本文概览PolarDB Proxy功能,包括连接池管理、负载均衡及SQL过滤;并提供配置示例,如连接池的最大连接数与空闲超时时间设置、一致哈希路由及SQL安全过滤规则。最后探讨了监控调优、查询缓存及网络优化策略,以实现高效稳定的数据库访问。
38 2
|
15天前
|
Kubernetes Cloud Native 微服务
云原生之旅:从容器到微服务的实践之路
【8月更文挑战第4天】在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性和弹性成为企业的新宠。本文将深入探讨云原生的核心组件—容器化与微服务架构,并通过实际代码示例揭示如何构建和管理现代化应用。我们将一同走进云原生的世界,解锁其背后的原理和实践方法,开启高效、可靠的软件开发旅程。
|
11天前
|
存储 关系型数据库 分布式数据库
揭秘PolarDB:中国云原生数据库的超级英雄,如何颠覆传统数据存储?
【8月更文挑战第8天】在数字化时代,数据成为企业的核心资产。随着云技术的发展,企业纷纷向云端迁移,选择合适的云原生数据库至关重要。PolarDB凭借卓越性能、高可靠性和易用性在中国市场领先。它采用存储计算分离架构,支持独立扩展,提高处理大规模数据的效率和灵活性。多副本机制确保数据高可用性和持久性,优于单副本存储方案。兼容多种数据库引擎,提供丰富管理工具,降低迁移和维护成本。按量付费模式帮助企业有效控制成本。因此,PolarDB为企业数字化转型提供了强有力的支持。
38 1

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB