PolarDB开源数据库进阶课14 纯享单机版

简介: PolarDB不仅支持基于“共享存储+多计算节点”的集群版,还提供类似开源PostgreSQL的单机版。单机版部署简单,适合大多数应用场景,并可直接使用PostgreSQL生态插件。通过Docker容器、Git克隆代码、编译软件等步骤,即可完成PolarDB单机版的安装与配置。具体操作包括启动容器、进入容器、克隆代码、编译软件、初始化实例、配置参数及启动数据库。此外,还有多个相关教程和视频链接供参考,帮助用户更好地理解和使用PolarDB单机版。

背景

穷鬼玩PolarDB RAC一写多读集群系列已经写了几篇:

是不是觉得PolarDB只有基于“共享存储+多计算节点”的集群版? 错了, PolarDB还支持单机版, 就和开源PostgreSQL类似, 加上PolarDB的其他高级功能.

其实大多数时候可能单机版就够用了. 使用单机版时PostgreSQL生态的插件、管控等都可以直接拿来使用, 例如patroni HA软件.

PS: 需要注意, 如果使用纯粹的单机版, 将来要转换为共享存储实例就比较麻烦, 所以不是不得已还是建议使用PFS模拟本地文件系统的伪“单机版”.

PolarDB 单机版怎么部署?

b站视频链接

Youtube视频链接

如何部署PolarDB 单机版? 非常简单, 安装软件的时候, 参数不太一样, 不需要with pfs. 初始化数据库实例时, 不需要把共享数据从primary节点中剥离开来, 参数配置也略有不同.

1、启动容器

mkdir ~/pb_local    
cd ~/pb_local    
    
docker run -d -it -v ${PWD}:/data -P --shm-size=1g --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name pb_local1 registry.cn-hangzhou.aliyuncs.com/polardb_pg/polardb_pg_devel:ubuntu22.04 bash

2、进入容器

docker exec -ti pb_local1 bash

3、克隆PolarDB 15代码

cd /data/  
git clone --depth 1 -b POLARDB_15_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL

4、编译PolarDB软件, 注意编译参数, 不用with pfsd.

cd /data/PolarDB-for-PostgreSQL    
./build.sh --prefix=/data/polardb --jobs=4 --debug=on --port=5432 --ni

5、将编译好的PolarDB软件拷贝到目标位置

cp -r /data/polardb/tmp_polardb_pg_15_base ~/
# 或者使用软链
ln -s /data/polardb/tmp_polardb_pg_15_base ~/

6、初始化PolarDB单机版实例

primary_dir=/data/polardb/primary_dir  
# data_dir=/data/polardb/shared_dir  # 这个目录不需要, 集群版才需要把共享数据剥离出来.    
port=5432  
# 配置环境变量 
echo "  
export PGHOME=~/tmp_polardb_pg_15_base  
export PGDATA=$primary_dir  
export PGPORT=$port  
" >> ~/.bashrc  
# 应用环境变量
. ~/.bashrc  
  
# 初始化PolarDB实例  
initdb -D $primary_dir -E UTF8 -k --lc-collate=C --lc-ctype=en_US.utf-8 -U postgres

7、配置PolarDB 单机版数据库实例参数

配置 postgresql.conf

echo "  
port = $port   
  
# from \$PGHOME/share/postgresql/polardb.conf.sample    
#------------------------------------------------------------------------------  
# Common Parameters for PostgreSQL  
#------------------------------------------------------------------------------  
full_page_writes = on  
listen_addresses = '0.0.0.0'  
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'  
shared_preload_libraries ='\$libdir/polar_io_stat,\$libdir/polar_monitor_preload,\$libdir/polar_worker'
  
#------------------------------------------------------------------------------  
# Common Parameters for PolarDB  
#------------------------------------------------------------------------------  
polar_disk_name = 'home'  
polar_enable_shared_storage_mode = off  # 如果是集群版, 要设置为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 = off  # 研发同学回复: 单机版应该开 full_page_writes 就够了。polar_has_partial_write 应该是遇到半写页的时候去 retry,应该主要是给 RO 用的。
# 如果你的文件系统是带cow功能的, 就不需要开启full page write. 例如zfs.  
  
