环境:
- 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:
按上述安装方法在四台机器上安装,并启动。
初始化集群:
在各节点上执行:
- psql -d template1
- CREATE DATABASE dwdb WITH OWNER pgres ENCODING 'UTF8'; //创建数据库
- \c dwdb //切换数据库
- 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:
插入数据查询:
执行计划:
集群运维相关:
当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