在Citus集群中添加新节点

一、添加Citus新节点作为primary worker node
1、在新节点上安装PG和Citus,以及其他需要的组件(也可以在已有PG服务器上创建新的PG数据库实例);
2、初始化PG数据库实例,例如:
    $initdb -D citus                                (PGDATA目录可以与其他节点不一样)
3、配置pg_hba.conf和postgresql.conf,可以从其他节点节点直接拷贝(如果在一个PG服务器上有多个实例,需要需改port)
4、启动PG数据库实例:
    $pg_ctl -Dcitus start
5、在coordinator节点上执行添加新节点命令,例如:
    postgres=#select * from citus_add_node('pgworker3.local',5432);
    postgres=#select * from pg_dist_node;
    
6、重新平衡数据到新节点,直到rebalance成功完成(finished):
    postgres=# select citus_rebalance_start();
    postgres=# select citus_rebalance_status();
    postgres=# select * from citus_shards;  (能看到有shards已经分配到新的节点了)

 

二、添加Citus新节点作为secondary worker node节点
这里pgworker2.local:5434为primary节点,pgworker3.local:5434为需要添加的secondary节点
1、配置primary节点与secondary节点之间的PG复制:
使用pg_basebackup完成整库恢复了,在pgworker3.local (192.168.50.123)上执行:
    $pg_basebackup --pgdata='/home/postgres/citus2'--dbname='host=pgworker2.local port=5434 user=postgres password=password' --label='citus from pgworker2' --format=plain --wal-method=stream --write-recovery-conf
    恢复完成后检查postgresql.auto.conf中的系统变量是否正确,或者是否有多条,最后只保留一条正确的:
    [postgres@cs81-123 ~]$ cat citus2/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
ssl = 'on'
ssl_ciphers = 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384'
primary_conninfo = 'user=postgres password=password channel_binding=prefer host=pgworker2.local port=5434 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
2、启动pgworker3.local上的新恢复的数据库实例:
    $pg_ctl -Dcitus2 start
3、添加pgworker3.local:5434到Citus集群作为pgworker2.local:5434的secondary节点(主要为可以实现读写分离,增删改在pgworker2.local:5434上操作,select操作在pgworker3.local:5434上):
    在CN节点pgcoord1.local(192.168.50.121)上执行:
postgres=#
postgres=# select citus_add_node('pgworker3.local', 5434, 3, 'secondary');
citus_add_node
----------------
             13
(1 row)
或者
postgres=# select citus_add_secondary_node( 'pgworker3.local', 5434 , 'pgworker2.local', 5434 );
citus_add_secondary_node
---------------------------      
               13
(1 row)
postgres=#
postgres=# select * from pg_dist_node order by nodeid;
nodeid | groupid |    nodename     | nodeport | noderack | hasmetadata | isactive | noderole  | nodecluster | metadatasynced | shouldhaveshards
--------+---------+-----------------+----------+----------+-------------+----------+-----------+-------------+----------------+------------------
      1 |       0 | pgcoord1.local  |     5432 | default  | t           | t        | primary   | default     | t              | f
      4 |       3 | pgworker2.local |     5434 | default  | t           | t        | primary   | default     | t              | t
      5 |       4 | pgworker3.local |     5432 | default  | t           | t        | primary   | default     | t              | t
      13 |       3 | pgworker3.local |     5434 | default  | f           | t        | secondary | default     | f              | t
(6 rows)
(可选)4、如果想实现primary和secondary节点的读写分离,需要修改系统变量citus.use_secondary_nodes为always( 注意所有参与Citus集群的PG数据库实例都需要修改):
    postgres=#
postgres=# show citus.use_secondary_nodes ;
citus.use_secondary_nodes
---------------------------
never
(1 row)
    postgres=#
    postgres=# alter system set citus.use_secondary_nodes =always;
ALTER SYSTEM
postgres=#
   [postgres@cs81-121 ~]$ cat citus/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
ssl = 'on'
ssl_ciphers = 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384'
citus.use_secondary_nodes = 'always'
9、重启所有 参与Citus集群的PG数据库实例;

 

三、添加Citus新节点作为secondary coordinator node节点
这里pgcoord1.local:5432为primary节点,pgcoord2.local:5432为需要添加的secondary节点
1、配置pgcoord2.local:5432到pgcoord1.local:5432的PG复制:
    具体步骤参考前面;
2、启动pgcoord2.local上新恢复的PG数据库实例:
    $pg_ctl -Dcitus start
3、添加pgcoord2.local:5432到Citus集群作为pgcoord1.local:5432的secondary节点:
    postgres=# select citus_add_node('pgcoord2.local', 5432, 0, 'secondary');
citus_add_node
----------------
             16
(1 row)
postgres=#
postgres=# select * from pg_dist_node order by nodeid;
nodeid | groupid |    nodename     | nodeport | noderack | hasmetadata | isactive | noderole  | nodecluster | metadatasynced | shouldhaveshards
--------+---------+-----------------+----------+----------+-------------+----------+-----------+-------------+----------------+------------------
      1 |       0 | pgcoord1.local  |     5432 | default  | t           | t        | primary   | default     | t              | f
      4 |       3 | pgworker2.local |     5434 | default  | t           | t        | primary   | default     | t              | t
      5 |       4 | pgworker3.local |     5432 | default  | t           | t        | primary   | default     | t              | t
     13 |       3 | pgworker3.local |     5434 | default  | f           | t        | secondary | default     | f              | t
     15 |       4 | pgworker2.local |     5432 | default  | f           | t        | secondary | default     | f              | t
     16 |       0 |pgcoord2.local |     5432 | default  | t           | t        | secondary | default     | t              | f
(6 rows)
postgres=#
后续介绍怎么使用secondary节点接管primary节点...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值