【自建分布式数据库详细指南】(三)扩展:利用POSTGRESQL流复制创建读写分离

分布式数据库

分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都可能有DBMS的一份完整拷贝副本,或者部分拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的逻辑上集中、物理上分布的大型数据库。

【自建分布式数据库详细指南】(二)部署:多节点分布式集群搭建
上一篇我们采用CITUS扩展实现了基本的分布式数据库结构,按照现有的搭建框架,那么我们是能够实现集群机制,但问题是这样的集群机制,并不能实现良好的读写分离,对于节点之间有大量写入或数据交换会带来较大的性能瓶颈。本篇将围绕如何在现有CITUS集群基础上构建读写分离模式节点。

流复制是PG数据库用于解决同步处理的一种技术。

本文以一主一备进行设置,MASTER节点可以做为CN节点或者WORK节点

主机MASTER  192.168.0.2

备机BACKUP_A 192.168.0.3

1.建立基础账户及数据文件夹

./configure --prefix=/home/postgres
make
make install
#添加用户,这个默认安装数据库后会新加POSTGRS的账号
groupadd postgres
useradd -g postgres postgres
#初始化db文件夹
mkdir /home/data
#给数据文件赋权给POSTGRES账号
chown postgres.postgres /home/data
#启动数据库
/home/postgres/bin/initdb -D /home/data

2.修改配置文件

需要提到的是网上不少文章缺少实践,未对版本进行选择,导致操作容易混淆

有不少教程会提到压缩archive命令,可能版本的不同导致配置文件不一样,这一点要注意

修改主机节点MASTER的postgresql.conf

wal_level = hot_standby  # minimal, replica, or logical   #使得日志支持Streaming Replication
max_wal_senders = 2  # max number of walsender processes   这个设置了可以最多有几个流复制连接,几个并发的standby数据库就设置几个
wal_keep_segments = 256     #设置流复制保留的最多的xlog数目,不要设置太小导致WAL日志还没有来得及传送到standby就被覆盖。一个WAL文件默认16M
hot_standby = on  # "on" allows queries during recovery  设置为备库时是否支持可读
#日志文件设置,需要先创建
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
listen_addesses='*'

3.备份主机数据,进行基础数据同步

备机节点BACKUP_A 在shell上执行如下命令,/data/postgresql/为数据库目录,如果非空,需要把文件夹目录清空

pg_basebackup -h 172.16.1.11 -p 5432 -U repl -w -Fp -Xs -Pv -R -D /data/postgresql/
参数说明
-h 启动的主库数据库地址 -p 主库数据库端口
-U 流复制用户 -w 不使用密码验证
-Fp 备份输出正常的数据库目录 -Xs 使用流复制的方式进行复制
-Pv 输出复制过程的详细信息 -R 为备库创建recovery.conf文件
-D 指定创建的备库的数据库目录
 -R 表示会在备份结束后自动生成recovery.conf文件,这样就避免了手动创建。

需要注意几点(否则无法联通):

A.主机MASTER节点需要建立replication角色的用户repli,用户名可以自定义

设置pg_hba.conf

host	replication	repli		xxx.xxx.xxx.xxx/32		trust
#放行的网段设置,xxx为replication 角色备机的IP网段

B.建立.pgpass

需要在主机MASTER 备机BACKUP_A 默认PG数据库用户BASH下建立.pass文件,确保主备机可以相互联通

#xxx.xxx.xxx.xxx:port:dbname:user:pass
192.168.0.2:5432:postgres:postgres:123456

C.切记主备防火墙要放行相关端口

4.设置备机BACKUP_A的postgresql.conf

在新版的PG数据库如14中,对于启动备机采用的是新建pid文件的方式

repli备机采用配置postgresql.conf

primary_conninfo 是备机连接主机连接信息

primary_slot_name是备机读取主机的日志信息标识

primary_conninfo = 'host=xxx.xxx.xxx.xxx port=5432 user=repli password=123456 application_name=standby01'			# connection string to sending server
primary_slot_name = 'pg_slot_standby01'	#		# replication slot on sending server
promote_trigger_file = '/home/pgsql/recoverystop.trigger'

 创建标识文件,启用备库 

touch /home/data/*.pid

5.充分使用CITUS特性,实现CN节点的只读扩展

在前述基础上,我们实现了流复制的只读节点。如果对Citus架构分布式集群的CN节点进行流复制即可实现只读扩展

对每个集群节点采取流复制,加上PATRONI等可以实现集群的高可用

对于扩展CN节点的只读流复制节点,需要在postgresql.conf增加相关配置

shared_preload_libraries = 'citus'

并在.pgpass下面增加对所有集群节点(注意:是所有集群节点)的连接信息

当然目前有一些介绍CITUS MX模式,或者WORK节点加入CITUS 的分布式元组信息,但整体不利于维护,建议采用本模式进行只读节点扩展。

下一篇:

【自建分布式数据库详细指南】(四)设计:构建分布式OLAP/OLTP考虑因素

点击链接加入群聊【CITUS POSTGRESQL MPP数据库】

【发文不易,路过高抬贵手收藏点个赞^.^】

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值