大数据应用方案1-Postgresql集群

news2025/1/16 20:13:01

1 说明:

在做任何系统之前,选择哪种数据底座做支持很重要,是一栋大厦地基牢不牢固的根本问题,这里用Postgresql基于docker实现了分布式的集群实践,分享之。

2. 基于docker的集群实践

2.1 方案设计

- 两个已安装了docker的Ubuntu22.04虚拟机,其中pg-0为主节点, pg-1为从节点,pgpool为负载均衡节点。

- 使用最新镜像: bitnami/postgresql-repmgr:latest, 当前版本是16.4

HostsIP:Port备注
pg-0192.168.0.130:5432主节点
pg-1192.168.0.131:5432从节点
pgpool192.168.0.130:9999负载平i衡器,连接池

构建成功后如图:

2.2 docker-compose.yml
2.2.1 要点

- 因为Server装的是单独的docker环境, 并非Docker Swarm, 又由于是容器分离的环境,所以Docker的Network Mode需使用host类型 (之前试过映射端口的连接,怎样都加不到集群)

- 将/tmp映射出来,当不正常开关机时,会有错误:"[ERROR] PID file "/tmp/repmgrd.pid" exists and seems to contain a valid PID",可通过删除 该目录下pid文件解决

2.2.2 pg-0
services:
  pg-0:
    image: bitnami/postgresql-repmgr:latest
    container_name: pg-0
    network_mode: host
    ports:
      - 5432
    volumes:
      - /data0/Server/Db/pq-repmgr:/bitnami/postgresql
      - /data0/Server/Temp/pq-repmgr:/tmp
    environment:
      - POSTGRESQL_POSTGRES_PASSWORD=星星
      - POSTGRESQL_USERNAME=postgres
      - POSTGRESQL_PASSWORD=星星
      - POSTGRESQL_DATABASE=postgres
      - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1
      - REPMGR_PASSWORD=星星
      - REPMGR_PRIMARY_HOST=pg-0
      - REPMGR_PRIMARY_PORT=5432
      - REPMGR_PARTNER_NODES=pg-0:5432,pg-1:5432
      - REPMGR_NODE_NAME=pg-0
      - REPMGR_NODE_NETWORK_NAME=pg-0
      - REPMGR_PORT_NUMBER=5432
    restart: always
    extra_hosts:
      - "pg-0:192.168.0.130"
      - "pg-1:192.168.0.131"
2.2.3 pg-1
services:
  pg-1:
    image: bitnami/postgresql-repmgr:latest
    container_name: pg-1
    network_mode: host
    ports:
      - 5432
    volumes:
      - /data0/Server/Db/pq-repmgr:/bitnami/postgresql
      - /data0/Server/Temp/pq-repmgr:/tmp
    environment:
      - POSTGRESQL_POSTGRES_PASSWORD=星星
      - POSTGRESQL_USERNAME=postgres
      - POSTGRESQL_PASSWORD=星星
      - POSTGRESQL_DATABASE=postgres
      - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1
      - REPMGR_PASSWORD=星星
      - REPMGR_PRIMARY_HOST=pg-0
      - REPMGR_PRIMARY_PORT=5432
      - REPMGR_PARTNER_NODES=pg-0:5432,pg-1:5432
      - REPMGR_NODE_NAME=pg-1
      - REPMGR_NODE_NETWORK_NAME=pg-1
      - REPMGR_PORT_NUMBER=5432
    restart: always
    extra_hosts:
      - "pg-0:192.168.0.130"
      - "pg-1:192.168.0.131"
2.2.4 pgpool

加入配置 REPMGR_PRIMARY_HOST=pg-0 (即主服务),则读写都可以了,否则是只读模式, 当通过连接pgpool删减或增加表时,自动同步到pg-0与pg-1

