单节点 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 手册解释了如何使它们更具限制性。

  1. 启动数据库服务器,创建 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

更多

分布式 PostgreSQL 集群(Citus)官方安装指南的更多相关文章

  1. 分布式 PostgreSQL 集群(Citus)官方教程 - 迁移现有应用程序

    将现有应用程序迁移到 Citus 有时需要调整 schema 和查询以获得最佳性能. Citus 扩展了 PostgreSQL 的分布式功能,但它不是扩展所有工作负载的直接替代品.高性能 Citus ...

  2. 分布式 PostgreSQL 集群(Citus)官方示例 - 实时仪表盘

    Citus 提供对大型数据集的实时查询.我们在 Citus 常见的一项工作负载涉及为事件数据的实时仪表板提供支持. 例如,您可以是帮助其他企业监控其 HTTP 流量的云服务提供商.每次您的一个客户端收 ...

  3. 分布式 PostgreSQL 集群(Citus)官方示例 - 时间序列数据

    在时间序列工作负载中,应用程序(例如一些实时应用程序查询最近的信息,同时归档旧信息. https://docs.citusdata.com/en/v10.2/sharding/data_modelin ...

  4. 分布式 PostgreSQL 集群(Citus)官方示例 - 多租户应用程序实战

    如果您正在构建软件即服务 (SaaS) 应用程序,您可能已经在数据模型中内置了租赁的概念. 通常,大多数信息与租户/客户/帐户相关,并且数据库表捕获这种自然关系. 对于 SaaS 应用程序,每个租户的 ...

  5. 分布式 PostgreSQL 集群(Citus),官方快速入门教程

    多租户应用程序 在本教程中,我们将使用示例广告分析数据集来演示如何使用 Citus 来支持您的多租户应用程序. 注意 本教程假设您已经安装并运行了 Citus. 如果您没有运行 Citus,则可以使用 ...

  6. 分布式 PostgreSQL 集群(Citus),分布式表中的分布列选择最佳实践

    确定应用程序类型 在 Citus 集群上运行高效查询要求数据在机器之间正确分布.这因应用程序类型及其查询模式而异. 大致上有两种应用程序在 Citus 上运行良好.数据建模的第一步是确定哪些应用程序类 ...

  7. 在 Kubernetes 上快速测试 Citus 分布式 PostgreSQL 集群(分布式表,共置,引用表,列存储)

    准备工作 这里假设,你已经在 k8s 上部署好了基于 Citus 扩展的分布式 PostgreSQL 集群. 查看 Citus 集群(kubectl get po -n citus),1 个 Coor ...

  8. Citus 分布式 PostgreSQL 集群 - SQL Reference(查询分布式表 SQL)

    如前几节所述,Citus 是一个扩展,它扩展了最新的 PostgreSQL 以进行分布式执行.这意味着您可以在 Citus 协调器上使用标准 PostgreSQL SELECT 查询进行查询. Cit ...

  9. Citus 分布式 PostgreSQL 集群 - SQL Reference(创建和修改分布式表 DDL)

    创建和分布表 要创建分布式表,您需要首先定义表 schema. 为此,您可以使用 CREATE TABLE 语句定义一个表,就像使用常规 PostgreSQL 表一样. CREATE TABLE ht ...

随机推荐

  1. iOS App 架构文章推荐

    iOS应用开发架构 iOS应用架构谈系列 阿里技术沙龙 2.2.1. Hybrid App 2.2.2. taobao 客户端架构 2.2.3. alipay 客户端架构   iOS APP 架构漫谈 ...

  2. jsp中<%@ taglib prefix="s" uri="/struts-tags"%>标签意思

    @taglib表明引用标签.类似java中的import语句prefix="s" 引用的名称在页面可以使用,就像java中生成的一个对象名,以后调用的时候直接使用<s:xxx ...

  3. 手写一个线程池,带你学习ThreadPoolExecutor线程池实现原理

    摘要:从手写线程池开始,逐步的分析这些代码在Java的线程池中是如何实现的. 本文分享自华为云社区<手写线程池,对照学习ThreadPoolExecutor线程池实现原理!>,作者:小傅哥 ...

  4. 在MacOS安装puppeteer

    安装node:升级:npm i npm 安装yarn:需要注意先把yarn的流程跑完,特别是package.json 安装puppeteer:yarn add puppeteer 安装完成以后需要重启 ...

  5. 如何综合运用对称加密技术、非对称加密技术(公钥密码体制)和Hash函数 保证信息的保密性、完整性、可用性和不可否认性?

    一.几个问题 在提出问题之前,先创建一个使用场景,发送方(甲方)要给接收方(乙方)发送投标书.大家知道,投标书都包括发送方的标的,这个标的是不能被竞标者知晓,更不能被竞标者修改的.在传输的投标书时,提 ...

  6. 帆软报表(finereport)雷达图钻取详细点新页面展示

    添加参数栏,季度下拉框的空间名为combobox0 添加雷达图,通过第三页面做跳转 雷达图钻取.cpt为联动钻取的第三页面 添加纬度(所点击钻取的点) 参数   wd 添加季度参数 jd    值为季 ...

  7. 4、前端--浮动、定位、是否脱离文档流、溢出属性、z-index、透明度、JavaScript简介

    浮动 # ps:html代码时没有缩进一说的 全部写在一行也可以 """浮动主要就是用于页面布局的!!!""" # 浮动带来的负面影响 &q ...

  8. 1、前端--HTML简介、head内常见标签、body内常见标签(特殊符号、div、span、a、img、列表、表格table、表单form)、标签两大属性

    今日内容 HTML简介 HTML是构造网页的骨架>>>:几乎所有的网站都是由HTML构建而成 HTML:超文本标记语言 # 不是一门编程语言 没有任何的逻辑 只有固定的标记功能 &q ...

  9. Solution -「LOCAL」二进制的世界

    \(\mathcal{Description}\)   OurOJ.   给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...

  10. 「微前端实践」使用Vue+qiankun微前端方案重构老项目的本地验证

    10月份换了新的工作,参与完一个月的需求迭代后,接到了项目重构的任务.简单来说,需要在短时间内提出方案设想,同时进行本地验证,最终需要拿出一套技术替换方案来.于是,埋头苦干了一个月,总算干了点成绩出来 ...