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

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
打赏
0
0
0
0
20691
分享
相关文章
登顶TPC-C|云原生数据库PolarDB技术揭秘:单机性能优化篇
阿里云PolarDB云原生数据库在TPC-C基准测试中,以20.55亿tpmC的成绩打破性能与性价比世界纪录。此外,国产轻量版PolarDB已上线,提供更具性价比的选择。
登顶TPC-C|云原生数据库PolarDB技术揭秘:单机性能优化篇
日前,阿里云PolarDB云原生数据库以超越原记录2.5倍的性能一举登顶TPC-C基准测试排行榜,以每分钟20.55亿笔交易(tpmC)和单位成本0.8元人民币(price/tpmC)的成绩刷新TPC-C性能和性价比双榜的世界纪录。 每一个看似简单的数字背后,都蕴含着无数技术人对数据库性能、性价比和稳定性的极致追求,PolarDB的创新步伐从未止步。「阿里云瑶池数据库」公众号特此推出「PolarDB登顶TPC-C技术揭秘」系列硬核文章,为你讲述“双榜第一”背后的故事,敬请关注!
登顶TPC-C|云原生数据库PolarDB技术揭秘:单机性能优化篇
喜报|PolarDB开源社区荣获“2024数据库国内活跃开源项目”奖
喜报|PolarDB开源社区荣获“2024数据库国内活跃开源项目”奖
首届全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)圆满收官
首届全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)圆满收官
PolarDB开源数据库进阶课17 集成数据湖功能
本文介绍了如何在PolarDB数据库中接入pg_duckdb、pg_mooncake插件以支持数据湖功能, 可以读写对象存储的远程数据, 支持csv, parquet等格式, 支持delta等框架, 并显著提升OLAP性能。
67 1
PolarDB开源数据库进阶课11 激活容灾(Standby)节点
本文介绍了如何激活PolarDB容灾(Standby)节点,实验环境依赖于Docker容器中用loop设备模拟共享存储。通过`pg_ctl promote`命令可以将Standby节点提升为主节点,使其能够接收读写请求。激活后,原Standby节点不能再成为PolarDB集群的Standby节点。建议删除对应的复制槽位以避免WAL文件堆积。相关操作和配置请参考系列文章及视频教程。
44 1
PolarDB开源数据库进阶课5 在线备份
本文介绍了如何在PolarDB RAC一写多读集群中进行在线备份,特别针对共享存储模式。通过使用`polar_basebackup`工具,可以将实例的本地数据和共享数据备份到本地盘中。实验环境依赖于Docker容器中用loop设备模拟的共享存储。
43 1
PolarDB开源数据库进阶课15 集成DeepSeek等大模型
本文介绍了如何在PolarDB数据库中接入私有化大模型服务,以实现多种应用场景。实验环境依赖于Docker容器中的loop设备模拟共享存储,具体搭建方法可参考相关系列文章。文中详细描述了部署ollama服务、编译并安装http和openai插件的过程,并通过示例展示了如何使用这些插件调用大模型API进行文本分析和情感分类等任务。此外,还探讨了如何设计表结构及触发器函数自动处理客户反馈数据,以及生成满足需求的SQL查询语句。最后对比了不同模型的回答效果,展示了deepseek-r1模型的优势。
110 0

相关产品

  • 云原生数据库 PolarDB
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等