docker 搭建postgres 主从 pgadmin

news2024/9/22 15:47:35

准备工作

创建一个docker bridge 网路用于测试
docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 pgnetwork
# 查看
docker network ls
 
设置了网段为 192.168.0.0,规划主从库IP端口如下:
主库 192.168.0.101:5432
从库 192.168.0.102:5433


创建一个文件夹用来挂载数据(自定义)
mkdir -p /data/docker/pg/{master,slave,repl}
 
【可选】拉取镜像
docker pull postgres

版本:PostgreSQL 13.3

运行主库(用来写)
docker run -d \
--name postgres-master \
--network pgnetwork --ip 192.168.0.101 \
-p 5432:5432 \
-e TZ=Asia/Shanghai \
-e POSTGRES_PASSWORD=123456 \
-v /data/docker/pg/master:/var/lib/postgresql/data \
postgres:latest
 
使用数据库连接工具(例如navicat)创建同步账号
CREATE ROLE repuser WITH
  LOGIN
  REPLICATION
  CONNECTION LIMIT 5
  PASSWORD 'a12345';
 
进入挂载/data/docker/pg/master/目录
编辑pg_hba.conf文件,在尾部追加一条
host    replication    repuser        192.168.0.102/32    md5
 


说明 上面repuser是同步账号,192.168.0.102是从库的IP地址,md5是加密方式

修改postgresql.conf配置,修改点如下
将归档文件统一放archivelog目录,注意使用的是相对路径
archive_mode = on
archive_command = 'mkdir -p archivelog && test ! -f archivelog/%f && cp %p archivelog/%f'
restore_command = 'cp archivelog/%f %p'
max_wal_senders = 10
synchronous_standby_names = '*'
 
技巧:使用 【:/archive_mode】搜索


重启主库使配置生效
docker exec -it -u postgres postgres-master pg_ctl stop

docker start postgres-master
 
运行从库(用来读)
docker run -d \
--name postgres-slave \
--network pgnetwork --ip 192.168.0.102 \
-p 5433:5432 \
-e TZ=Asia/Shanghai \
-e POSTGRES_PASSWORD=123456 \
-v /data/docker/pg/slave:/var/lib/postgresql/data \
-v /data/docker/pg/repl:/var/lib/postgresql/repl \
postgres:latest
 
进入从库内部
docker ps
docker exec -it 14c77b64a4d7 bash
 


同步初始主库数据到 repl 目录
pg_basebackup -R -D /var/lib/postgresql/repl -Fp -Xs -v -P -h 192.168.0.101 -p 5432 -U repuser
1
提示输入密码:输入上面创建的账号repuser对应的密码(a12345)

备注成功推出
exit
1
通过上一步的初始备份,使用data/docker-data/pg/repl里的数据重建 slave容器

停止并删除从库容器
docker stop postgres-slave && docker rm postgres-slave
1
删除原slave挂载目录,将刚复制的repl重命名为slave
rm -rf slave
mv repl slave
 
检查slave下的postgresql.auto.conf文件是否包含primary_conninfo = 'user=repuser password=a12345...
重新运行从库(重点是挂载目录位置与上面保持一致)
docker run -d \
--name postgres-slave \
--network pgnetwork --ip 192.168.0.102 \
-p 5433:5432 \
-e TZ=Asia/Shanghai \
-e POSTGRES_PASSWORD=123456 \
-v /data/docker/pg/slave:/var/lib/postgresql/data \
postgres:latest
 
查看主从复制信息
# 验证主从
ps -aux | grep postgres
# 主库有 walsender 进程如下
postgres: walsender repuser
# 从库有 walreceiver 进程如下
postgres: walreceiver
 


检查是否成功
连接到主库
    select * from pg_stat_replication;
1
注意
同步主数据库之后,连接从库需要使用主库对应的账号密码
当开启archive_mode=on,发现pg_wal文件巨大,可能不base文件还大时,一定是archive_command异常或未生效,可采取紧急措施降低pg_wal文件大小(不建议生产环境使用)
步骤:
进入容器内部docker exec -it 容器ID或名称 bash回车
执行指令su postgres
执行指令pg_controldata $PGDATA,结果如下

表示000000010000001700000046之前的文件可以删除
执行指令pg_archivecleanup -d $PGDATA/pg_wal 000000010000001700000046

退出容器后,查看pg_wal文件大小du -h发现只有几十Mb
这种方法治标不治本,紧急情况下可参考下,不建议正式环境使用


-------pgadmin

docker搭建pgadmin并挂载

 

docker搭建pgadmin并挂载
1.创建文件
2.给文件夹授权
3.运行pgadmin
4.使用
1.创建文件
mkdir -p /data/docker/pgadmin/{data, logs}
1
2.给文件夹授权
cd /data/docker/pgadmin
chown  -R 5050:5050 pgadmin/
 
3.运行pgadmin
docker run  -d --name pgadmin -p 5434:80 \
    -e "PGADMIN_DEFAULT_EMAIL=admin@xxx.cn" \
    -e "PGADMIN_DEFAULT_PASSWORD=123456" \
