zoukankan      html  css  js  c++  java
  • Centos7 源码安装PostgreSQL Citus集群 (转载)

    citus的分布式集群目前在苏宁大规模应用,苏宁陈华军也做了很多技术分享和博客介绍。目前所有的教程都是rpm和pg一起安装,个人不喜欢,毕竟citus定位是个插件,我想在我已安装的pg上源码装一个citus比较好。

    一 集群规划

    主机名IP角色端口
    coordinate 192.168.0.55 coordinate 5432
    worker1 192.168.0.65 worker 5432
    worker2 192.168.0.66 worker 5432
    worker3 192.168.0.67 worker 5432
    worker4 192.168.0.68 worker 5432

    coordinate:协调节点,一般称为cn,存储所有元数据,不存实际数据,该节点直接对用户开放,等于一个客户端。
    worker:工作节点,不存储元数据,存储实际数据。执行协调节点发来的查询请求。一般不直接对用户开放。

    二 安装步骤

    2.1 安装pg

    在每个主机节点上都安装postgresql11。
    详细参考: Centos7安装PostgreSQL
    其中,coordinate节点的pg_hba.conf配置:

    # IPv4 local connections:
    host    all             all             0.0.0.0/0            md5
    

    worker节点的pg_hba.conf配置:

    # IPv4 local connections:
    host    all             all             192.168.0.0/24            trust
    

    2.2 安装citus

    在每个节点上都安装citus。
    从github上下载源码:https://github.com/citusdata/citus/releases

     
    latest.png
    [root@localhost opt]# wget https://github.com/citusdata/citus/archive/v8.1.1.tar.gz
    [root@localhost opt]# tar -zxvf v8.1.1.tar.gz
    [root@localhost opt]# cd citus8.1.1
    #先安装curl依赖
    [root@localhost citus-8.1.1]# yum install curl
    [root@localhost citus-8.1.1]# yum install curl-devel
    # 导入pg的环境变量
    [root@localhost  citus-8.1.1]# source /home/postgres/.bashrc
    # 安装
    [root@localhost citus-8.1.1]# ./configure
    [root@localhost citus-8.1.1]# make
    [root@localhost citus-8.1.1]# make install
    

    三 集群配置

    3.1 创建测试数据库

    在所有节点执行以下语句:

    [postgres@localhost ~]$ psql
    psql (11.1)
    Type "help" for help.
    
    postgres=# c test
    You are now connected to database "test" as user "postgres".
    test=# create extension citus;
    

    3.2 协调节点新增工作节点

    以后的管理操作仅仅在协调节点(cn)上操作

    [postgres@localhost ~]$ psql -d test
    psql (11.1)
    Type "help" for help.
    # 节点可以是ip或者dns name
    test=# SELECT * from master_add_node('worker1', 5432);
    test=# SELECT * from master_add_node('worker2', 5432);
    test=# SELECT * from master_add_node('worker3', 5432);
    test=# SELECT * from master_add_node('worker4', 5432);
    #查看工作节点:
    test=# SELECT * FROM master_get_active_worker_nodes();
    node_name | node_port 
    -----------+-----------
     worker2   |      5432
     worker4   |      5432
     worker1   |      5432
     worker3   |      5432
    (4 rows)
    

    3.3 创建分片表

    test=# create table shiptrack(gid serial primary key,tracktime timestamp without time zone,geom geometry(Point,4326));
    #旧版的master_create_distributed_table,master_create_worker_shards都已被废弃,现在由create_distributed_table替换。
    #配置分片策略
    #设置分片数,4个主机,设置分片4,每个主机一张表
    test=# set citus.shard_count=4;
    # 配置副本数
    test=# set citus.shard_replication_factor=2;
    test=# SELECT create_distributed_table('shiptrack', 'gid', 'hash');
    
    # 查看分片分布
    test=# SELECT * from pg_dist_shard_placement order by shardid, placementid;
     shardid | shardstate | shardlength | nodename | nodeport | placementid 
    ---------+------------+-------------+----------+----------+-------------
      102016 |          1 |           0 | worker1  |     5432 |          25
      102016 |          1 |           0 | worker2  |     5432 |          26
      102017 |          1 |           0 | worker2  |     5432 |          27
      102017 |          1 |           0 | worker3  |     5432 |          28
      102018 |          1 |           0 | worker3  |     5432 |          29
      102018 |          1 |           0 | worker4  |     5432 |          30
      102019 |          1 |           0 | worker4  |     5432 |          31
      102019 |          1 |           0 | worker1  |     5432 |          32
    

    有4个worker,所以数据分片为4,每个分片,做两个副本。通过分片分布,如102016分布在worker1,worker2上,同理102017分布在worker2,worker3上。
    假设worker1机器宕机了,集群访问102016原先是方位worker1的,现在会自动访问worker2上的102016分片。 也就是说,单个数据节点故障,集群还能正常用,通过多设置副本,多个节点故障也能更强壮。

    四 citus常用命令

    4.1 集群创建function,role,extension命令

    SELECT run_command_on_workers($cmd$
      /* the command to run */
      drop extension pg_pathman;
    $cmd$);


    作者:遥想公瑾当年
    链接:https://www.jianshu.com/p/ab4b86602fa1
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Django Web开发学习笔记(1)
    SessionFactory 执行原生态的SQL语句
    Java中使用FileputStream导致中文乱码问题的修改方案
    JavaScript中的namespace
    SpringMVC配置文件
    Python 贝叶斯分类
    Struct(二)
    Struct2 (一)
    SpingMVC ModelAndView, Model,Control以及参数传递
    window.onload
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/11840616.html
Copyright © 2011-2022 走看看