A国产数据库PolarDB 能不能跑在 H国产操作系统openEuler里?
作者
digoal
日期
2025-01-15
标签
PostgreSQL , PolarDB , DuckDB , docker , macOS , m2 , openEuler
背景
A国产数据库PolarDB 能不能跑在 H国产操作系统openEuler里? 国产会不会为难国产? 看完本篇你就知道了: 有哪些坑? 安装起来丝滑不丝滑?
环境
宿主机 macOS M2 chip
模拟器 Docker Desktop 内核版本 6.10.14-linuxkit
H国产操作系统 openEuler 22.03 ltp sp4
A国产数据库PolarDB 15 开源版本
制作openEuler for PolarDB开发环境镜像
目前PolarDB 官方未提供基于 openeuler 的开发环境镜像, 需要自己制作.
1、下载openeuler 22.03 ltp sp4镜像
https://gitee.com/openeuler/openeuler-docker-images
$ docker pull hub.oepkgs.net/openeuler/openeuler:22.03-lts-sp4
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.oepkgs.net/openeuler/openeuler 22.03-lts-sp4 44d906e4642a 2 weeks ago 316MB
2、测试该镜像在macOS M2 chip宿主机中是否正常?
$ cd ~/data_volumn
$ PWD=`pwd`
$ docker run -d -it -v $PWD:/data -P --shm-size=1g --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name ol1 hub.oepkgs.net/openeuler/openeuler:22.03-lts-sp4 bash
$ docker exec -ti ol1 bash
Welcome to 6.10.14-linuxkit
System information as of time: Wed Jan 15 03:17:07 UTC 2025
System load: 3.64
Memory used: 7.0%
Swap used: 28.4%
Usage On: 18%
Users online: 0
3、基于openeuler 22.03 ltp sp4, 制作PolarDB devel环境镜像
参考
目前PolarDB 官方未提供openeuler镜像, 我基于龙蜥8的 Dockerfile 改了一个, (注: 1 因为有报错, 暂未支持perl tap test包, 但是启动容器后手工安装perl模块正常 ; 2 LC_ALL和LC_LANGUAGE环境变量好像没有被正确设置.), 已经放在我的github
- https://github.com/digoal/polardb-pg-docker-images/blob/main/Dockerfile-devel-openeuler22.03.lts.sp4
制作PolarDB devel环境镜像
cd ~
rm -rf polardb-pg-docker-images
git clone --depth 1 https://github.com/digoal/polardb-pg-docker-images
cd ~/polardb-pg-docker-images/
mkdir logs
cp ./Dockerfile-devel-openeuler22.03.lts.sp4 ./Dockerfile
docker build --platform=linux/arm64 -t="polardb/polardb_pg_devel:openeuler22.03.lts.sp4" --no-cache . 2>&1 | tee ./logs/build.log
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
polardb/polardb_pg_devel openeuler22.03.lts.sp4 1c045b9ab756 22 minutes ago 1.92GB
下面的DEMO基于这个镜像, 试一试PolarDB RAC部署是否正常, 参考
DEMO : PolarDB RAC 部署 on openEuler 22.03 ltp sp4
1、在宿主机(macOS)中生成1个文件(以下文件20GB), 后面在两个容器中将使用这个文件作为loop块设备.
mkdir ~/data_volumn
cd ~/data_volumn
dd if=/dev/zero of=./VirtualDisk.img bs=1m count=20480 oflag=direct
2、启动容器pb1
cd ~/data_volumn
PWD=`pwd`
docker run -d -it -v $PWD:/data -P --shm-size=1g --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name pb1 polardb/polardb_pg_devel:openeuler22.03.lts.sp4 bash
后面要确保2个容器的网络可以互通
# 进入容器pb1
docker exec -ti pb1 bash
sudo dnf install -y iproute iputils
ip addr show
104: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65535 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
等2个容器都启动后检查确认网络可以互通
172.17.0.2
ping 172.17.0.3
64 bytes from 172.17.0.3: icmp_seq=0 ttl=64 time=0.050 ms
3、启动容器pb2
cd ~/data_volumn
PWD=`pwd`
docker run -d -it -v $PWD:/data -P --shm-size=1g --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name pb2 polardb/polardb_pg_devel:openeuler22.03.lts.sp4 bash
确保2个容器的网络可以互通
# 进入容器pb2
docker exec -ti pb2 bash
sudo dnf install -y iproute iputils
ip addr show
172.17.0.3
等2个容器都启动后检查确认网络可以互通
ping 172.17.0.2
64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.050 ms
4、在pb1中使用共享的VirtualDisk.img文件创建loop设备, 需要找到一个空闲的loop设备. ps: pb1创建好的loop设备在这个macOS宿主机中的容器中都可以看到.
$ losetup -f
/dev/loop0
$ sudo losetup --direct-io=on /dev/loop0 /data/VirtualDisk.img
$ ll /dev/loop0
brw-rw-rw- 1 root root 7, 1 Dec 16 13:52 /dev/loop0
5、pb1,pb2. 将loop设备软链到nvme1n1方便使用, 如果你的容器内已经有这个名字, 可以换一个例如nvme2n1.
# 注意: 容器重启后, 这个软链就不存在了, 需重新创建该软链
sudo ln -s /dev/loop0 /dev/nvme1n1
6、格式化共享盘, 在pb1 或 pb2中, 任意一个容器中执行一次即可.
sudo pfs -C disk mkfs -f nvme1n1
以下是日志:
pfs tool cmd record:mkfs -f nvme1n1
[PFS_LOG] Jan 15 08:14:45.753538 INF [270] pfs build version:libpfs_version_("pfsd-build-desc-_-Wed Jan 15 07:36:27 UTC 2025")
[PFS_LOG] Jan 15 08:14:45.753654 INF [270] pid: 269, caller: sudo pfs -C disk mkfs -f nvme1n1
[PFS_LOG] Jan 15 08:14:45.753703 INF [270] pid: 195, caller: bash
[PFS_LOG] Jan 15 08:14:45.755449 INF [270] open device cluster disk, devname nvme1n1, flags 0x13
[PFS_LOG] Jan 15 08:14:45.755492 INF [270] disk dev path: /dev/nvme1n1
[PFS_LOG] Jan 15 08:14:45.755505 INF [270] open local disk: open(/dev/nvme1n1, 0x10002)
[PFS_LOG] Jan 15 08:14:45.755536 INF [270] ioctl status 0
[PFS_LOG] Jan 15 08:14:45.755546 INF [270] pfs_diskdev_info get pi_pbdno 0, pi_rwtype 1, pi_unitsize 4194304, pi_chunksize 10737418240, pi_disksize 21474836480
[PFS_LOG] Jan 15 08:14:45.755551 INF [270] pfs_diskdev_info waste size: 0
[PFS_LOG] Jan 15 08:14:45.755553 INF [270] disk size 0x500000000, chunk size 0x280000000
[PFS_LOG] Jan 15 08:14:45.756284 INF [270] mkfs runs forcedly, although PBD nvme1n1 chunk 0 is already formatted
Init chunk 0
metaset 0/1: sectbda 0x1000, npage 80, objsize 128, nobj 2560, oid range [ 0, a00)
metaset 0/2: sectbda 0x51000, npage 64, objsize 128, nobj 2048, oid range [ 0, 800)
metaset 0/3: sectbda 0x91000, npage 64, objsize 128, nobj 2048, oid range [ 0, 800)
Init chunk 1
metaset 1/1: sectbda 0x280001000, npage 80, objsize 128, nobj 2560, oid range [ 1000, 1a00)
metaset 1/2: sectbda 0x280051000, npage 64, objsize 128, nobj 2048, oid range [ 800, 1000)
metaset 1/3: sectbda 0x280091000, npage 64, objsize 128, nobj 2048, oid range [ 800, 1000)
Inited filesystem(21474836480 bytes), 2 chunks, 2560 blktags, 2048 direntries, 2048 inodes per chunk
making paxos file
init paxos lease
making journal file
pfs mkfs succeeds!
7、pb1, pb2. 都启动pfsd, -w为工作进程数量, 数字越大IO性能越好, 这里受制于容器资源限制设置为1.
sudo /usr/local/polarstore/pfsd/bin/start_pfsd.sh -p nvme1n1 -w 1
日志如下:
option workers `
option pbdname nvme1n1
option server id 0
option logconf /usr/local/polarstore/pfsd/bin/../conf/pfsd_logger.conf
starting pfsd[68] nvme1n1
pfsdaemon nvme1n1 start success
# 查看该共享盘内, 当前无数据
sudo pfs -C disk ls /nvme1n1/
输出日志如下:
File 1 4194304 Mon Dec 16 14:02:16 2024 .pfs-paxos
File 1 1073741824 Mon Dec 16 14:02:45 2024 .pfs-journal
total 2105344 (unit: 512Bytes)
停止pfsd使用如下方式, (这里不需要执行, 只是展示一下如何停止pfsd):
sudo /usr/local/polarstore/pfsd/bin/stop_pfsd.sh nvme1n1
8、在pb1编译polardb 15.
cd /data
# 克隆PolarDB 15 稳定分支代码
git clone --depth 1 -b POLARDB_15_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL
# 编译安装PolarDB 15, 不要初始化实例
cd /data/PolarDB-for-PostgreSQL
./build.sh --prefix=/data/polardb --jobs=4 --debug=on --port=5432 --ni --ec="--with-pfsd"
# 在实际生产中可以使用 --debug=off , 这里开启--debug=on主要是方便出了问题好调试.
9、pb1, pb2. 将编译好的二进制拷贝到pb1, pb2的HOME目录, 便于调用:
$ cp -r /data/polardb/tmp_polardb_pg_15_base ~/
$ which psql
/home/postgres/tmp_polardb_pg_15_base/bin/psql
版本
$ psql -V
psql (PostgreSQL) 15.10
10、pb1, 将pb1作为primary 节点, 在pb1执行创建polardb实例共享数据目录.
sudo pfs -C disk mkdir /nvme1n1/shared_data
11、pb1, 初始化primary节点
initdb -D $HOME/primary
sudo /home/postgres/tmp_polardb_pg_15_base/bin/polar-initdb.sh $HOME/primary/ /nvme1n1/shared_data/ primary
以下是日志
....
copy file from /home/postgres/primary//pg_multixact/offsets/0000 to /nvme1n1/shared_data///pg_multixact/offsets/0000 succeeded
copy file from /home/postgres/primary//pg_multixact/members/0000 to /nvme1n1/shared_data///pg_multixact/members/0000 succeeded
list base dir file 1
13572
4
5
delete /home/postgres/primary/base/1/*
delete /home/postgres/primary/base/13572/*
delete /home/postgres/primary/base/4/*
delete /home/postgres/primary/base/5/*
delete /home/postgres/primary/global/*
delete /home/postgres/primary/pg_wal
delete /home/postgres/primary/pg_logindex
delete /home/postgres/primary/pg_twophase
delete /home/postgres/primary/pg_xact
delete /home/postgres/primary/pg_commit_ts
delete /home/postgres/primary/pg_multixact
init PolarDB data dir success
可以看到当前pfs里共享数据目录中已经有数据了. 实际上是初始化过程中把一些initdb的目录move过去的, 剩下的就是本地实例文件.
$ sudo pfs -C disk ls /nvme1n1/shared_data
Dir 1 512 Mon Dec 16 14:34:48 2024 base
Dir 1 7808 Mon Dec 16 14:34:48 2024 global
Dir 1 0 Mon Dec 16 14:34:48 2024 pg_tblspc
Dir 1 256 Mon Dec 16 14:35:19 2024 pg_wal
Dir 1 0 Mon Dec 16 14:35:19 2024 pg_logindex
Dir 1 0 Mon Dec 16 14:35:19 2024 pg_twophase
Dir 1 128 Mon Dec 16 14:35:19 2024 pg_xact
Dir 1 0 Mon Dec 16 14:35:19 2024 pg_commit_ts
Dir 1 256 Mon Dec 16 14:35:20 2024 pg_multixact
total 0 (unit: 512Bytes)
12、配置pb1本地实例 postgresql.conf, pg_hba.conf
echo "
huge_pages=off
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='0.0.0.0'
max_connections=200
# 下面几个参数解决replica不能promote的问题, 因为RO依赖logindex.
polar_logindex_mem_size=64MB
polar_xlog_queue_buffers=64MB
polar_xlog_page_buffers=64MB
# 使用pfs时可以关掉 full page write 和 polar_has_partial_write , 否则请打开这两
full_page_writes = off
polar_has_partial_write = off
# 参考代码 src/backend/storage/buffer/bufmgr.c
" >> ~/primary/postgresql.conf
echo "
host all all 0.0.0.0/0 md5
host replication postgres 172.17.0.0/16 trust
" >> ~/primary/pg_hba.conf
参数模板可参考: https://github.com/ApsaraDB/PolarDB-for-PostgreSQL/blob/POLARDB_15_STABLE/src/backend/utils/misc/polardb.conf.sample
#------------------------------------------------------------------------------
# Common Parameters for PostgreSQL
#------------------------------------------------------------------------------
full_page_writes = off
listen_addresses = '*'
logging_collector = on
max_prepared_transactions = 10
max_worker_processes = 128
max_connections = 1000
shared_buffers = 256MB
shared_preload_libraries ='\$libdir/polar_vfs,\$libdir/polar_io_stat,\$libdir/polar_monitor_preload,\$libdir/polar_worker'
#------------------------------------------------------------------------------
# Common Parameters for PolarDB
#------------------------------------------------------------------------------
polar_disk_name = 'home'
polar_enable_shared_storage_mode = on
polar_vfs.localfs_mode = true
polar_logindex_mem_size=64MB
polar_xlog_queue_buffers=64MB
polar_xlog_page_buffers=64MB
polar_has_partial_write = on
13、在pb1启动primary实例
pg_ctl start -D $HOME/primary
下面准备创建replica节点
14、在 pb1 Primary 节点上,为pb2的 Replica 节点创建相应的复制槽,用于 Replica 节点的物理复制:
psql -p 5432 -d postgres -c "SELECT pg_create_physical_replication_slot('replica1');"
pg_create_physical_replication_slot
-------------------------------------
(replica1,)
(1 row)
15、replica节点部署.
在pb2节点本地磁盘的 ~/replica1 路径下创建一个空目录,然后通过 polar-initdb.sh 脚本使用共享存储上的数据目录来初始化 Replica 节点的本地目录。初始化后的本地目录中没有默认配置文件,所以还需要使用 initdb 创建一个临时的本地目录模板,然后将所有的默认配置文件拷贝到 Replica 节点的本地目录下:
# 进入pb2容器
docker exec -ti pb2 bash
mkdir -m 0700 $HOME/replica1
sudo /home/postgres/tmp_polardb_pg_15_base/bin/polar-initdb.sh $HOME/replica1/ /nvme1n1/shared_data/ replica
# 日志如下:
init replica
list base dir file 5
1
4
13572
mkdir /home/postgres/replica1/base/5
mkdir /home/postgres/replica1/base/1
mkdir /home/postgres/replica1/base/4
mkdir /home/postgres/replica1/base/13572
init PolarDB replica mode dir success
修改replica数据目录及子目录及文件的权限和owner
sudo chmod -R 700 $HOME/replica1
sudo chown -R postgres:postgres $HOME/replica1
生成初始配置文件
initdb -D /tmp/replica1
cp /tmp/replica1/*.conf $HOME/replica1/
rm -rf /tmp/replica1
16、编辑pb2 replica节点配置文件
echo "
port=5432
polar_hostid=2
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='0.0.0.0'
max_connections=200
# 下面几个参数解决replica不能promote的问题, 因为RO依赖logindex.
polar_logindex_mem_size=64MB
polar_xlog_queue_buffers=64MB
polar_xlog_page_buffers=64MB
# 使用pfs时可以关掉 full page write 和 polar_has_partial_write , 否则请打开这两
full_page_writes = off
polar_has_partial_write = off
# replication
primary_slot_name='replica1'
primary_conninfo='host=172.17.0.2 port=5432 user=postgres dbname=postgres application_name=replica1'
" >> ~/replica1/postgresql.conf
echo "
host all all 0.0.0.0/0 md5
host replication postgres 172.17.0.0/16 trust
" >> ~/replica1/pg_hba.conf
标识节点以 Replica 模式启动:
touch $HOME/replica1/replica.signal
启动 Replica 节点:
pg_ctl start -D $HOME/replica1
检查 Replica 节点能否正常运行:
psql -p 5432 -d postgres -c 'SELECT version();'
version
--------------------------------------------------------------------------------
PostgreSQL 15.10 (PolarDB 15.10.2.0 build d4f5477d debug) on aarch64-linux-gnu
(1 row)
17、检查PolarDB基于共享存储的复制是否正常
pb1 检查到replica复制槽正常连接
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 19083
usesysid | 10
usename | postgres
application_name | replica1
client_addr | 172.17.0.3
client_hostname |
client_port | 44606
backend_start | 2025-01-15 08:21:45.745786+00
backend_xmin |
state | streaming
sent_lsn | 0/4099F2B8
write_lsn | 0/4099F2B8
flush_lsn | 0/4099F2B8
replay_lsn | 0/4099F2B8
write_lag | 00:00:00.000277
flush_lag | 00:00:00.000277
replay_lag | 00:00:00.000332
sync_priority | 0
sync_state | async
reply_time | 2025-01-15 08:22:05.316927+00
在pb1 primary 节点建表, 写入测试数据库
~/primary$ psql
psql (PostgreSQL 15.10 (PolarDB 15.10.2.0 build d4f5477d debug) on aarch64-linux-gnu)
Type "help" for help.
postgres=# create table tbl (id int primary key, info text, ts timestamp);
CREATE TABLE
postgres=# insert into tbl select generate_series(1,10), md5(random()::text), clock_timestamp();
INSERT 0 10
在pb2 replica 节点, 查询到数据正常, 确认PolarDB基于共享存储的复制正常
~/replica1$ psql
psql (PostgreSQL 15.10 (PolarDB 15.10.2.0 build d4f5477d debug) on aarch64-linux-gnu)
Type "help" for help.
postgres=# select * from tbl;
id | info | ts
----+----------------------------------+----------------------------
1 | 8ddf7a3ddf9d9a348637dba4bc2d9308 | 2024-12-17 14:09:44.805661
2 | 374171ae8e839d595112570bbf6e6a5d | 2024-12-17 14:09:44.808097
3 | 36c83070ecef903804f843d8b6f542a5 | 2024-12-17 14:09:44.808106
4 | eeb9fb43ed70b98bc1e3cac7a8591268 | 2024-12-17 14:09:44.80811
5 | 7d24eb72eee5dc5abd73337f55b3bf91 | 2024-12-17 14:09:44.808114
6 | 4c2910dc1939dc57a7cc91334a3546ce | 2024-12-17 14:09:44.808118
7 | e59739763a6137b05f9b85c6f4daf83d | 2024-12-17 14:09:44.808121
8 | 36183814d28784a1dd8e145daada9e75 | 2024-12-17 14:09:44.808124
9 | 1757ba67ab4c49af449e56ee0f70485c | 2024-12-17 14:09:44.808127
10 | 4b2a4e2849c9ace23c21258c6e95842b | 2024-12-17 14:09:44.808131
(10 rows)
补充问题
节点启动后, 一直存在如下警告, 不知道是何原因?
告警来自实例本地数据目录日志文件中 $PGDATA/pg_log/xxx_error.log
...
207 2024-12-24 14:48:13.410 CST WARNING: Failed to get the instance memory usage
207 2024-12-24 14:48:13.910 CST WARNING: Failed to get the instance memory usage
..
207 2024-12-24 14:48:20.415 CST WARNING: Failed to get the instance memory usage
207 2024-12-24 14:48:20.915 CST WARNING: Failed to get the instance memory usage
报错代码来自PolarDB external/polar_resource_manager/polar_resource_manager.c
/*
* check ins memory
*/
void
polar_check_mem_exceed(void)
{
Size pfsd_rss = 0;
Size ins_rss_limit = 0;
Size ins_mem_limit = 0;
Size ins_mem_usage = 0;
Size ins_rss = 0;
Size ins_mapped_file = 0;
/* Get instance memory limit and memory usage */
if (polar_get_ins_memorystat(&ins_rss, &ins_mapped_file, &ins_rss_limit) != 0)
{
elog(WARNING, "Failed to get the instance memory usage");
return;
}
/* Get the pfsdaemon process rss */
if (enable_account_otherproc && polar_get_procrss_by_name("(pfsdaemon)", &pfsd_pid, &pfsd_rss) != 0)
{
pfsd_pid = InvalidPid;
elog(DEBUG1, "Failed to get the pfsdaemon rss");
}
/* Calculate memory limit, memory request and memory usage */
ins_mem_limit = Min(ins_rss_limit / 100 * total_mem_limit_rate, ins_rss_limit - total_mem_limit_remain_size * 1024);
/* mapped_file is generated by DSM */
ins_mem_usage = ins_rss + ins_mapped_file + pfsd_rss;
/*
* total mem usage reach mem limit evict resource manager to release
* exceed_rss memory
*/
/* priority to release resource manager which exceed limit */
/* After setting the random policy, other release methods will be shielded */
if (mem_release_policy == TERMINATE_ANY_RANDOM && ins_mem_usage > ins_mem_limit)
{
if (enable_log)
ereport(LOG, (errmsg("[polar_resource_manager] For Random Policy: Instance memory usage database memory %lu bytes, "
"database dynamic shared memory %lu bytes, pfsd memory %lu bytes",
ins_rss, ins_mapped_file, pfsd_rss)));
/* The idle process will be released first */
polar_throttle_mem_random(ins_mem_usage, ins_mem_limit, RM_TBLOCK_DEFAULT, idle_terminate_num);
/*
* Since the memory size of the process is not obtained under the
* random policy, it is necessary to obtain the instance memory usage
* again to determine whether to release the active sessions.
*/
if (polar_get_ins_memorystat(&ins_rss, &ins_mapped_file, &ins_rss_limit) != 0)
{
elog(WARNING, "Failed to get the instance memory usage");
return;
}
if (enable_account_otherproc && polar_get_procrss_by_name("(pfsdaemon)", &pfsd_pid, &pfsd_rss) != 0)
{
pfsd_pid = InvalidPid;
elog(DEBUG1, "Failed to get the pfsdaemon rss");
}
ins_mem_usage = ins_rss + ins_mapped_file + pfsd_rss;
/* If the memory still exceeds the limit, release the active session */
if (ins_mem_usage > ins_mem_limit)
polar_throttle_mem_random(ins_mem_usage, ins_mem_limit, RM_TBLOCK_INPROGRESS, active_terminate_num);
}
else if (ins_mem_usage > ins_mem_limit)
{
/*
* When the memory is larger than the memory limit, it will perform
* the forced release memory mode.
*/
if (enable_log)
ereport(LOG, (errmsg("[polar_resource_manager] For Limit: Instance memory usage database memory %lu bytes, "
"database dynamic shared memory %lu bytes, pfsd memory %lu bytes",
ins_rss, ins_mapped_file, pfsd_rss)));
polar_throttle_mem(ins_mem_usage, ins_mem_limit, true);
}
}
关于这个warning, 研发的回复来了
通过polar_resource_manager.enable_resource_manager 参数可以设置该功能为off.
该功能为监控内存占用,如果过高会 terminate backend, 防止 OS 的 kill -9
监控数据来自Linux cgroup: /sys/fs/cgroup/memory/memory.stat
但是在macOS 的docker容器内容, 该目录为: /sys/fs/cgroup/memory.stat
所以一直报无法获取数据的warning.
至于为什么macOS内的docker 容器cgroup目录和Linux中的目录不一致, 暂时不得而知.
猜测和macOS的docker是模拟出来的原因, 路径未模拟正确.
小结
A国产数据库PolarDB RAC架构 on H国产操作系统openEuler, 目前看部署是非常丝滑的, 这是为什么呢?
深度使用的话就需要更多实践和时间的考验了.
更多PolarDB RAC玩法可参考: 《2025-穷鬼玩PolarDB RAC一写多读集群 系列文章》
参考
《PolarDB 100 问 | 如何构建PolarDB Docker镜像 OR 本地编译PolarDB?》
《穷鬼玩PolarDB RAC一写多读集群系列 | 在Docker容器中用loop设备模拟共享存储搭建PolarDB RAC》
https://gitee.com/openeuler/openeuler-docker-images
https://github.com/digoal/polardb-pg-docker-images
《PolarDB PG 15 编译安装 & pg_duckdb 插件 + OSS 试用》
https://apsaradb.github.io/PolarDB-for-PostgreSQL/zh/deploying/fs-pfs.html
https://github.com/ApsaraDB/PolarDB-FileSystem/blob/master/Readme-CN.md
https://github.com/ApsaraDB/PolarDB-FileSystem/blob/master/docs/PFS_Tools-CN.md
https://www.jamescoyle.net/how-to/2096-use-a-file-as-a-linux-block-device
《在 macOS 中用docker --device挂载块设备报错》
期望 PostgreSQL|开源PolarDB 增加什么功能?
PolarDB 开源数据库
PolarDB 学习图谱
PostgreSQL 解决方案集合
德哥 / digoal’s Github - 公益是一辈子的事.
About 德哥





