分布式 PostgreSQL 集群(Citus)官方安装指南

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 分布式 PostgreSQL 集群(Citus)官方安装指南

单节点 Citus



Docker (Mac 与 Linux)


Docker 镜像仅用于开发/测试目的, 并且尚未准备好用于生产用途。


您可以使用一个命令在 Docker 中启动 Citus


# start the image
docker run -d --name citus -p 5432:5432 -e POSTGRES_PASSWORD=mypass \
           citusdata/citus:10.2
# verify it's running, and that Citus is installed:
psql -U postgres -h localhost -d postgres -c "SELECT * FROM citus_version();"


您应该会看到最新版本的 Citus

集群启动并运行后,您可以访问我们关于多租户应用程序或实时分析的教程,在几分钟内开始使用 Citus



如果您的机器上已经运行了 PostgreSQL,则在启动 Docker 容器时可能会遇到此错误:


Error starting userland proxy:
Bind for 0.0.0.0:5432: unexpected error address already in use


这是因为 Citus 镜像尝试绑定到标准 PostgreSQL 端口 5432。要解决此问题,请使用 -p 选项选择不同的端口。您还需要在下面的 psql 命令中使用新端口。


Ubuntu 或 Debian


本节介绍在您自己的 Linux 机器上使用 deb 包设置单节点 Citus 集群所需的步骤。

  1. 安装 PostgreSQL 14Citus 扩展


# Add Citus repository for package manager
curl https://install.citusdata.com/community/deb.sh | sudo bash
# install the server and initialize db
sudo apt-get -y install postgresql-14-citus-10.2


2.初始化集群

让我们在磁盘上创建一个新数据库。为了方便使用 PostgreSQL Unix domain socket 连接,我们将使用 postgres 用户。


# this user has access to sockets in /var/run/postgresql
sudo su - postgres
# include path to postgres binaries
export PATH=$PATH:/usr/lib/postgresql/14/bin
cd ~
mkdir citus
initdb -D citus


Citus 是一个 Postgres 扩展。要告诉 Postgres 使用这个扩展,你需要将它添加到一个名为 shared_preload_libraries 的配置变量中:


echo "shared_preload_libraries = 'citus'" >> citus/postgresql.conf


3.启动数据库服务器

最后,我们将为新目录启动一个 PostgreSQL 实例:


pg_ctl -D citus -o "-p 9700" -l citus_logfile start


上面您将 Citus 添加到 shared_preload_libraries。这让它可以连接到 Postgres 的一些深层部分,交换查询计划器(query planner)执行器(executor)。在这里,我们加载 Citus 面向用户的一面(例如您将很快调用的函数):


psql -p 9700 -c "CREATE EXTENSION citus;"


  1. 验证安装是否成功


要验证安装是否成功,并且 Citus 已安装:


psql -p 9700 -c "select citus_version();"


您应该看到 Citus 扩展的详细信息。


Fedora, CentOS, 或 Red Hat


本节介绍在您自己的 Linux 机器上使用 RPM 包设置单节点 Citus 集群所需的步骤。

  1. 安装 PostgreSQL 14Citus 扩展


# Add Citus repository for package manager
curl https://install.citusdata.com/community/rpm.sh | sudo bash
# install Citus extension
sudo yum install -y citus102_14


2.初始化集群

让我们在磁盘上创建一个新数据库。为了方便使用 PostgreSQL Unix domain socket 连接,我们将使用 postgres 用户。


# this user has access to sockets in /var/run/postgresql
sudo su - postgres
# include path to postgres binaries
export PATH=$PATH:/usr/pgsql-14/bin
cd ~
mkdir citus
initdb -D citus


Citus 是一个 Postgres 扩展。要告诉 Postgres 使用这个扩展,你需要将它添加到一个名为 shared_preload_libraries 的配置变量中:


echo "shared_preload_libraries = 'citus'" >> citus/postgresql.conf


3.启动数据库服务器

最后,我们将为新目录启动一个 PostgreSQL 实例:


pg_ctl -D citus -o "-p 9700" -l citus_logfile start


