暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PolarDB PostgreSQL版的计算节点扩缩容(上)

PolarDB农夫山泉 2023-06-26
213

PolarDB PostgreSQL版(简称 PolarDB-PG)是一款阿里云自主研发的云原生关系型数据库产品,100% 兼容 PostgreSQL,高度兼容Oracle语法;采用基于 Shared-Storage 的存储计算分离架构,具有极致弹性、毫秒级延迟、HTAP 的能力和高可靠、高可用、弹性扩展等企业级数据库特性。同时,PolarDB 具有大规模并行计算能力,可以应对OLTP与OLAP混合负载。

PolarDB for PostgreSQL 是一款存储与计算分离的数据库,所有计算节点共享存储,并可以按需要弹性增加或删减计算节点而无需做任何数据迁移,本文将协助您在共享存储集群上添加或删除计算节点,分两部分内容介绍,该篇介绍部署读写节点部分。

部署读写节点

首先,在已经搭建完毕的共享存储集群上,初始化并启动第一个计算节点,即读写节点,该节点可以对共享存储进行读写。我们在下面的镜像中提供了已经编译完毕的 PolarDB for PostgreSQL 内核和周边工具的可执行文件:

$ docker pull polardb/polardb_pg_binary:pfs
$ docker run -it \
    --cap-add=SYS_PTRACE \
    --privileged=true \
    --name polardb_pg \
    --shm-size=512m \
    polardb/polardb_pg_binary:pfs \
    bash

$ ls ~/tmp_basedir_polardb_pg_1100_bld/bin/
clusterdb     dropuser           pg_basebackup   pg_dump         pg_resetwal    pg_test_timing       polar-initdb.sh          psql
createdb      ecpg               pgbench         pg_dumpall      pg_restore     pg_upgrade           polar-replica-initdb.sh  reindexdb
createuser    initdb             pg_config       pg_isready      pg_rewind      pg_verify_checksums  polar_tools              vacuumdb
dbatools.sql  oid2name           pg_controldata  pg_receivewal   pg_standby     pg_waldump           postgres                 vacuumlo
dropdb        pg_archivecleanup  pg_ctl          pg_recvlogical  pg_test_fsync  polar_basebackup     postmaster

确认存储可访问

使用 lsblk 命令确认存储集群已经能够被当前机器访问到。比如,如下示例中的 nvme1n1 是将要使用的共享存储的块设备:

$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0   40G  0 disk
└─nvme0n1p1 259:1    0   40G  0 part /etc/hosts
nvme1n1     259:2    0  100G  0 disk

格式化并挂载 PFS 文件系统

此时,共享存储上没有任何内容。使用容器内的 PFS 工具将共享存储格式化为 PFS 文件系统的格式:

sudo pfs -C disk mkfs nvme1n1

格式化完成后,在当前容器内启动 PFS 守护进程,挂载到文件系统上。该守护进程后续将会被计算节点用于访问共享存储:

sudo /usr/local/polarstore/pfsd/bin/start_pfsd.sh -p nvme1n1 -w 2

初始化数据目录

使用 initdb 在节点本地存储的 ~/primary 路径上创建本地数据目录。本地数据目录中将会存放节点的配置、审计日志等节点私有的信息:

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

使用 PFS 工具,在共享存储上创建一个共享数据目录;使用 polar-initdb.sh 脚本把将会被所有节点共享的数据文件拷贝到共享存储的数据目录中。将会被所有节点共享的文件包含所有的表文件、WAL 日志文件等:

sudo pfs -C disk mkdir /nvme1n1/shared_data

sudo $HOME/tmp_basedir_polardb_pg_1100_bld/bin/polar-initdb.sh \
    $HOME/primary/ /nvme1n1/shared_data/

编辑读写节点配置

对读写节点的配置文件 ~/primary/postgresql.conf 进行修改,使数据库以共享模式启动,并能够找到共享存储上的数据目录:

port=5432 polar_hostid=1 polar_enable_shared_storage_mode=on polar_disk_name='nvme1n1' polar_datadir='/nvme1n1/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'

编辑读写节点的客户端认证文件 ~/primary/pg_hba.conf,允许来自所有地址的客户端以 postgres 用户进行物理复制:

host	replication	postgres	0.0.0.0/0	trust

启动读写节点

使用以下命令启动读写节点,并检查节点能否正常运行:

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

$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)

最后修改时间:2023-06-26 17:38:33
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论