citus
Citus基本上是Postgres,可以进行横向扩展。它是Postgres的扩展,可以在多台计算机的群集中分发数据和查询。作为扩展(而不是分支),Citus支持新的PostgreSQL版本,使用户可以从新功能中受益,同时保持与现有PostgreSQL工具的兼容性。
Citus使用分片和复制功能在多台计算机上水平扩展PostgreSQL。它的查询引擎使这些服务器之间的传入SQL查询并行化,以实现大型数据集上的实时(不到一秒钟)响应。
集群搭建
基于centos安装
服务器IP | 系统软件版本 | 电脑配置 |
---|---|---|
192.168.1.251 | Centos7 | i7-6700 + 8GB内存+ 1TB硬盘 |
192.168.1.252 | Centos7 | i7-7700 + 24GB内存+ 1TB硬盘 |
192.168.1.253 | Centos7 | i7-7700 + 16GB内存+ 1TB硬盘 |
在所有节点上执行的步骤
- 添加资料库
curl https://install.citusdata.com/community/rpm.sh | sudo bash
- 安装PostgreSQL + Citus并初始化数据库
# 安装具有Citus扩展名的PostgreSQL
sudo yum install -y citus94_12
# 初始化系统数据库(必要时使用RHEL 6 vs 7方法)
sudo service postgresql-12 initdb || sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
# 预载citus扩展
echo "shared_preload_libraries = 'citus'" | sudo tee -a /var/lib/pgsql/12/data/postgresql.conf
- 配置连接和身份验证
在启动数据库之前,让我们更改其访问权限。默认情况下,数据库服务器仅侦听localhost上的客户端。修改客户端身份验证文件配置为允许来自本地网络的所有传入连接。
sudo vi /var/lib/pgsql/12/data/postgresql.conf
# 取消注释listen_addresses,以使更改生效
listen_addresses = '*'
sudo vi /var/lib/pgsql/12/data/pg_hba.conf
# 允许局域网内访问
# host all all 192.168.1.0/24 trust
# 允许全部ip可以访问
host all all 0.0.0.0/0 trust
# 允许本机不受限制的访问
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
- 启动数据库服务器,创建Citus扩展
# 启动数据库服务器
sudo service postgresql-12 restart
# 并使其在计算机运行时自动启动
sudo chkconfig postgresql-12 on
在协调器(主)节点上要执行的步骤
- 添加工作节点信息
我们需要将其存储节点告知主节点。要添加此信息,我们调用UDF,它将节点信息添加到pg_dist_node目录表中,协调器使用该表来获取工作节点列表。
sudo -i -u postgres psql -c "SELECT * from master_add_node('192.168.1.252', 5432);"
sudo -i -u postgres psql -c "SELECT * from master_add_node('192.168.1.253', 5432);"
- 验证安装是否成功
为了验证安装是否成功,我们检查协调器节点是否已选择所需的工作程序配置。在psql shell中运行时,此命令应输出我们添加到上面pg_dist_node表中的工作程序节点。
sudo -i -u postgres psql -c "SELECT * FROM master_get_active_worker_nodes();"
安装postgis扩展
rpm -Uvh https://yum.postgresql.org/11/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install postgis30_12
注意事项
数据库创建
在主节点创建数据库后,在所有存储节点同样需要创建数据库。并且每个数据库都需要创建citus扩展。要配合Citus使用其它扩展,Citus必须是第一个启用的扩展,其次,必须在coordinator和worker节点都安装相应扩展。
创建分布式表
凡是未显式指出的SQL,均在协调节点上执行
- 新建测试表
create table test_table(id int, name varchar(16));
- 配置分片原则
SELECT master_create_distributed_table('test_table', 'id', 'hash');
- 根据分片数和副本数进行分片
-- 创建两个分片和两个副本
SELECT master_create_worker_shards('test_table', 2, 2);
- 创建完成后,可以在子节点查看到
使用postgis3.0查询mvt数据
扫描二维码关注公众号,回复:
13558542 查看本文章