Citus,PostgreSQL的最佳分布式改造!
jf wang Lv7

对于一直工作在关系型数据库,且功能强大的PostgreSQL的开发者来说。
Citus 无疑是给他们插上了一对火箭!让关系型数据库的用户,也能翱翔在大数据的时代。

Citus 正在被很多大数据机构使用,日均更新5~10亿记录,甚至有在70个节点上,运行数据规模达1.4PB!

Citus 适用于多租户、实时分析场景。(这也正是我迫切需要的!)

下边介绍Citus的上手经历。

试验架构

graph TB
  m[(citus0)]
  slave1[(citus1)]
  slave2[(citus2)]
  m---slave1
  m---slave2

准备主机

分布式,至少两台以上主机。

  • 协调节点,负责统筹。主机名:citus0
  • 工作节点,负责存储计算。主机名:citus1、citus2

编译安装

在每一台机器上,按以下操作同样参数安装。

版本

编译参数

PostgreSQL 12.3 编译

编译:

1
2
3
4
5
kg install llvm90 gettext curl gmake
./configure '--with-libraries=/usr/local/lib' '--with-includes=/usr/local/include' '--enable-thread-safety' '--disable-debug' '--enable-nls' '--without-pam' '--with-openssl' '--without-llvm' '--without-gssapi' '--prefix=/usr/local' '--localstatedir=/var' '--mandir=/usr/local/man' '--infodir=/usr/local/share/info/' '--build=amd64-portbld-freebsd12.1' 'build_alias=amd64-portbld-freebsd12.1' 'CC=cc' 'CFLAGS=-O2 -pipe -fstack-protector-strong -fno-strict-aliasing ' 'LDFLAGS= -L/usr/local/lib -lpthread -L/usr/local/lib -fstack-protector-strong ' 'LIBS=' 'CPPFLAGS=-I/usr/local/include' 'CXX=c++' 'CXXFLAGS=-O2 -pipe -fstack-protector-strong -fno-strict-aliasing ' 'CPP=cpp' 'PKG_CONFIG=pkgconf' 'LDFLAGS_SL='
make world
make install-world
adduser postgres

Citus 9.4.0 编译

编译

1
2
3
./configure 'LDFLAGS= -L/usr/local/lib -lpthread -L/usr/local/lib  -fstack-protector-strong ' CPPFLAGS=-I/usr/local/include
gmake
gmake install

设置并启用Citus

所有主机上的共同操作

注意:**以下所有操作都在要每个节点主机上完整操作完。包括建库和启用citus。且一定是先建库,进入main库后再启动citus扩展**

  • 初始化数据库
    1
    2
    su postgres
    initdb data
  • 配置postgresql.conf

    listen_addresses = ‘*’

    port = 5432

    shared_buffers = 256MB # 按需调节

    shared_preload_libraries = ‘citus’ # 关键配置

  • 配置pg_hba.conf

    host all all 192.168.1.1/24 trust # 开放内网访问

  • 启动PostgreSQL
    script
    1
    pg_ctl -D data start
  • 建库并启用Citus
    1
    2
    3
    4
    psql
    create database main;
    \c main
    create extension citus;

    协调节点上的操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    psql main
    select master_add_node('citus1',5432);
    select master_add_node('citus2',5432);

    main=# select master_get_active_worker_nodes();
    master_get_active_worker_nodes
    --------------------------------
    (citus1,5432)
    (citus2,5432)
    (2 行记录)

    使用Citus

    现在只要在协调节点citus0上的main库中建表。所有工作节点都会自动创建分表。

在协调节点上存储会将数据分发到不同的工作节点上。查询也是在多个工作节点上分布查询了。

  • 本文标题:Citus,PostgreSQL的最佳分布式改造!
  • 本文作者:jf wang
  • 创建时间:2020-08-14 12:23:02
  • 本文链接:https://www.wangjunfeng.com.cn/2020/08/14/postgresql-citus/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!