上面您将 Citus 添加到 shared_preload_libraries。这让它可以连接到 Postgres 的一些深层部分,交换查询计划器(query planner)执行器(executor)。在这里,我们加载 Citus 面向用户的一面(例如您将很快调用的函数):


psql -p 9700 -c "CREATE EXTENSION citus;"


  1. 验证安装是否成功

要验证安装是否成功,并且 Citus 已安装:


psql -p 9700 -c "select citus_version();"


您应该看到 Citus 扩展的详细信息。

在此步骤中,您已完成安装过程并准备好使用 Citus 集群。为了帮助您入门,我们提供了一个教程,其中包含有关在几分钟内使用示例数据设置 Citus 集群的说明。


多节点 Citus



Ubuntu 或 Debian


本节介绍使用 deb 包在您自己的 Linux 机器上设置多节点 Citus 集群所需的步骤。


在所有节点上执行的步骤


  1. 添加仓库


# Add Citus repository for package manager
curl https://install.citusdata.com/community/deb.sh | sudo bash


  1. 安装 PostgreSQL + Citus 并初始化数据库


# install the server and initialize db
sudo apt-get -y install postgresql-14-citus-10.2
# preload citus extension
sudo pg_conftool 14 main set shared_preload_libraries citus


这会在 /etc/postgresql/14/main 中安装集中配置,并在 /var/lib/postgresql/14/main 中创建数据库。


  1. 配置连接和认证

在启动数据库之前,让我们更改其访问权限。默认情况下,数据库服务器仅侦听 localhost 上的客户端。作为此步骤的一部分,我们指示它侦听所有 IP 接口,然后配置客户端身份验证文件以允许来自本地网络的所有传入连接。


sudo pg_conftool 14 main set listen_addresses '*'


sudo vi /etc/postgresql/14/main/pg_hba.conf


# Allow unrestricted access to nodes in the local network. The following ranges
# correspond to 24, 20, and 16-bit blocks in Private IPv4 address spaces.
host    all             all             10.0.0.0/8              trust
# Also allow the host unrestricted access to connect to itself
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust


您的 DNS 设置可能不同。此外,这些设置对于某些环境来说过于宽松,请参阅我们关于提高工作人员安全性的说明。PostgreSQL 手册解释了如何使它们更具限制性。


启动数据库服务器,创建 Citus 扩展

# start the db server
sudo service postgresql restart
# and make it start automatically when computer does
sudo update-rc.d postgresql enable


您必须将 Citus 扩展添加到要在集群中使用的每个数据库。以下示例将扩展名添加到名为 postgres 的默认数据库中。


# add the citus extension
sudo -i -u postgres psql -c "CREATE EXTENSION citus;"


在 coordinator 节点上执行的步骤


下面列出的步骤必须仅在执行了前面提到的步骤之后在 coordinator 节点上执行。

  1. 添加 worker 节点信息

我们需要通知 coordinator 有关其 worker 的信息。为了添加这些信息,我们调用一个 UDF,它将节点信息添加到 pg_dist_node 目录表中。对于我们的示例,我们假设有两个 worker(名为 worker-101worker-102)。将 workerDNS 名称(或 IP 地址)和服务器端口添加到表中。


sudo -i -u postgres psql -c "SELECT * from citus_add_node('worker-101', 5432);"
sudo -i -u postgres psql -c "SELECT * from citus_add_node('worker-102', 5432);"


  1. 验证安装是否成功

为了验证安装是否成功,我们检查 coordinator 节点是否选择了所需的工作配置。这个命令在 psql shell 中运行时应该输出我们添加到上面 pg_dist_node 表中的 worker 节点。


sudo -i -u postgres psql -c "SELECT * FROM citus_get_active_worker_nodes();"


准备使用 Citus

在此步骤中,您已完成安装过程并准备好使用 Citus 集群。可以通过 postgres 用户在 psql 中访问新的 Citus 数据库:


sudo -i -u postgres psql


Fedora、CentOS 或 Red Hat



