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

相关推荐
数字新视界1 小时前
档案库房环境安全监控解决方案
大数据·运维·数据库·物联网·环境监控系统
嘘神秘用10 小时前
布:AI 驱动的 Redis 客户端,更快、更直观
数据库·人工智能·redis
东北小狐狸-Hellxz12 小时前
Redis 哨兵搭建+ACL权限控制
数据库·redis
研究员子楚13 小时前
GEO行业发展标准体系白皮书V2.0-第09卷 · 适配篇:硅基主权伦理宪章与行业适配宣言
数据库·人工智能·geo
l1340620823514 小时前
鸿蒙实战:RDB 数据库设计与 DatabaseService
数据库·华为·harmonyos·鸿蒙系统
山峰哥14 小时前
数据库工程与索引策略实战指南‌
服务器·数据库·sql·oracle·深度优先
谙忆14 小时前
图片版权保护工程实战:明水印、盲水印(DCT隐写)、Referer防盗链与签名URL怎么落地
数据库
KaMeidebaby15 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
xfhuangfu15 小时前
19c CDB架构下的数据库启动和停止
数据库·架构