Postgresql的postgis、citus集群搭建
安装环境:
- 操作系统:ubuntu16.04_x64
- 软件版本:postgresql10、postgis3、citus
- 节点情况:
操作系统 | IP地址 | 节点情况 |
---|---|---|
ubuntu16.04_x64 | 192.168.5.100 | Master |
ubuntu16.04_x64 | 192.168.5.101 | Salver1 |
ubuntu16.04_x64 | 192.168.5.102 | Salver2 |
安装命令:
三台服务器都执行以下命令,安装好postgresql10+postgis3+citus
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt xenial-pgdg main" >> /etc/apt/sources.list'
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install postgresql-10 postgresql-10-postgis-3-scripts postgis postgresql-10-citus
三台服务器都要修改数据库密码和postgres用户密码
修改数据库密码
sudo -u postgres psql
ALTER USER postgres WITH PASSWORD '123456';
\q
修改ubuntu操作系统的postgres用户的密码(密码要与数据库用户postgres的密码相同)
sudo passwd -d postgres #passwd -d清空指定用户密码
sudo -u postgres passwd #设置密码
Master+Salver都需要的设置
sudo nano /etc/postgresql/10/main/postgresql.conf
listen_addresses = '*' #修改监听地址
shared_preload_libraries = 'citus' #此处是citus集群需要设置的
Master设置密码访问
sudo nano /etc/postgresql/10/main/pg_hba.conf
添加以下规则
host all all 0.0.0.0/0 md5
Slaver设置为无需密码访问
nano /etc/postgresql/10/main/pg_hba.conf
添加以下规则
host all all 0.0.0.0/0 trust
重启pg服务
sudo /etc/init.d/postgresql restart
进入Master+Salver创建相同的数据库与扩展
create database postgis; //可以创建数据库也可以使用默认的postgres
CREATE EXTENSION citus; //citus的扩展需优先于postgis扩展
CREATE EXTENSION postgis; //安装postgis扩展
SELECT version();//显示postgresql的版本
SELECT postgis_full_version();//显示postgis的版本
使集群能工作起来
Master节点添加Salver节点
SELECT * from master_add_node('192.168.5.101', 5432);
SELECT * from master_add_node('192.168.5.102', 5432);
查看工作节点
SELECT * FROM master_get_active_worker_nodes();
创建相关测试表
- 创建表
create table test_table(id int, name varchar(16));
- 表分片
SELECT master_create_distributed_table('test_table', 'id', 'hash');
- 设定分片个数(2)及每个分片副本数(2)
SELECT master_create_worker_shards('test_table', 2, 2);
如果出现Salver1断电、Salver2正常工作,现在把数据插入到Master节点,Salver1来电后数据不同步怎么办
- Master上查询
SELECT * from pg_dist_shard_placement order by shardid, placementid;
- 当shardstate为1时,数据同步正常,当shardstate为3时数据同步异常。
- 通过以复制分片方式对数据进行同步如下,将Salver2(102)上的数据复制到Salver1(101)上去,shardid为异常的分片ID
SELECT master_copy_shard_placement(shardid, '192.168.5.102', 5432, '192.168.5.101', 5432);