# if use local_fs 模拟共享存储 , uncomment it    
# polar_datadir = 'file-dio://\$data_dir'    
  
# if cgroup 报错, 参考:  ../202412/20241216_03.md     
# WARNING:  Failed to get the instance memory usage    
polar_resource_manager.enable_resource_manager = off      
" >> $primary_dir/postgresql.conf

配置 pg_hba.conf

echo "host all all 0.0.0.0/0 md5" >> $primary_dir/pg_hba.conf

如果是集群版, 我们就需要把共享存储从计算节点剥离出来, 详见polar-initdb.sh脚本内容.

# if use local_fs 模拟共享存储, 使用本地文件系统模拟共享存储, 则使用如下方法:   
# mkdir -p $data_dir   
# $base_dir/bin/polar-initdb.sh $primary_dir/ $data_dir/ primary localfs

启动PolarDB单机版

pg_ctl start

查看PolarDB单机版

$ psql  
psql (PostgreSQL 15.10 (PolarDB 15.10.3.0 build bbc102d8 debug) on aarch64-linux-gnu)  
Type "help" for help.  
  
postgres=# \l  
                                                 List of databases  
     Name      |  Owner   | Encoding | Collate |    Ctype    | ICU Locale | Locale Provider |   Access privileges     
---------------+----------+----------+---------+-------------+------------+-----------------+-----------------------  
 polardb_admin | postgres | UTF8     | C       | en_US.utf-8 |            | libc            | =T/postgres          +  
               |          |          |         |             |            |                 | postgres=CTc/postgres  
 postgres      | postgres | UTF8     | C       | en_US.utf-8 |            | libc            |   
 template0     | postgres | UTF8     | C       | en_US.utf-8 |            | libc            | =c/postgres          +  
               |          |          |         |             |            |                 | postgres=CTc/postgres  
 template1     | postgres | UTF8     | C       | en_US.utf-8 |            | libc            | =c/postgres          +  
               |          |          |         |             |            |                 | postgres=CTc/postgres  
(4 rows)  
postgres=# select version();  
                                    version                                       
--------------------------------------------------------------------------------  
 PostgreSQL 15.10 (PolarDB 15.10.3.0 build bbc102d8 debug) on aarch64-linux-gnu  
(1 row)
postgres=# show polar_vfs.localfs_mode;
 polar_vfs.localfs_mode 
------------------------
 off
(1 row)
postgres=# show polar_datadir;
 polar_datadir 
---------------
 
(1 row)

创建表空间测试:

$ mkdir /data/polardb/tbs1
$ psql
psql (PostgreSQL 15.10 (PolarDB 15.10.3.0 build bbc102d8 debug) on aarch64-linux-gnu)
Type "help" for help.
postgres=# create tablespace tbs1 location '/data/polardb/tbs1';
CREATE TABLESPACE
postgres=# create table test (id int) tablespace tbs1;
CREATE TABLE
postgres=# insert into test select generate_series(1,100);
INSERT 0 100
postgres=# \dt
        List of relations
 Schema | Name | Type  |  Owner   
--------+------+-------+----------
 public | test | table | postgres
(1 row)
postgres=# \d test
                Table "public.test"
 Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+---------
 id     | integer |           |          | 
Tablespace: "tbs1"

参考

PolarDB-for-PostgreSQL/build.sh

/home/postgres/tmp_polardb_pg_15_base/bin/polar-initdb.sh

《穷鬼玩PolarDB RAC一写多读集群系列 | 在Docker容器中用loop设备模拟共享存储》

《穷鬼玩PolarDB RAC一写多读集群系列 | 如何搭建PolarDB容灾(Standby)节点》

《穷鬼玩PolarDB RAC一写多读集群系列 | 共享存储在线扩容》