services:
  pgpool:
    image: bitnami/pgpool:latest
    container_name: "pgpool"
    ports:
      - 9999:5432
    environment:
      - PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432
      - PGPOOL_SR_CHECK_USER=repmgr
      - PGPOOL_SR_CHECK_PASSWORD=星星
      - PGPOOL_ENABLE_LDAP=no
      - PGPOOL_POSTGRES_USERNAME=postgres
      - PGPOOL_POSTGRES_PASSWORD=星星
      - PGPOOL_ADMIN_USERNAME=admin
      - PGPOOL_ADMIN_PASSWORD=星星
      - PGPOOL_ENABLE_LOAD_BALANCING=yes
      - PGPOOL_POSTGRES_CUSTOM_USERS=customuser
      - PGPOOL_POSTGRES_CUSTOM_PASSWORDS=星星
      - REPMGR_PRIMARY_HOST=pg-0
    restart: always
    extra_hosts:
      - "pg-0:192.168.0.130"
      - "pg-1:192.168.0.131"
    healthcheck:
      test: ["CMD", "/opt/bitnami/scripts/pgpool/healthcheck.sh"]
      interval: 10s
      timeout: 5s
      retries: 5

2.3 测试

2.3.1 节点断掉后重连,数据自动同步

- 停掉pg-1节点, 然后连接pgpool,新增一个t1表,插入一条数据, 重启pg-1节点,观察相应数据库是否有新增t1表及数据完整性,测试通过。

参考 :

- pgpool 参数: containers/bitnami/pgpool at main · bitnami/containers · GitHub

附录:

命令
repmgr管理
# 查看连接的节点
/opt/bitnami/scripts/postgresql-repmgr/entrypoint.sh repmgr -f /opt/bitnami/repmgr/conf/repmgr.conf cluster show
pq 控制台
# 查看版本
select version();

# 查看插件
select * from pg_extension;

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

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

相关文章

ICLR 2024 Spotlight|SEAL:面向真实场景超分辨率的系统性评估框架

研究背景 现实世界图像超分辨率(Real-World Super-Resolution, Real-SR)技术,作为提升图像清晰度的关键技术,正变得越来越重要。然而,如何准确评估Real-SR方法的性能,一直是该领域的一大挑战。目前的评估…

mig IP核的学习

mig全称是Memory Interface Generator。 参考自视频:MIG IP配置_哔哩哔哩_bilibili DDR基础知识 时钟类型 使用流程 选择DDR3 16是地址线的位宽 能在DDR3的型号MT41K256M16XX-125中看出来。 怎么选择clock period 靠的是 芯片型号中的 -125,然后算出 800MHZ,…

【市场解读】中国智能电车发展趋势

参考文献:汽车之家-《2024中国智能电动车发展趋势洞察报告》 市场趋势 汽车消费 新能源渗透率持续走高,在2024上半年已达到42%,有望在2025冲刺60%。用户对新能源车的关注度也持续增长。 新能源车新品投放加速,其中混动新品投…

QT 10.11

作业&#xff1a;将数据库和图像处理自己实现一遍 数据库操作 源文件 #include "widget.h" #include "ui_widget.h" #include<QMessageBox> #include<QDebug> #include <QTableWidget> Widget::Widget(QWidget *parent) : QWidget(pare…

如何在 idea 中移动类

今天在项目中出现了一个问题&#xff0c;大哥告诉我说&#xff0c;我的类放错包了&#xff0c;但是此时这个类我已经写得差不多了&#xff0c;有很多其他类中都用的是当前包的路径&#xff0c;那么该如何简单的将类移动位置呢&#xff1f; 1.右击你要移动的类&#xff0c;依次…

包含957,174个局部最优解,为优化算法评估提供了新的视角

2024-10-03, 英国诺丁汉大学数学科学学院的Gary R. Mirams教授团队创建了一个基于英国地形的二维优化基准数据集,该数据集包含了经过修改的英国地形数据&#xff0c;并从中识别出了957,174个局部最优解&#xff0c;为优化算法的评估提供了新的视角。 一、研究背景&#xff1a; …

使用 `curl` 命令时遇到 “option --data-raw: is unknown“ 错误的解决方案

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Unity 如何在 iOS 新增键盘 KeyCode 响应事件

