postgresql14主从同步流复制配置(centos 7验证可用)

一、postgresql数据库安装

安装环境:centos 7 + postgresql 14

postgresql1.local - 192.168.221.133 source
postgresql2.local - 192.168.221.137 replica

安装路径

可以参考官方教程网站:https://www.postgresql.org/download/linux/redhat/

参考博客,具体安装步骤如下:

# Install the repository RPM:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Install PostgreSQL:
sudo yum install -y postgresql14-server

# Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14

数据库登录方式

登录方式1:

#postgres权限登录
su - postgres
#输入 psql
-bash-4.2$ psql
#用户 postgres 的口令:
psql (14.2)
输入 "help" 来获取帮助信息.

postgres=#

登录方式2:

psql -U postgres -h 192.168.221.133 --port 58063
  • 注意:修改系统用户密码,一定要修改不然等你改完配置文件就不能这么轻松愉快进入了:
ALTER USER postgres WITH PASSWORD 'a';

修改配置文件

1、postgresql.conf

vim /var/lib/pgsql/14/data/postgresql.conf 

修改监听地址与端口
在这里插入图片描述

2、pg_hba.conf

vim /var/lib/pgsql/14/data/pg_hba.conf

 末尾添加 
 host    all             all             0.0.0.0/0            scram-sha-256

修改内容如下:
在这里插入图片描述
3、重启数据库

sudo systemctl restart postgresql-14

4、关闭防火墙
在数据库远程连接过程中可能出现连接失败的情况,需要关闭防火墙

  • 1.首先切换到 root:su -root * 2.进入 /bin 目录:cd /bin
    * 3.执行命令:systemctl stop firewalld.service(关闭防火墙)
    systemctl disable firewalld.service(关闭防火墙自动启动)
    * 4.查看防火墙状态:systemctl status firewalld.service(查看防火墙服务状态),出现下述图片表示关闭OK
    在这里插入图片描述

二、postgresql主从数据库配置

主库配置

参考博客:
1、创建具有流复制权限的用户

CREATE ROLE replica login replication encrypted password 'replica的密码';

2、编辑postgresql.conf

# 新增或修改下列属性设置
# 监听所有IP
listen_addresses = '*'  
# 开启归档
archive_mode = on 
#归档命令
archive_command = 'test ! -f /var/lib/pgsql/14/data/pg_archive/%f && cp %p /var/lib/pgsql/14/data//pg_archive/%f'
# 9.6开始没有hot_standby(热备模式)
wal_level = replica
#最多有2个流复制连接
max_wal_senders = 2   
wal_keep_size = 16  
#流复制超时时间
wal_sender_timeout = 60s
# 最大连接数,据说从机需要大于或等于该值
max_connections = 100

3、编辑pg_hba.conf增加从机IP
末尾增加

host   replication  replica  192.168.221.137/32  scram-sha-256
host replication replica 192.168.221.137/32 trust

4、重启数据库

sudo systemctl restart postgresql-14

从库配置

1、验证在从库是否可以访问主节点

psql -U postgres -h 192.168.221.133 --port 5432

2、停止从库postgres服务

systemctl stop postgresql-14.service

3、清空从库数据存储文件夹

rm -rf /var/lib/pgsql/14/data/*

4、从主服务器上copy数据到从服务器,这一步叫做“基础备份”

pg_basebackup -h 192.168.221.133 -U replica  -D /var/lib/pgsql/14/data --write-recovery-conf --progress --verbose
//授权文件夹
chmod -R 0700 /var/lib/pgsql/14/data

注意:需要验证是否能正常启动数据库
5、此时data目录下会出现standby.signal文件,编辑此文件

## 加入
standby_mode = 'on'

6、修改postgresql.conf文件

#从机信息和连接用户
primary_conninfo = 'host=主节点IP port=5432 user=replica password=replica用户的密码'
#说明恢复到最新状态
recovery_target_timeline = latest
#大于主节点,正式环境应当重新考虑此值的大小
max_connections = 120
#说明这台机器不仅用于数据归档,还可以用于数据查询
hot_standby = on
#流备份的最大延迟时间
max_standby_streaming_delay = 30s
#向主机汇报本机状态的间隔时间
wal_receiver_status_interval = 10s
#r出现错误复制,向主机反馈
hot_standby_feedback = on

7、重启数据库

sudo systemctl restart postgresql-14

三、验证主从搭建是否成功

select client_addr,sync_state from pg_stat_replication;

在这里插入图片描述
说明从服务器正在接收流,而且是异步流复制。主从配置成功

四、主从切换

主数据库是读写的,备数据库是只读的。当主数据库宕机了,可以通过pg_controldata命令将从库提升为主库(将只读模式变成读写),实现一些基本的HA应用。也可以通过建立触发文件提升为主库,不推荐。命令快捷不容易出错。
1、查看/var/lib/pgsql/12/data复制状态
主库
在这里插入图片描述
从库
在这里插入图片描述

2、主库故障,停止主库服务
在这里插入图片描述
3、提升从库为主库

su - postgres -c "pg_ctl promote"

server promoting

4、查看从库日志

cat /var/lib/pgsql/912/data/pg_log/postgresql-Mon.log 
PostgreSQL 14复制(Stream Replication)是一种高可用和数据实时复制的技术,它允许主数据库服务器将更新的数据直接发送到从数据库服务器,而无需完全复制整个事务日志。以下是设置和使用PostgreSQL 14复制的基本操作步骤: 1. **启动复制**: - 在主数据库服务器上,首先启用复制功能(如果尚未启用): ```sql ALTER SYSTEM SET max_wal_senders = n; -- 根据需要设置有效的接收器数量 ``` - 创建一个复制槽(slot),表示复制的目标: ```sql CREATE REPLICATION SLOT slot_name; ``` 2. **配置主服务器**: - 在主服务器的`pg_hba.conf`中添加对从服务器的连接规则,允许复制: ```ini host replication user_from_slot replication_host/replication_port md5 ``` 3. **启动复制**: - 启动wal sender进程,这将监听master数据库的wal日志并将其发送到指定的槽: ```sql SELECT pg_start_backup('backup_label', format='xlog'); -- 创建备份前先备份,可选 SELECT walreceiver_start(slot_name, 'host=replication_host port=replication_port user=user_from_slot'); ``` 4. **在从服务器上接收复制**: - 安装并配置PostgreSQL,确保它与主服务器版本兼容。 - 创建接收槽,并连接到主服务器: ```sql CREATE REPLICATION SLOT slot_name; SELECT walreceiver_create(slot_name, 'host=master_host port=master_port user=user_to_slot'); ``` - 启动wal receiver进程来接收和应用数据: 5. **监控和调整**: - 使用`pg_stat_replication`系统视图来检查复制状态。 - 根据需要调整参数如`max_wal_senders`、`max_wal_size`等以优化性能。 6. **停止和恢复**: - 当不再需要复制时,停止复制进程: ```sql SELECT walreceiver_stop(slot_name); SELECT pg_stop_backup(); ``` - 如果需要恢复从数据库,先恢复备份,然后同步到最新点。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值