当前位置: 首页 > news >正文

PostgreSQL修炼之道之高可用性方案设计(十六)

20 高可用性方案设计(一)

    在一个生产系统中,通常都需要用高可用方案来保证系统的不间断运行。本章将详细介绍如何实现PostgreSQL数据库的高可用方案。

20.1 高可用架构基础

        通常数据库的高可用方案都是让多个数据库服务器协同工作,比如,当一台服务器失效时,另一台服务器可以顶替上去工作,这样就可以不中断对外服务或只中断很短的时间;或者让几台数据库同时提供服务,用户可以访问任意一台数据库,当其中一台出现问题时,访问其他数据库即可。但与为静态页面提供服务的Web服务器不一样的是,数据库中记录了数据,要想在多台数据库中切换,需要进行数据同步,所以数据同步是数据库高可用方案的基础。

20.1.1 各种高可用架构介绍

        从解决数据同步问题的方式来看,高可用方案可以分为以下几种。

  • 共享磁盘的失效切换或磁盘的底层复制方案:使用共享存储,如SAN存储,一台机器失败后,把SAN存储输出的磁盘挂到另一台机器上,然后把磁盘上的文件系统挂起来后完成切换。
  • WAL日志同步或流复制同步的方案:PostgreSQL自身提供了这种方案,通过这个机制,可以搭建主从数据库,当主数据库失败时,把从数据库提升为主库,继续对外提供服务。
  • 基于触发器的同步方案:使用触发器记录数据变化,然后同步到另一台数据库上。
  • 基于语句复制的中间件:用户不直接连接到底层数据库,而是连接到一个中间件,中间件把数据库的变更发送到底层多台数据库上,从而完成数据的同步。
  •         基于改造PostgreSQL源码的方案:修改PostgreSQL源码来截取数据的变更,然后同步到另一台数据库上。

        目前随着PostgreSQL自身复制功能的增强,越来越多的技术方案开始基于PostgreSQL自身的复制方案进行设计,改造PostgreSQL源码的开源软件技术方案已越来越不活跃了,如pgcluster软件已发布的最新版本1.3还是在PostgreSQL8.0之上改造的,pgcluster-II目前还没有开源出来。所以本书不再介绍“基于改造PostgreSQL源码的高可用方案”。至于其他方案在后面都会介绍。

20.1.2 服务的可靠性设计

        主备方式的高可用方案是通过主备之间的数据同步来实现的,数据同步有异步和同步两种方式。同步方式的优点是在故障切换过程中,数据完全不丢失,但缺点也很明显,主要问题有:

  • 影响性能,这是很明显的,一个事务的数据必须写到备库中才能返回。
  • 当主备库之间的网络中断时,要不让同步退化为异步,要不就让主库挂起。当然还有一种方案是让一个主库带两个备库,只要有一个备库是正常的,主库就不需要挂起。这个方案的缺点是增加了成本。

        如果系统可以容忍故障切换时丢失少量的数据,可以使用数据异步同步的方式。该方案需要避免备库落后主库太多,防止故障切换时丢失太多的数据。
        要保证服务中断的时间尽量地少,还需要灵敏的故障检测。但故障检测太灵敏时,误触发的概率也会增加,所以需要选择一个合适的故障检测时间。这个故障检测时间通常在秒级别以上。想要做到秒级别以下是比较困难的。

20.1.3 数据可靠性设计

        系统中最重要的资源就是数据,如何保证数据不丢失,是数据库系统中需要重点考虑的事情。导致数据丢失的原因有很多,如硬件故障或损坏、软件Bug、.人为失误等,所以通常要备份数据,除非这个数据库不重要,丢失了也没有关系。

相关文章:

PostgreSQL修炼之道之高可用性方案设计(十六)

20 高可用性方案设计(一) 在一个生产系统中,通常都需要用高可用方案来保证系统的不间断运行。本章将详细介绍如何实现PostgreSQL数据库的高可用方案。 20.1 高可用架构基础 通常数据库的高可用方案都是让多个数据库服务器协同工作&#xff0…...

Bybit面经

缘起 V2EX有广告内推,看描述还挺不错 贴主5 年半工作经验,有两年大厂工作经历,20 年 11 月来到新加坡分公司开始工作 后来是猎头Jeff找的我 0318 主面 主要一个面试官是后端开发金融背景 某条金融线的负责人;其余是交叉面试。面…...

GORM---创建

