postgres集群搭建

 

环境:

  • redhat 7
  • postgres 11.5
  • citus 8.3.2

 

postgres编译安装:

1. 环境准备

  • 安装编译环境:yum install -y readline readline-devel openssl openssl-devel zlib zlib-devel
  • 新建用户名:pgres
  • 创建安装目录:/home/pgres/pgsql115
  • 创建数据目录:/data/pgdata
  • 创建日志目录:/data/logs

 

2.postgres源码路径:

https://ftp.postgresql.org/pub/source/v11.5/postgresql-11.5.tar.gz

 

3.编译:

  • 解压源码,进入源码目录执行./configure --prefix=/home/pgres/pgsql115
  • make&&make install

4.数据库配置:

  • 环境变量配置:vi ~/.bashrc

PGHOME=/home/pgres/pgsql115

export PGHOME

PGDATA=/data/pgdata

export PGDATA

PATH=$PATH:$PGHOME/bin

export PATH

export LD_LIBRARY_PATH=/home/pgres/pgsql115/lib

  • 数据库配置:

initdb -D /data/pgdata

citus编译安装:

1.citus源码下载:https://github.com/citusdata/citus/archive/v8.3.2.zip

2.编译:

解压源码,进入源码目录执行:

export PG_CONFIG=/home/pgres/pgsql115/bin/pg_config

./configure

make&&make install

3.参数配置:

/data01/pgdata/postgresql.conf

listen_addresses = '*'

port = 5432

shared_preload_libraries = 'citus'

unix_socket_directories = '/tmp'

/data01/pgdata/pg_hba.conf:

host all all 0.0.0.0/0 trust

 

postgres启动:

pg_ctl start -l /data/logs/pg.log

 

citus+postgres集群安装:

实例名称

操作系统用户名

数据目录

端口

192.168.0.2

pgres

/data/pgdata

5432

192.168.0.3

pgres

/data/pgdata

5432

192.168.0.4

pgres

/data/pgdata

5432

192.168.0.5

pgres

/data/pgdata

5432

192.168.0.6

pgres

/data/pgdata

5432

一个master,四个worker:

按上述安装方法在四台机器上安装,并启动。

 

初始化集群:

在各节点上执行:

  1. psql -d template1
  2. CREATE DATABASE dwdb WITH OWNER pgres ENCODING 'UTF8'; //创建数据库
  3. \c dwdb //切换数据库
  4. create extension citus; //创建pg扩展

为Coordinator添加子节点:

SELECT * from master_add_node('192.168.0.3', 5432);

SELECT * from master_add_node('192.168.0.4', 5432);

SELECT * from master_add_node('192.168.0.5', 5432);

SELECT * from master_add_node('192.168.0.6', 5432);

查看节点是否成功:

SELECT * FROM master_get_active_worker_nodes();

 

测试集群(master节点上创建):

1、创建表

create table test_table(id int, name varchar(16));

2、表分片

SELECT master_create_distributed_table('test_table', 'id', 'hash');

3、设定分片个数(2)及每个分片副本数(2)

SELECT master_create_worker_shards('test_table', 2, 2);

4、插入数据

insert into test_table(id,name) values(1,'aaaa');

insert into test_table(id,name) values(2,'bbbb');

insert into test_table(id,name) values(3,'cccc');

insert into test_table(id,name) values(4,'ewxet');

5、创建完成后,可以在子节点看到分片后的数据表如下:

 

Coordinator:

 

插入数据查询:

postgres集群搭建_第1张图片

 

执行计划:

postgres集群搭建_第2张图片

 

集群运维相关:

当worker1服务器关闭或者断电时,对表test_table插入数据,此时worker2服务器数据同步正常,当worker1服务器重启启动后,发现数据与worker2数据不一致的情况 。可以通过如下命令查询变化情况:

SELECT * from pg_dist_shard_placement order by shardid, placementid;

通过以复制分片方式对数据进行同步如下:

SELECT master_copy_shard_placement(102010, '192.168.0.2', 5432, '192.168.0.3', 5432);

 

常用命令:

启动:pg_ctl start -l /data/logs/pg.log

停止:pg_ctl stop

重启:pg_ctl restart

等待重启:pg_ctl -w restart

你可能感兴趣的:(postgres集群搭建)