-v /data/docker/pgadmin/data:/var/lib/pgadmin \
-v /data/docker/pgadmin/logs:/var/log/pgadmin \
    dpage/pgadmin4 

不用外部卷

拉取postgresql可视化工具pgadmin4

  • 拉取postgresql可视化工具pgadmin4:

    docker pull dpage/pgadmin4

    运行pgadmin4:

    [root@dockerpg logs]# docker run -d -p 5434:80 --name pgadmin4 -e PGADMIN_DEFAULT_EMAIL=test@123.com -e PGADMIN_DEFAULT_PASSWORD=123456 dpage/pgadmin4
    2e8fce268b69be666156e0b793bcd3603b0ea66a76a03a4905bda68b4b59735c
    [root@dockerpg logs]# docker ps 
    

    如图:

     3、查看服务

     

    4、打开浏览器访问pgadmin4  Content Filter - Access Deniedicon-default.png?t=MBR7http://192.168.1.150:5434/

  • 抱歉,您的访问无响应


    您(10.0.128.44)访问的页面无响应!

    原因如下:

    192.168.1.150 请求未响应

    若有任何疑问,请与管理员联系。

  • 如果因为IP限制,可以通过端口映射回物理IP

  • pgAdmin 4icon-default.png?t=MBR7http://10.0.128.44:5434/browser/

  •  输入我们设置的邮箱test@123.com和密码123456,点击Login

     连接server:

     打开

     链接配置

     点击

     提示无法解析,其实宿主机的hosts文件里host.docker.internal对应的还是容器IP 

    那你用postgres那个容器的IP去连 

    查看容器ip

    docker exec -it 836  bash  //进入容器 836为这个容器的id 
    cat /etc/hosts    //查看容器的ip
  • [root@dockerpg logs]# docker ps -a
    CONTAINER ID   IMAGE             COMMAND                  CREATED              STATUS              PORTS                                            NAMES
    2e8fce268b69   dpage/pgadmin4    "/entrypoint.sh"         About a minute ago   Up About a minute   443/tcp, 0.0.0.0:5434->80/tcp, :::5434->80/tcp   pgadmin4
    ed345f4a33a6   postgres:latest   "docker-entrypoint.s…"   17 minutes ago       Up 17 minutes       0.0.0.0:5433->5432/tcp, :::5433->5432/tcp        postgres-slave
    6a4f3aa6420d   postgres:latest   "docker-entrypoint.s…"   27 minutes ago       Up 21 minutes       0.0.0.0:5432->5432/tcp, :::5432->5432/tcp        postgres-master
    [root@dockerpg logs]# docker exec -it postgres-master bash
    root@6a4f3aa6420d:/# cat /etc/hosts
    127.0.0.1    localhost
    ::1    localhost ip6-localhost ip6-loopback
    fe00::0    ip6-localnet
    ff00::0    ip6-mcastprefix
    ff02::1    ip6-allnodes
    ff02::2    ip6-allrouters
    192.168.0.101    6a4f3aa6420d
    root@6a4f3aa6420d:/#

  • 如图

     更改链接

     结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/182035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu16.04安装深度学习环境(CUDA9.2+PyTorch0.4.1+Python2.7)

之前已经安装好了显卡驱动,接着就可以安装CUDA了于是又找了好几篇文章进行参考:https://zhuanlan.zhihu.com/p/361190040https://blog.csdn.net/qq_43665602/article/details/125752433https://blog.csdn.net/myg22/article/details/84029924https://blo…

二、数据缓存

文章目录数据缓存1.标准缓存流程2.缓存更新一致性3.缓存穿透解决方案缓存空对象布隆过滤器4.缓存雪崩解决方案5.缓存击穿解决方案互斥锁逻辑过期6.使用函数式接口封装工具类学习 黑马点评项目整理总结: https://www.bilibili.com/video/BV1cr4y1671t/?vd_source5f3396d3af2c39…

webpack项目配置

30.webpack——webpack5新特性(启动、持久化缓存、资源模块、URIs、moduleIds和chunkIds、tree shaking、nodeJs的polyfill被移除、模块联邦)_俞华的博客-CSDN博客_chunkids webpack和vite的区别 - 简书 vite介绍 | 与其他构建工具做比较&…

【ONE·C || 字符串和内存函数】

总言 C语言:字符串和内存函数使用介绍。 文章目录总言1、求字符串长度:strlen1.1、基本介绍1.2、演示说明1.2.1、strlen输出1.2.2、strlen返回值1.3、模拟实现strlen1.3.1、计数器写法1.3.2、递归写法1.3.3、指针-指针写法2、长度不受限制的字符串函数2.…

educoder数据结构 图 无错AC代码版

目录 第1关:实现图的宽度优先遍历 任务描述 相关知识 编程要求 测试说明 输入输出格式说明: 样例输出 Ac_Code 第2关:实现图的深度优先遍历 任务描述 相关知识 测试说明 输入输出格式: 样例输出 AC_Code 第1关&am…