1.定位到文件UnityViewKeyboard.mm同如下路径: 2.打开该Objective-C脚本进行编辑,找到关键函数: createKeyboard: - (void)createKeyboard {// only English keyboard layout is supportedNSString* baseLayout "1234567890-qwertyuiop[]asdfghjkl;\\zxcvbnm,./!#$%^&am…

【C语言】深入理解指针(二)(下)

本篇博客将讲解以下知识&#xff1a; 1、二级指针 2、指针数组 3、指针数组模拟二维数组 1、二级指针 指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那指针变量的地址存放在哪里&#xff1f;二级指针 如何理解二级指针&#xff1f; 以上述代码为例&#xff1a; i…

多点无人机 组网系统技术详解

多点无人机组网系统技术&#xff0c;作为一种先进的多无人机协同作业技术&#xff0c;其核心在于通过先进的通信技术将多架无人机连接成一个高度协同的空中网络&#xff0c;以实现信息共享、任务分配、协同作业等功能。以下是对该技术的详细解析&#xff1a; 一、技术概述 多…

基于SSM的朋辈帮扶系统

文未可获取一份本项目的java源码和数据库参考。 一、本课题研究意义 随着市场经济发展的不断深入&#xff0c;高校学生面临着新的问题和挑战。在全球一体化、价值观多元化、信息网络化的大背景下&#xff0c;越来越多的学生承受着来自社会、家庭与自身方方面面的压力&#xf…

在word/wps中优雅的插入代码

​​​​​​​使用的网址如下&#xff1a;在线美化代码并支持一键黏贴到文档中 使用方式&#xff1a; 1、登录到在线网页中&#xff0c;输入需要格式化的语言&#xff0c;例如JSON 2、点击高亮代码&#xff0c;即可生成格式化后的JSON代码 3、将生成的代码直接复制到wps文档…

软件功能测试重点和流程有哪些?专业软件测评服务公司推荐

软件功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。功能测试也叫黑盒测试或数据驱动测试&#xff0c;只需考虑需要测试的各个功能&#xff0c;不需要考虑整个软件的内部结构及代码.一般从软…

uniapp__微信小程序使用秋云ucharts折线图双轴

1、子组件 <template><view class"charts-box"><qiun-data-charts type"line":opts"computedOpts":chartData"chartData"/></view> </template><script> export default {props: {chartData: {t…

什么充电宝牌子质量好又靠谱?2024年热销款充电宝型号推荐

在快节奏的现代生活中&#xff0c;充电宝已成为我们随身携带的必需品&#xff0c;为智能手机、平板电脑等电子设备提供随时随地的电力支持。然而&#xff0c;面对市场上琳琅满目的充电宝品牌和型号&#xff0c;如何挑选一款既质量好又靠谱的产品&#xff0c;成为了许多消费者关…

六西格玛黑带项目:TBX-02无人机飞行稳定性提升——张驰咨询

一、项目背景与问题定义 TBX-02是该公司最新发布的消费级无人机&#xff0c;面向摄影爱好者和户外探险者。产品上市后&#xff0c;通过客户反馈和实际测试数据发现&#xff0c;该无人机在复杂飞行环境中&#xff0c;如强风或快速移动时&#xff0c;存在明显的飞行抖动和稳定性…

多线程会在一个事务里面吗?

目录 多线程会在一个事务里面吗&#xff1f; 多线程、数据库事务以及数据库连接之间的关系 Spring的事务管理​​​​​​​ 声明式事务Transactional的实现原理 声明式事务Transactional的失效场景 Transactional注解的方法不是public为什么会失效 Spring AOP的代理机制…

STM32CUBEIDE FreeRTOS操作教程(六):recursive mutexes递归互斥信号量

STM32CUBEIDE FreeRTOS操作教程&#xff08;六&#xff09;&#xff1a;recursive mutexes互斥信号量 STM32CUBE开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件&#xff0c;不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开…

【devops】x-ui 实现一键安装 x-ray 打造高速国际冲浪 | xray管理平台

一、部署X-UI篇 1、Github 地址&说明 github地址如下&#xff1a; https://github.com/FranzKafkaYu/x-ui?tabreadme-ov-file 2、一键部署 2.1、更新并安装curl #Ubuntu、Deibian系统 apt update && apt upgrade -y apt install curl -y #CentOS7 系统 yum…

深度解读企业数字化转型中的关键问题与解决方案

1. 数字优先的力量&#xff1a;如何通过文化变革推动企业迈向数字化未来 数字化转型的核心驱动力 数字优先策略是现代企业应对数字化转型挑战的关键&#xff0c;但其复杂性远超一般技术策略。企业通过将数字优先文化嵌入业务模型&#xff0c;可以在跨部门合作、运营优化和创新…