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=192.168.221.120 port=15432 user=replica password=replica'   # 配置主库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数据库说明主从搭建完成,大功告成!!!
要在Docker上安装主从PostgreSQL,可以按照以下步骤进行操作: 1. 首先,在Docker中安装PostgreSQL。可以使用以下命令来安装PostgreSQL容器: ``` docker run --name postgres \ --restart=always \ -e TZ=Asia/Shanghai \ -e POSTGRES_PASSWORD=ly123456 \ -p 5432:5432 \ -v /data/postgresql/data:/var/lib/postgresql/data \ -d postgres ``` 这个命令将创建一个名为 "postgres" 的PostgreSQL容器,设置了密码为 "ly123456",将PostgreSQL的数据目录挂载到宿主机的"/data/postgresql/data"路径上。 2. 然后,配置主从复制。首先,检查postgresql.auto.conf文件是否包含"primary_conninfo"配置项,其中包含了主数据库的连接信息。可以使用以下命令查看文件内容: ``` cat /data/postgresql/data/postgresql.auto.conf ``` 如果没有该配置项,可以手动添加它。在文件末尾添加以下内容: ``` primary_conninfo = 'user=syncuser' ``` 其中,"syncuser"是在主数据库上创建的用于复制的用户。 3. 接下来,创建从数据库。可以使用以下命令创建一个新的PostgreSQL容器作为从数据库: ``` docker run -d -p 54321:5432 --name postgres --restart=always -v /devel/xwq/pgsql_data_dir/d14r1n17:/var/lib/postgresql/data/ 7e309048b14d ``` 这个命令将创建一个名为 "postgres" 的从数据库容器。 4. 重新启动容器以使配置生效: ``` docker restart postgres ``` 现在,你已经成功安装了主从PostgreSQL。你可以通过连接到主数据库和从数据库来进行验证。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [使用docker搭建postgresql主从复制](https://blog.csdn.net/yyb1369584682/article/details/122498271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [docker PostgreSQL 14.1 主从配置](https://blog.csdn.net/huangwp2000/article/details/126361659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值