2023年flag

开头总是让人那么茫然无措,在这里记录梳理上一年。以期找到前进的方向,迈开新一年的第一步,然后不断前行。 回顾上一年 首先想到的第一件事,11月换了个工作依然是Java开发10月份准备了软件工程中级考试并考过读了几本技术的书籍…

【设计模式】我终于读懂了享元模式。。。

祝大家开工大吉🧧🧧🧧!!主页有红包哦 点这里 文章目录祝大家开工大吉🧧🧧🧧!!主页有红包哦 [点这里](https://blink.csdn.net/details/1469531)🧧…

Python基础学习 -- 进程锁

一、join函数的作用1、等子进程执行完,主进程再结束2、将子进程都存储到一个列表,每个子进程都调用一下join方法if __name__"__main__":print("我是主线程")stime.time()a[2,3,4]b[] #存储创建好的进程for i in a:pProcess(targetfu…

入门算法,这篇文章你得看!(java、算法基础、常用算法)

想用Java快速入门算法?这篇文章你得看! 提示:本文章适合想要入门算法,并且想 “快速” 达到一定成果的同学们阅读~ 文章非常非常非常长(可能是你见过最长的博客)!!! 阅读…

Authing 身份云入选《数字身份治理与管理(IGA)应用实践指南》报告

身份是物理实体映射在网络空间的一串数字代码,是数字世界的通行证。掌控了统一的权威数字身份就等同掌控了实体在数字空间的行为。网络业务的快速发展,使业务与安全深度融合到一起,并使数字身份成为数字化经济建设的重要基石。同一实体可以更…

【数据结构初阶】第一篇——算法性能分析

算法效率 什么是大O 时间复杂度分析 概念 大O渐进表示法 不同数据规模的差异 复杂表达式的化简 O(logn)中的log是以什么为底? 案例分析 算法为什么会超时 递归算法的时间复杂度 空间复杂度分析 概念 案例分析 递归算法的性能分析 代码的内存消耗 算法效率 算法…

如何使用VMware虚拟机(带你快速了解)

前言 📜 “作者 久绊A” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴 目录 前言 一、什么是虚拟机 二、VMware的简介 1、大概介绍 2、详…

数据结构 第四章 串

她:点击收听 1 基本知识点 1、串中的元素是字符 2、操作的对象往往不再是单个数据元素,而是一组数据元素(子串) 3、串:由零个或多个字符组成的有限序列 4、子串:串中任意连续个字符组成的子序列 5、包含子串的串又被称为该子串的主串 6、真…

LeetCode[685]冗余连接II

难度:困难题目:在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。输入一个有向图&#xf…

Linux 笔记3

5.Linux 的网络信息5.1主机名称5.1.1临时修改:hostname 新名字 (需要重新进入才能显示新名字)reboot重启虚拟机5.1.2永久:vi /etc/hostname5.2DNS解析dns解析域名域名-》ipdns域名劫持:将域名对应的ip改掉5.2.1修改主机…

networkx学习(四)无标度网络

networkx学习(四)无标度网络 无标度网络: 对于随机网络和规则网络,度分布区间非常狭窄,大多数节点都集中在节点度均值< k >的附近,说明节点具有同质性,因此< k >可以被看作是节点度的一个特征标度。而在节点度服从幂律分布的网络中,大多数节点的度都很小,…

从零创建vue示例

从零创建vue搭建node环境创建vue项目vue项目目录介绍搭建node环境 1.下载node(node官网) 安装node一路点next即可 2.windowR—cmd ----测试一下npm -v 以及node -v 显示版本号 3.执行以下命令&#xff08;-g表示全局安装&#xff09; npm install -g vue npm install -g vue…

优化命令 nload详解

优化命令 nload详解 引言 nload用于实时监控linux下网络流量信息&#xff0c;是命令行工具&#xff0c;用来监控网络的吞吐量。它使用两个图表数据来对进出站流量进行可视化。 一、nload安装 nload工具并不是centos自带的&#xff0c;需要我们手动安装下载 直接yum安装查不到…

Kettle 快捷引入数据库

在编写kettle任务时往往需要连接数据库&#xff0c;kettle一共提供了四种数据库配置方式&#xff0c;JDBC、ODBC、OCI、JNDI&#xff0c;我最初直接使用的最为熟悉的JDBC&#xff0c;但是多写几个转换程序就会发现&#xff0c;每新建一个转换任务文件时都需要重新配置数据信息&…

DDOS渗透与攻防(四)之应用层DoS攻击

系列文章 DDOS渗透与攻防(一)之拒绝服务攻击概念介绍 DDOS渗透与攻防(二)之SYN-Flood攻击 DDOS渗透与攻防(三)之socktress攻击 应用层DoS攻击 攻击协议原理介绍说明-应用层DoS 应用服务漏洞 服务代码存在漏洞&#xff0c;遇异常提交数据时程序崩溃应用处理大量并发请求能力…