postgresql主从搭建教程,使用docker部署pgsql并搭建主从复制

postgresql主从搭建教程

使用docker部署postgresql,并搭建主从配置

两台节点ip地址:192.168.221.120,192.168.221.121

前置准备工作:

两台机器分别安装docker,拉取镜像
docker pull postgres:14.7-alpine3.17
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
关闭selinux
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

主节点执行:

#创建映射目录
mkdir /data/postgres
#启动容器
docker run -d -p 5432:5432 -v /data/postgres/:/var/lib/postgresql/data -e POSTGRES_PASSWORD=JiaLve123! --name postgres postgres:14.7-alpine3.17
#进入容器
docker exec -it postgres bash
#进入命令行
psql -U postgres
#创建用于复制的用户
CREATE ROLE replica login replication encrypted password 'replica';
#修改vi /var/lib/postgresql/data/pg_hba.conf文件末尾添加下面这行,第三列是上面创建的用于复制的用户名,第四列为从节点ip地址
host    replication     replica         192.168.221.121/24      md5
#修改vi /var/lib/postgresql/data/postgresql.conf文件中以下值
listen_addresses = '*'   #允许数据库监听所有IP地址,即可以通过任何网络接口连接。
archive_mode = on      #启用归档模式,允许数据库将 WAL(Write-Ahead Logging)日志文件存档。
archive_command = '/bin/date'    #只是将日期打印出来,取消了真正的归档。
wal_level = replica    #设置为 replica,表示开启了逻辑复制以支持热备。
max_wal_senders = 10    #设置能够连接到主服务器进行 WAL 复制的最大连接数。这是为了支持有多个从服务器的场景。
wal_keep_size = 1024    #设置 WAL 文件的保留大小,以兆字节(M)为单位。超过这个大小的日志文件将不会被删除,以便后续从备份中进行还原。
wal_sender_timeout = 60s #设置 WAL 发送者(主服务器)发送数据的超时时间,这里是60秒。
max_connections = 100    #设置数据库允许的最大连接数。在这里要注意,从库的最大连接数必须大于主库的连接数,确保从库可以处理主库发送的所有连接。
#退出容器,并重启
docker restart postgres

从节点执行:

#启动容器,注意这里没有进行数据卷挂载,因为后面要删除数据将主节点数据同步过来
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=JiaLve123! --name postgres postgres:14.7-alpine3.17
#进入容器
docker exec -it postgres bash
#删除数据,并将主节点数据同步过来(注意-h后面跟着的是主节点ip,-U后面是主节点创建的用于复制的用户名,需要输入密码时就是用于复制的用户名的密码)
rm -rf /var/lib/postgresql/data/* && pg_basebackup -h 192.168.221.120 -p 5432 -U replica -Fp -Xs -Pv -R -D /var/lib/postgresql/data
#数据同步后容器会关闭。再启动即可
docker start postgres
#再进入容器创建standby.signal
docker exec -it postgres bash
#创建文件vi /var/lib/postgresql/data/standby.signal  添加下面这行内容声明从库
standby_mode = 'on'
#修改文件vi /var/lib/postgresql/data/postgresql.conf 修改以下配置
wal_level = replica   # 设置 WAL 日志的级别为 replica,表示开启逻辑复制以支持热备。
primary_conninfo = 'host=172.17.0.1 port=15432 user=syncuser password=123456'   # 配置主库ip地址以及端口号,以及用于复制的用户名和密码	
hot_standby = on                     # 在恢复期间允许查询。这是在流复制过程中,从库在进行 WAL 日志恢复的同时允许查询读取。
recovery_target_timeline = latest    # 设置恢复的目标时间线。在这里,设置为 latest 表示从库将一直尝试连接到主库的最新时间线上。
max_connections = 120  				#必须大于主节点的连接数。这确保从库可以处理主库发送的所有连接请求。
#重启从库
docker restart postgres

查看主从状态

#进入主节点容器,
docker exec -it postgres bash
#进入pg命令行
psql -U postgres
#查询是否正在同步
select client_addr,sync_state from pg_stat_replication;
#sql查询结果类似下面则代表正在同步
postgres=# select client_addr,sync_state from pg_stat_replication;
   client_addr   | sync_state 
-----------------+------------
 192.168.221.121 | async
(1 row)

测试:

-- 主节点创建数据库
create database test;
-- 从节点查看是否同步过来了,进入命令行执行:
\l
-- 从节点能够看到test数据库说明主从搭建完成,大功告成!!!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL是一种开源的关系型数据库管理系统,可以用于构建高可用的主从架构。在搭建主从架构之前,需要先安装和配置主服务器和从服务器。 首先,安装PostgreSQL 14以及所需的依赖项。可以通过包管理工具如apt-get(适用于Ubuntu)或yum(适用于CentOS)来安装。然后,编辑主服务器(通常为生产环境)的postgresql.conf文件和从服务器(通常为备份环境)的postgresql.conf文件。 在主服务器上,配置以下参数以支持主从复制: 1. 将wal_level设置为logical或replica,这取决于目标数据库的用途。 2. 配置max_wal_senders为从服务器的最大连接数。 3. 设置max_replication_slots为从服务器的最大并发复制数。 4. 启用archive_mode并设置archive_command以将WAL(Write-Ahead Log)日志归档到指定的位置,以便从服务器能够访问归档文件。 在从服务器上,配置以下参数: 1. 将primary_conninfo设置为主服务器的连接信息,包括主服务器的主机名、端口、用户名和密码。 2. 设置standby_mode为on以启用从服务器的备份模式。 3. 配置primary_slot_name为从服务器的复制槽名称。 完成配置后,启动主服务器和从服务器,并确保主服务器和从服务器能够相互访问。由于主服务器会在WAL日志中记录所有更改,从服务器可以通过复制这些日志来保持数据的一致性。 在主服务器上创建复制用户并授予复制权限,以便从服务器可以连接并复制数据。然后,在从服务器上创建复制槽,并启动复制进程。 一旦主从复制建立起来,从服务器将会持续地从主服务器接收和应用WAL日志,以保持与主服务器的数据同步。在主服务器发生故障时,可以通过切换从服务器为新的主服务器来维持服务的连续性。 总结来说,PostgreSQL 14主从搭建需要通过配置主服务器和从服务器的参数,并确保数据的复制和同步。通过确保主从服务器之间的连接和相应的权限配置,可以实现高可用性和数据备份。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值