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

相关推荐
VIP_CQCRE24 分钟前
把 OpenCode 接入 Ace Data Cloud:让 AI 编程能力真正进入 IDE 工作流
大模型·ai编程·开发工具·opencode·acedatacloud
瀚高PG实验室25 分钟前
瀚高数据库V9.0.5数据脱敏完整配置步骤
jvm·数据库·postgresql·瀚高数据库
hacker70734 分钟前
DBeaver 鸿蒙 PC 适配全记录:在 HarmonyOS 桌面端原生重建一个通用数据库工具
数据库·华为·harmonyos
Cicada12837 分钟前
分享我一直在用的一套 AI 记忆系统方案
大数据·数据库·人工智能
todoitbo44 分钟前
SQL Server数据库迁移:V9R4C019 如何接住存量 T-SQL 批处理
数据库·sql·国产数据库
云飞云共享云桌面1 小时前
不用批量采购工作站|液压设备制造,SolidWorks 多人共享服务器方案
运维·服务器·网络·数据库·制造
写后端的胖头鱼1 小时前
【高频面试题】SQL 查询慢怎么排查
数据库·sql·mysql·oracle·慢查询·高频面试题
蓝速科技1 小时前
口岸政务窗口双屏翻译机落地应用指南
运维·数据结构·数据库·人工智能·科技·政务
风哥2号1 小时前
数据库教程FGMT20‑Oracle容灾体系架构与数据库升级迁移方案
数据库·oracle·架构
wudongfang6662 小时前
mysql全量同步数据改增量
数据库·mysql