timescaledb 多节点部署

前言

TimescaleDB是一个开源数据库,旨在使SQL可扩展到时间序列数据。它由PostgreSQL设计而成,并打包为PostgreSQL扩展,提供跨时间和空间的自动分区(分区键),以及完整的SQL支持。自从2.0版本发布之后,也可以支持多节点部署,以下内容摘自官方介绍:

所有节点开始时都是独立的TimescaleDB实例,即主机运行PostgreSQL服务器并加载TimescaleDB扩展。这是对说明书中的“接入节点”和“数据节点”的假设。关于架构的更多细节可以在架构部分找到。
TimescaleDB多节点可以作为自管理部署的一部分创建,也可以作为托管云部署(即将推出)创建。为了设置自管理集群,包括如何配置节点进行安全通信和跨服务器创建用户/角色,请在继续之前遵循以下说明。
在Timescale
Cloud和Forge的例子中,创建的服务已经包含加载了TimescaleDB的PostgreSQL,并且创建的用户tsdbadmin是超级用户。在这种情况下,您所需要做的就是决定哪个服务应该是访问节点,并按照下一节中的说明进行操作。随着TimescaleDB多节点在这些云平台上可用,将提供更多信息。

部署

此处选择操作系统版本为ubuntu20.04.1

在这里插入图片描述

postgresql部署

选择v12.x 版本,安装过程此处省略,官方部署直通车
在这里插入图片描述

timescaledb插件部署

  • 添加TimescaleDB第三方存储库
echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/timescaledb.list
  • 安装 TimescaleDB GPG key
wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo apt-key add -
  • 更新源
apt update
  • 安装插件
apt install timescaledb-2-postgresql-12 -y
  • 修改 postgresql.conf
    将#shared_preload_libraries =‘’ 改为 shared_preload_libraries =‘timescaledb’,一般两种方式修改
    1、timescaledb-tune
    此处不介绍
    2、手动修改
    默认路径在/etc/postgresql/12/main,不同系统有所区别
    在这里插入图片描述

  • 重启postgresql

systemctl restart postgresql
  • 测试
    新建 timescaledb1数据库,运行sql
CREATE EXTENSION IF NOT EXISTS timescaledb;

在这里插入图片描述

配置多节点

此处采用一个postgresql 多数据库测试,生产环境可采用多个postgresql

  • 新增节点
# "add_data_node"("node_name" name, "host" text, "database" name=NULL::name, "port" int4=NULL::integer, "if_not_exists" bool=false, "bootstrap" bool=true, "password" text=NULL::text)
SELECT add_data_node('data_node1', '192.168.195.128', 'timescaledb2', 5432, false, true, '123456');
SELECT add_data_node('data_node2', '192.168.195.128', 'timescaledb3', 5432, false, true, '123456');
参数描述
node_name要用于数据节点的本地名称
host远程数据节点的主机名
database远程数据节点的数据库名
port远程数据节点的端口
if_not_exists如果数据节点已经存在,请不要失败。默认为FALSE
bootstrap引导远程数据节点。默认为TRUE
password远程数据节点的密码
  • 配置节点映射
CREATE USER MAPPING FOR postgres SERVER data_node1 OPTIONS (user 'postgres', password '123qwe');

CREATE USER MAPPING FOR postgres SERVER data_node2 OPTIONS (user 'postgres', password '123qwe');

在这里插入图片描述

  • 创建测试表
CREATE TABLE conditions (
  time        TIMESTAMPTZ       NOT NULL,
  location    TEXT              NOT NULL,
  temperature DOUBLE PRECISION  NULL,
  humidity    DOUBLE PRECISION  NULL
);
  • 创建分布式超表
SELECT create_distributed_hypertable('conditions', 'time');

可能出现的错误
在这里插入图片描述
修改postgresql.conf #max_prepared_transactions = 0 为 max_prepared_transactions = 150 官方推荐150,可自行测试更改;保存并重启postgresql服务
在这里插入图片描述

  • 修改分片策略(可选)
    官方推荐不超过主内存的25%

The key property of choosing the time interval is that the chunk
(including indexes) belonging to the most recent interval (or chunks
if using space partitions) fit into memory. As such, we typically
recommend setting the interval so that these chunk(s) comprise no more
than 25% of main memory.

此处用于测试设置24小时

SELECT set_chunk_time_interval('conditions', interval '24 hours');
  • 测试
    插入数据
INSERT INTO "public"."conditions"("time", "location", "temperature", "humidity") VALUES ('2023-04-23 18:22:10-07', '当地', '32', '50');
INSERT INTO "public"."conditions"("time", "location", "temperature", "humidity") VALUES ('2023-04-24 18:22:10-07', '当地', '32', '50');
INSERT INTO "public"."conditions"("time", "location", "temperature", "humidity") VALUES ('2023-04-25 18:22:10-07', '当地', '32', '50');
INSERT INTO "public"."conditions"("time", "location", "temperature", "humidity") VALUES ('2023-04-26 18:22:10-07', '当地', '32', '50');
INSERT INTO "public"."conditions"("time", "location", "temperature", "humidity") VALUES ('2023-04-27 18:22:10-07', '当地', '32', '50');
INSERT INTO "public"."conditions"("time", "location", "temperature", "humidity") VALUES ('2023-04-28 18:22:10-07', '当地', '32', '50');

在这里插入图片描述

在这里插入图片描述

结论

如上配置则显示成功,可得出以下结果:
1、主数据库不存储数据,都是以外部表的形式存在
2、节点只存储部分分片数据

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值