目录 模型定义使用Create创建记录一次性创建多条数据批量插入数据时开启事务默认值问题 模型定义 定义一个PersonInfo结构体。 type PersonInfo struct {Id uint64 gorm:"column:id;primary_key;NOT NULL" json:"id"UserName string gorm:"co…...

高级查询 — 分组汇总

关于分组汇总 1.概述 将查询结果按某一列或者多列的值分组。 group by子句 分组后聚合函数将作用于每一个组,即每一组都有一个函数值。 语法 select 字段列表 from 表名 where 筛选条件 group by 分组的字段;select 字段列表 from 表名 group by 分组的字段 hav…...

【多线程】阻塞队列

1. 认识阻塞队列和消息队列 阻塞队列也是一个队列,也是一个特殊的队列,也遵守先进先出的原则,但是带有特殊的功能。 如果阻塞队列为空,执行出队列操作,就会阻塞等待,阻塞到另一个线程往阻塞队列中添加元素(…...

python2升级python3

查看当前版本 [roottest-01 node-v18.16.0]# python -V Python 2.7.5 安装依赖 [roottest-01 node-v18.16.0]# yum install -y gcc gcc-c zlib zlib-devel readline-devel 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base…...

Apache Hudi初探(八)(与spark的结合)--非bulk_insert模式

背景 之前讨论的都是’hoodie.datasource.write.operation’:bulk_insert’的前提下,在这种模式下,是没有json文件的已形成如下的文件: /dt1/.hoodie_partition_metadata /dt1/2ffe3579-6ddb-4c5f-bf03-5c1b5dfce0a0-0_0-41263-0_202305282…...

Java之旅(九)

Java 循环语句 Java 中的循环语句包括 for、while 和 do-while,它们都可以用于实现循环结构。 for 语句用于循环执行一段代码块,直到给定的条件表达式的布尔值为 false。 for 语句的一般格式如下: for (initialization; condition; update…...

6年测试经验之谈,为什么要做自动化测试?

一、自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。 个人认为,只要能服务于测试工作,能够帮助我们提升工作效率的,不管是所谓的自动化工具,还是简单的SQL 脚本、批处理脚本,还是自己编写…...

二分法的边界条件 2517. 礼盒的最大甜蜜度

2517. 礼盒的最大甜蜜度 给你一个正整数数组 price ,其中 price[i] 表示第 i 类糖果的价格,另给你一个正整数 k 。 商店组合 k 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼盒中任意两种糖果 价格 绝对差的最小值。 返回礼盒的 最大 甜蜜度。 记录一…...

java设计模式(十六)命令模式

目录 定义模式结构角色职责代码实现适用场景优缺点 定义 命令模式(Command Pattern) 又叫动作模式或事务模式。指的是将一个请求封装成一个对象,使发出请求的责任和执行请求的责任分割开,然后可以使用不同的请求把客户端参数化&a…...

[运维] iptables限制指定ip访问指定端口和只允许指定ip访问指定端口

iptables限制指定ip访问指定端口 要使用iptables限制特定IP地址访问特定端口&#xff0c;您可以使用以下命令&#xff1a; iptables -A INPUT -p tcp -s <IP地址> --dport <端口号> -j DROP请将 <IP地址> 替换为要限制的IP地址&#xff0c;将 <端口号&g…...

JS学习笔记(3. 流程控制)

1. 分歧 1.1 if条件 if (条件) {...} // 为真则执行&#xff0c;单条语句可省略大括号 if (条件) {...} else {...}// 为真则执行if&#xff0c;否则执行else if (条件1) {...} else if (条件2) {...} else {...} // 条件1为真则&#xff0c;条件2为真则&#xff0c;否则执…...

遥感云大数据在灾害、水体与湿地领域典型案例及GPT模型教程

详情点击链接&#xff1a;遥感云大数据在灾害、水体与湿地领域典型案例及GPT模型教程 一&#xff1a;平台及基础开发平台 GEE平台及典型应用案例&#xff1b; GEE开发环境及常用数据资源&#xff1b; ChatGPT、文心一言等GPT模型 JavaScript基础&#xff1b; GEE遥感云重…...

什么是文件描述符以及重定向的本质和软硬链接(Linux)

目录 1 什么是文件&#xff1f;什么是文件操作&#xff1f;认识系统接口open 什么是文件描述符认识Linux底层进程如何打开的文件映射关系重定向的本质理解软硬链接扩展问题 1 什么是文件&#xff1f;什么是文件操作&#xff1f; 文件 文件内容 文件属性&#xff08;文件属性…...

LVM逻辑卷元数据丢失恢复案例 —— 筑梦之路

Lvm常见的故障主要是pv出现异常&#xff0c;有以下几种情况 一个是pv所在的磁盘发生了lvm的元数据损坏一个是系统无法识别到pv所在的磁盘一个是系统异常&#xff0c;断电等导致重启后盘符发生变化&#xff0c;也就是系统识别的磁盘uuid发生变化&#xff0c;但是wwid还是可以对应…...

Java技术规范概览

Java技术规范 目录概述需求&#xff1a; 设计思路实现思路分析1.Java JSR的部分2.JSR-000373.JSR-0000394.JSR-000337 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a bet…...

【OpenMMLab AI实战营第二期】二十分钟入门OpenMMLab笔记

OpenMMlab 主页&#xff1a;openmmlab.com 开源地址&#xff1a;https://github.com/open-mmlab 学习视频地址&#xff1a;https://www.bilibili.com/video/BV1js4y1i72P/ 概述 开源成为人工智能行业发展引擎 时间轴 theano&#xff1a;2007 Caffe&#xff1a;2013 Ten…...

docker-compose单机容器集群编排

docker-compose dockerfile模板文件可以定义一个独立的应用容器&#xff0c;如果需要多个容器就需要服务编排。服务编排有很多技术方案 docker-compose开源的项目实现对容器集群的快速编排 docker-compose将所管理的容器分为三层&#xff0c;分别为工程&#xff0c;服务&#…...

CentOS7 安装Gitlab

1、安装依赖 sudo yum install -y curl openssh-server ca-certificates tzdata perl libsemanage-devel 2、安装邮件服务工具 sudo yum install -y postfix 3、配置GitLab 软件源镜像 curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash …...

MathType 快捷键实战指南——数学建模效率飙升的秘诀(从入门到精通)

1. 为什么你需要掌握MathType快捷键&#xff1f; 如果你经常需要处理数学公式&#xff0c;肯定遇到过这样的场景&#xff1a;为了输入一个简单的积分符号&#xff0c;不得不从工具栏里翻找半天&#xff1b;调整公式对齐时反复用鼠标拖动&#xff1b;修改矩阵维度时逐个单元格调…...

从JLink驱动安装失败,聊聊老旧Win7系统下嵌入式工具链的“版本锁定”现象

从JLink驱动安装失败看嵌入式工具链的版本锁定困境 当你在Windows 7系统上尝试安装最新版JLink驱动时&#xff0c;那个顽固的黄色感叹号是否曾让你抓狂&#xff1f;这看似简单的驱动问题背后&#xff0c;隐藏着一个困扰嵌入式开发领域多年的系统性难题——工具链的版本锁定现象…...

Cursor AI技能库一键部署指南:提升开发效率的标准化配置方案

1. 项目概述&#xff1a;当AI助手Cursor遇上Everything技能库如果你和我一样&#xff0c;日常开发重度依赖Cursor这款AI驱动的IDE&#xff0c;那你肯定也遇到过这样的场景&#xff1a;想让它帮你写个单元测试&#xff0c;得先花几分钟描述TDD流程&#xff1b;想让它重构一段代码…...

汽车电子安全:从CAN总线到纵深防御的嵌入式安全实战

1. 从“汽车黑客”到“数字堡垒”&#xff1a;一位嵌入式工程师的十年安全观演进十多年前&#xff0c;当EE Times那场关于“汽车黑客是否值得担忧”的在线聊天发起时&#xff0c;我正埋头于一个汽车ECU&#xff08;电子控制单元&#xff09;的底层驱动开发。彼时&#xff0c;“…...

地理空间AI基准测试平台geobench:标准化评估与实战指南

1. 项目概述&#xff1a;一个为地理空间AI量身定制的基准测试平台如果你正在或即将踏入地理空间人工智能这个领域&#xff0c;无论是想评估一个预训练模型在遥感影像上的表现&#xff0c;还是想为自己的新算法找一个公平、全面的“擂台”&#xff0c;你大概率会遇到一个头疼的问…...

【云原生问题集】容器内存监控避坑:90%工程师踩过的“free命令雷区”

你有没有遇到过这种怪事&#xff1f;压测跑得好好的&#xff0c;容器突然被 OOM Kill 了。你赶紧进容器敲了个 free -h&#xff0c;一看内存快吃满了&#xff0c;心想“资源不够&#xff0c;加&#xff01;” 加完内存&#xff0c;跑一会儿又被杀了。坑爹的是&#xff0c;你明明…...

XXMI启动器终极指南:一站式管理原神、星穹铁道等热门游戏模组

XXMI启动器终极指南&#xff1a;一站式管理原神、星穹铁道等热门游戏模组 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 还在为多个游戏模组安装繁琐而烦恼吗&#xff1f;XXMI启…...

基于堆叠自编码器与LSTM的金融时间序列预测框架解析

1. 项目概述&#xff1a;一个基于多层神经网络的股票回报预测框架如果你对量化交易和机器学习结合感兴趣&#xff0c;并且已经厌倦了那些简单的线性回归或者单层LSTM模型&#xff0c;那么这个名为AIAlpha的项目可能会让你眼前一亮。它不是一个“即插即用”的盈利策略&#xff0…...

别再用LoadRunner了!用JMeter+阿里云PTS搞定mPaaS网关全链路压测(附MGSJMeterExt插件实战)

从LoadRunner到JMeterPTS&#xff1a;mPaaS网关压测的高效实战指南 在移动应用性能优化的战场上&#xff0c;压力测试一直是确保系统稳定性的关键环节。传统工具如LoadRunner虽然功能强大&#xff0c;但面对mPaaS这类移动网关架构时&#xff0c;其高昂的授权成本、复杂的适配流…...

从愚人节玩笑到工程实践:四个软硬件结合的创意项目技术拆解

1. 从愚人节玩笑到工程师的创意沙盘每年四月一日&#xff0c;总有些介于荒诞与现实之间的“产品”构想冒出来&#xff0c;在工程师社区里引发一阵会心一笑。但如果你仔细琢磨&#xff0c;会发现这些看似玩笑的点子&#xff0c;往往藏着一丝对技术边界、用户体验乃至市场需求的犀…...