本节介绍在您自己的 Linux 机器上使用 RPM 包设置多节点 Citus 集群所需的步骤。


在所有节点上执行的步骤


  1. 添加仓库


# Add Citus repository for package manager
curl https://install.citusdata.com/community/rpm.sh | sudo bash


  1. 安装 PostgreSQL + Citus 并初始化数据库


# install PostgreSQL with Citus extension
sudo yum install -y citus102_14
# initialize system database (using RHEL 6 vs 7 method as necessary)
sudo service postgresql-14 initdb || sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
# preload citus extension
echo "shared_preload_libraries = 'citus'" | sudo tee -a /var/lib/pgsql/14/data/postgresql.conf


PostgreSQL/usr/pgsql-14/bin 中添加了特定于版本的二进制文件,但您通常只需要 psql,它的最新版本已添加到您的路径中,并且可以使用 service 命令来管理服务器本身。


  1. 配置连接和认证

在启动数据库之前,让我们更改其访问权限。默认情况下,数据库服务器仅侦听 localhost 上的客户端。作为此步骤的一部分,我们指示它侦听所有 IP 接口,然后配置客户端身份验证文件以允许来自本地网络的所有传入连接。


sudo vi /var/lib/pgsql/14/data/postgresql.conf


# Uncomment listen_addresses for the changes to take effect
listen_addresses = '*'


sudo vi /var/lib/pgsql/14/data/pg_hba.conf


# Allow unrestricted access to nodes in the local network. The following ranges
# correspond to 24, 20, and 16-bit blocks in Private IPv4 address spaces.
host    all             all             10.0.0.0/8              trust
# Also allow the host unrestricted access to connect to itself
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust


您的 DNS 设置可能不同。此外,这些设置对于某些环境来说过于宽松,请参阅我们关于提高 Worker 安全性的说明。PostgreSQL 手册解释了如何使它们更具限制性。



  1. 启动数据库服务器,创建 Citus 扩展


# start the db server
sudo service postgresql-14 restart
# and make it start automatically when computer does
sudo chkconfig postgresql-14 on


您必须将 Citus 扩展添加到要在集群中使用的每个数据库。以下示例将扩展名添加到名为 postgres 的默认数据库中。


sudo -i -u postgres psql -c "CREATE EXTENSION citus;"


在 coordinator 节点上执行的步骤


下面列出的步骤必须仅在执行了前面提到的步骤之后在 coordinator 节点上执行。


  1. 添加 worker 节点信息

我们需要通知 coordinator 有关其 worker 的信息。为了添加这些信息,我们调用一个 UDF,它将节点信息添加到 pg_dist_node 目录表中。对于我们的示例,我们假设有两个 worker(名为 worker-101worker-102)。将 workerDNS 名称(或 IP 地址)和服务器端口添加到表中。


sudo -i -u postgres psql -c "SELECT * from citus_add_node('worker-101', 5432);"
sudo -i -u postgres psql -c "SELECT * from citus_add_node('worker-102', 5432);"


  1. 验证安装是否成功

为了验证安装是否成功,我们检查 coordinator 节点是否选择了所需的工作配置。这个命令在 psql shell 中运行时应该输出我们添加到上面 pg_dist_node 表中的 worker 节点。


sudo -i -u postgres psql -c "SELECT * FROM citus_get_active_worker_nodes();"


准备使用 Citus

在此步骤中,您已完成安装过程并准备好使用 Citus 集群。可以通过 postgres 用户在 psql 中访问新的 Citus 数据库:


sudo -i -u postgres psql
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
11天前
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
42 5
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
49 3
|
1月前
|
消息中间件 分布式计算 关系型数据库
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
45 0
|
11天前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
44 15
|
17天前
|
数据库
|
1月前
|
SQL 关系型数据库 分布式数据库
Citus 简介,将 Postgres 转换为分布式数据库
【10月更文挑战第4天】Citus 简介,将 Postgres 转换为分布式数据库
83 4
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
85 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
37 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
46 0
|
1月前
|
SQL 关系型数据库 MySQL
mysql集群方案
mysql集群方案
41 0