Postgres 搭建主从集群

简介

本文介绍如何搭建 Postgres 主从集群,操作系统为 CentOS7,数据库版本是 postgresql-15

官网地址:https://www.postgresql.org/

安装

参考官方提供的下面这几条命令进行安装

命令如下

shell 复制代码
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

sudo yum install -y postgresql15-server

sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15

为防止网络原因,rpm 文件最好是浏览器下载下来,传到服务器上离线安装

若执行第二步 sudo yum install -y postgresql15-server 出现下面这些报错

敲下面这两行命令解决

shell 复制代码
yum-config-manager --disable pgdg12
yum-config-manager --disable pgdg13

安装过程如下

连接测试

连接相关参考下面这篇博客,需要进行一些设置,这里不再赘述

搭建

如下,在这两台服务器上各自搭建了 Postgres 数据库,账号均为:postgres/123456

关于如何设置账号,参考下面这篇博客

(1)主从库设置

postgres 数据库主要的配置文件是以下两个

  • postgresql.conf:配置文件;

  • pg_hba.conf:客户端访问权限控制文件;

搭建主从,postgresql.conf 需进行以下配置

java 复制代码
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
max_replication_slots = 10
hot_standby = on

这些配置在初始配置文件中都有,有的被注释了,打开即可

另外一个配置文件,pg_hba.conf 配置如下,末尾需开放主从复制的连接权限

(严格来的话,这里需指定对应网段,尽可能缩小连接访问范围)

设置完都需要重启 Postgres 数据库

(2)主库设置

192.168.101.16 为主库,在服务器上敲下面的命令进行配置

shell 复制代码
su - postgres
psql
-- 创建复制用户,密码 Rep@123456
CREATE USER repuser WITH REPLICATION PASSWORD 'Rep@123456';
-- 创建物理复制槽,防止主库wal日志清理导致从库断连
SELECT pg_create_physical_replication_slot('slot_slave_18');
-- 查看确认创建成功
SELECT slot_name,active FROM pg_replication_slots;
\q

也可以直接在连接工具(Datagrip)中直接敲 SQL 语句

(3)从库配置

敲下面的命令

shell 复制代码
systemctl stop postgresql-15
# 备份原有数据(防止出错回滚)
mv /var/lib/pgsql/15/data /var/lib/pgsql/15/data_bak
# 新建空目录
mkdir /var/lib/pgsql/15/data
chown postgres:postgres /var/lib/pgsql/15/data
chmod 700 /var/lib/pgsql/15/data

切换 Postgres 用户,敲下面的命令设置主库

shell 复制代码
su - postgres
pg_basebackup -h 192.168.101.16 -p 5432 -U repuser -D /var/lib/pgsql/15/data -Fp -Xs -P -R

如下

切回 root 用户,重启 Postgres 数据库

shell 复制代码
systemctl start postgresql-15
systemctl enable postgresql-15

验证

以上就搭建完成了,可敲下面的命令验证

(1)主库验证

shell 复制代码
su - postgres
psql
SELECT pid,usename,application_name,state,write_lag FROM pg_stat_replication;

或在连接工具中敲 SQL 语句

sql 复制代码
SELECT pid,usename,application_name,state,write_lag FROM pg_stat_replication;

如下,可见主从复制的进程记录,表示主从复制在进行中

(2)从库验证

敲下面的命令

shell 复制代码
su - postgres
psql
-- 返回true代表是备库
SELECT pg_is_in_recovery();
-- 查看wal接收&回放进度
SELECT pg_last_wal_receive_lsn(),pg_last_wal_replay_lsn();

或者在连接工具中敲下面的 SQL

sql 复制代码
-- 返回true代表是备库
SELECT pg_is_in_recovery();
-- 查看wal接收&回放进度
SELECT pg_last_wal_receive_lsn(),pg_last_wal_replay_lsn();

如下

使用

在主库中,创建一个数据库表,插入一条记录

sql 复制代码
CREATE TABLE test_sync(id int);
INSERT INTO test_sync VALUES(1);

如下

通过工具,直接看从库,数据库表和记录都同步过来了

主库新增记录,从库实时同步,非常 Nice

相关推荐
一米阳光86611 小时前
软考(中级)软件设计师核心笔记(3)数据库系统——概念、数据库设计
数据库·笔记·职场发展·软考·软件设计师
BullSmall1 小时前
Anolis OS 8.10 Docker 部署 PostgreSQL 15 完整实操
docker·postgresql·容器
奈斯先生Vector2 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
建筑工程企业管理系统3 小时前
erp工程项目管理系统落地价值:实现工程多项目成本精细化核算与管控
大数据·数据库·人工智能
AI大模型-小华4 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
foolishlee5 小时前
Neon wal日志处理流程2
数据库
2601_965798475 小时前
Is Hygia Good for Maid & Janitorial Sites? Technical Audit
服务器·网络·数据库
Cloud云卷云舒6 小时前
海山数据库(HaishanDB)面向工业云场景技术方案
数据库·haishandb·工业云·移动云海山数据库·天工云
逃逸线LOF6 小时前
Spring配置数据源{连接池}(Druid、c3p0)
java·数据库·spring
严同学正在努力8 小时前
从备份到恢复:我用 30 分钟恢复了误删的核心业务表
android·java·数据库·ai