PolarDBforPostgreSQL/docs/deploying/db-pfs-curve.md

248 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
author: 程义
date: 2022/11/02
minute: 15
---
# 基于 PFS for CurveBS 文件系统部署
<ArticleInfo :frontmatter=$frontmatter></ArticleInfo>
本文将指导您在分布式文件系统 PolarDB File SystemPFS上编译部署 PolarDB适用于已经在 Curve 块存储上格式化并挂载 PFS 的计算节点。
我们在 DockerHub 上提供了一个 [PolarDB 开发镜像](https://hub.docker.com/r/polardb/polardb_pg_devel/tags),里面已经包含编译运行 PolarDB for PostgreSQL 所需要的所有依赖。您可以直接使用这个开发镜像进行实例搭建。镜像目前支持 AMD64 和 ARM64 两种 CPU 架构。
## 源码下载
在前置文档中,我们已经从 DockerHub 上拉取了 PolarDB 开发镜像,并且进入到了容器中。进入容器后,从 [GitHub](https://github.com/ApsaraDB/PolarDB-for-PostgreSQL) 上下载 PolarDB for PostgreSQL 的源代码,稳定分支为 `POLARDB_11_STABLE`。如果因网络原因不能稳定访问 GitHub则可以访问 [Gitee 国内镜像](https://gitee.com/mirrors/PolarDB-for-PostgreSQL)。
:::: code-group
::: code-group-item GitHub
```bash:no-line-numbers
git clone -b POLARDB_11_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL.git
```
:::
::: code-group-item Gitee 国内镜像
```bash:no-line-numbers
git clone -b POLARDB_11_STABLE https://gitee.com/mirrors/PolarDB-for-PostgreSQL
```
:::
::::
代码克隆完毕后,进入源码目录:
```bash:no-line-numbers
cd PolarDB-for-PostgreSQL/
```
## 编译部署 PolarDB
### 读写节点部署
在读写节点上,使用 `--with-pfsd` 选项编译 PolarDB 内核。请参考 [编译测试选项说明](./db-localfs.md#编译测试选项说明) 查看更多编译选项的说明。
```bash:no-line-numbers
./polardb_build.sh --with-pfsd
```
::: warning
上述脚本在编译完成后,会自动部署一个基于 **本地文件系统** 的实例,运行于 `5432` 端口上。
手动键入以下命令停止这个实例,以便 **在 PFS 和共享存储上重新部署实例**
```bash:no-line-numbers
$HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl \
-D $HOME/tmp_master_dir_polardb_pg_1100_bld/ \
stop
```
:::
在节点本地初始化数据目录 `$HOME/primary/`
```bash:no-line-numbers
$HOME/tmp_basedir_polardb_pg_1100_bld/bin/initdb -D $HOME/primary
```
在共享存储的 `/pool@@volume_my_/shared_data` 目录上初始化共享数据目录
```bash:no-line-numbers
# 使用 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`,增加配置项:
```ini
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='curve'
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`,增加以下配置项:
```ini:no-line-numbers
host replication postgres 0.0.0.0/0 trust
```
最后,启动读写节点:
```bash:no-line-numbers
$HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl start -D $HOME/primary
```
检查读写节点能否正常运行:
```bash:no-line-numbers
$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用于只读节点的物理流复制
```bash:no-line-numbers
$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 内核。
```bash:no-line-numbers
./polardb_build.sh --with-pfsd
```
::: warning
上述脚本在编译完成后,会自动部署一个基于 **本地文件系统** 的实例,运行于 `5432` 端口上。
手动键入以下命令停止这个实例,以便 **在 PFS 和共享存储上重新部署实例**
```bash:no-line-numbers
$HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl \
-D $HOME/tmp_master_dir_polardb_pg_1100_bld/ \
stop
```
:::
在节点本地初始化数据目录 `$HOME/replica1/`
```bash:no-line-numbers
$HOME/tmp_basedir_polardb_pg_1100_bld/bin/initdb -D $HOME/replica1
```
编辑只读节点的配置。打开 `$HOME/replica1/postgresql.conf`,增加配置项:
```ini
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`,增加以下配置项:
::: warning
请在下面替换读写节点(容器)所在的 IP 地址。
:::
```ini
polar_replica='on'
recovery_target_timeline='latest'
primary_slot_name='replica1'
primary_conninfo='host=[读写节点所在IP] port=5432 user=postgres dbname=postgres application_name=replica1'
```
最后,启动只读节点:
```bash:no-line-numbers
$HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl start -D $HOME/replica1
```
检查只读节点能否正常运行:
```bash:no-line-numbers
$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)
```
### 集群检查和测试
部署完成后,需要进行实例检查和测试,确保读写节点可正常写入数据、只读节点可以正常读取。
登录 **读写节点**,创建测试表并插入样例数据:
```bash:no-line-numbers
$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);"
```
登录 **只读节点**,查询刚刚插入的样例数据:
```bash:no-line-numbers
$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)
```
在读写节点上插入的数据对只读节点可见。