《穷鬼玩PolarDB RAC一写多读集群系列 | 计算节点 Switchover》

《穷鬼玩PolarDB RAC一写多读集群系列 | 在线备份》

《穷鬼玩PolarDB RAC一写多读集群系列 | 在线归档》

《穷鬼玩PolarDB RAC一写多读集群系列 | 实时归档》

《穷鬼玩PolarDB RAC一写多读集群系列 | 时间点恢复(PITR)》

《穷鬼玩PolarDB RAC一写多读集群系列 | 读写分离》

《穷鬼玩PolarDB RAC一写多读集群系列 | 主机全毁, 只剩共享存储的PolarDB还有救吗?》

《穷鬼玩PolarDB RAC一写多读集群系列 | 激活容灾(Standby)节点》

《穷鬼玩PolarDB RAC一写多读集群系列 | 将“共享存储实例”转换为“本地存储实例”》

《穷鬼玩PolarDB RAC一写多读集群系列 | 将“本地存储实例”转换为“共享存储实例”》

《穷鬼玩PolarDB RAC一写多读集群系列 | 升级vector插件》

《穷鬼玩PolarDB RAC一写多读集群系列 | 使用图数据库插件AGE》

《穷鬼玩PolarDB RAC一写多读集群系列 | 接入私有化大模型服务》

《穷鬼玩PolarDB RAC一写多读集群系列 | 接入PostGIS插件全功能》

《穷鬼玩PolarDB RAC一写多读集群系列 | 接入pg_duckdb支持数据湖功能,且OLAP性能数量级提升》

《穷鬼玩PolarDB RAC一写多读集群系列 | pg_bulkload适配PFS加速批量导入》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2开源发布,重点完善生态能力:新增客户端驱动、开源polardbx-proxy组件,支持读写分离与高可用;强化DDL变更、扩缩容等运维能力,并兼容MySQL主备复制及MCP AI生态。
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
4月前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2发布,新增开源Proxy组件与客户端驱动,支持读写分离、无感高可用切换及DDL在线变更,兼容MySQL生态,提升千亿级大表运维稳定性。
991 24
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
7月前
|
存储 关系型数据库 分布式数据库
喜报|阿里云PolarDB数据库(分布式版)荣获国内首台(套)产品奖项
阿里云PolarDB数据库管理软件(分布式版)荣获「2024年度国内首版次软件」称号,并跻身《2024年度浙江省首台(套)推广应用典型案例》。
|
5月前
|
Cloud Native 关系型数据库 MySQL
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
PolarDB-X 是阿里云推出的云原生分布式数据库,支持PB级存储扩展、高并发访问与数据强一致,助力企业实现MySQL平滑迁移。现已开放免费体验,点击即享高效、稳定的数据库升级方案。
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
|
5月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
6月前
|
人工智能 关系型数据库 MySQL
开源PolarDB-X:单节点误删除binlog恢复
本文由邵亚鹏撰写,分享了在使用开源PolarDB-X过程中,因误删binlog导致数据库服务无法启动的问题及恢复过程。作者结合实践经验,详细介绍了在无备份情况下如何通过单节点恢复机制重启数据库,并提出了避免类似问题的几点建议,包括采用高可用部署、定期备份及升级至最新版本等。
|
7月前
|
关系型数据库 分布式数据库 数据库
阿里云PolarDB数据库蝉联SIGMOD最佳论文奖
阿里云PolarDB凭借全球首创基于CXL Switch的分布式内存池技术,在SIGMOD 2025上荣获工业赛道“最佳论文奖”,连续两年蝉联该顶会最高奖项。其创新架构PolarCXLMem打破传统RDMA技术瓶颈,性能提升2.1倍,并已落地应用于内存池化场景,推动大模型推理与多模态存储发展,展现CXL Switch在高速互联中的巨大潜力。
阿里云PolarDB数据库蝉联SIGMOD最佳论文奖
|
5月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
430 158
|
5月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
981 152

相关产品

  • 云原生数据库 PolarDB