分布式数据库
分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都可能有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数据库】
【发文不易,路过高抬贵手收藏点个赞^.^】