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

DM8实时主备与读写分离的区别

DM8实时主备与读写分离区别

文章目录

    • DM8实时主备与读写分离区别
      • 一、实时主备
        • 1、概述
        • 2、归档流程
      • 二、读写分离集群
        • 1、概述
        • 2、归档流程
        • 3、实现原理
        • 4、读写分离功能的实现
        • 5、系统事务特征
      • 三、实时主备与读写分离区别
        • 1、归档
          • (1)本地归档
          • (2)远程归档
          • (3)实时归档
          • (4)即时归档
          • (5)异步归档
          • (6)归档状态
        • 2、读写分离与实时主备比较

一、实时主备

1、概述

实时主备由一个主库以及一个或者多个配置了实时 (Realtime) 归档的备库组成。通过部署实时主备系统,可以及时检测并处理各种硬件故障、数据库实例异常,确保持续提供数据库服务。

实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。主库修改数据产生的 REDO 日志,通过实时归档机制,在写入联机日志文件之前发送到备库,实时备库通过重演REDO日志与主库保持数据同步。当主库出现故障时,备库在将所REDO日志重演结束后,就可以切换为主库对外提供数据库服务。

  • 联机归档日志 | REDO日志

2、归档流程

主库生成Redo 日志,当触发日志写文件操作后,日志线程先将 日志包RLOG_PKG 通过MAL系统发送到备库,备库接收后进行合法性校验(包括日志是否连续、备库状态是否 Open 等),不合法则返回错误信息,合法则作为 KEEP_PKG 保留在内存中,原有KEEP_PKG 的Redo 日志加入 Apply 任务队列进行 Redo 日志重演,并响应主库日志接收成功。(实时归档)

二、读写分离集群

1、概述

读写分离集群由一个主库以及一个或者多个配置了即时 (Timely) 归档或实时 (Realtime) 归档的备库组成。

其主要目标是在保障数据库可用性基础上,实现读、写操作的自动分离,进一步提升数据库的业务支撑能力。读写分离集群通过配置事务一致模式保证主、备库数据一致性,并配合 DM 数据库管理系统的各种接口(JDBC、DPI 等),将只读操作自动分流到备库,有效降低主库的负载,提升系统吞吐量。

2、归档流程

  • 读写分离集群可以配置为即时归档,也可以配置为实时归档
  • 非必要情况不要配置即时归档的读写分离,要用实时归档的读写分离
  1. 主库先将日志写入本地联机 Redo 日志文件中,再发送 RLOG_PKG 到备库。

  2. 备库日志重演时机有两种选择:

    (1)事务一致模式——要求备库在重演 Redo 日志完成后再响应主库。

    (2)高性能模式——与实时归档一样,收到 Redo 日志后,马上响应主库。

即时归档的同步机制可以保证备库的 Redo 日志不会比主库的 Redo 日志多,因此即时备库不需要KEEP_PKG,收到 RLOG_PKG 直接加入到 Apply 任务系统, 启动 Redo 日志重演。

3、实现原理

读写分离的实现,只能连接主机

实现读写分离集群的基本思路是:利用备库提供只读服务、无法修改数据的特性,优先将所有操作发送到备库执行,一旦备库执行报错, 则发送到主库重新执行。通过备库“试错”这么一个步骤,自然地将只读操作分流到备库执行。并且,备库“试错” 由接口层自动完成,对应用透明。

4、读写分离功能的实现

配置dm_svc.conf

TIME_ZONE=(+8:00)
LANGUAGE=(en)
DM_RWW=(192.168.18.25:25236,192.168.18.26:25236,192.168.18.27:25236)
[DM_RWW]
LOGIN_MODE=(1)
RW_SEPARATE=(1)
RW_PERCENT=(25)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)
  • LOGIN_MODE = (1),只连接主库
  • RW_SEPARATE = (1),启用读写分离功能
  • RW_PERCENT = (25),分发到主库的事务占主备库总事务的百分比
  • SWITCH_TIME=(300),检测到数据库实例故障时,接口在服务器之间切换的次数;超过设置次数没有连接到有效数据库时,断开连接并报错。
  • SWITCH_INTERVAL=(1000),表示在服务器之间切换的时间间隔,单位为毫秒。

5、系统事务特征

  • 纯读操作的事务全部在备机执行。

  • 纯写操作的事务全部在主机执行。

  • 既有读又有写的事务,从写事务开始全部在主机执行。此类事务遵循以下原则:

    • 读操作尽量放在写操作之前,利用备机的可读特点来分摊系统压力。

    • 在业务允许条件下,尽可能拆分为纯读和纯写事务。

    • 写操作后尽量不要有读操作,避免压力集中在主机,影响性能

三、实时主备与读写分离区别

主要区别点

  • 场景侧重点不同
  • 归档流程

1、归档

DM 数据库的归档可以分为 5 类:本地归档、远程归档、 实时归档、即时归档和异步归档。

  • 本地归档和远程归档日志的内容与写入时机与数据库模式相关
  • 主库 Redo 日志写入联机日志文件后,再进行本地归档和远程归档
  • 备库收到主库产生Redo 日志后,直接进行本地归档和远程归档,同时启动Redo日志重演
(1)本地归档

Redo 日志本地归档(Local),就是将 Redo 日志写入到本地归档日志文件的过程。

(2)远程归档

远程归档专门用于 DMDSC 环境中。

远程归档(REMOTE ARCHIVE), 顾名思义就是将归档目录配置在远程节点上。 远程归档采用双向配置的方式,双向配置远程归档就是两个节点将自己的远程归档相互配置在对方机器上。集群中所有的节点,都拥有一套包括所有节点的,完整的归档日志件。

(3)实时归档

与本地归档写入保存在磁盘中的日志文件不同,实时归档(Realtime)将主库产生的Redo 日志通过 MAL 系统传递到备库。

实时归档只在主库生效

实时归档执行流程:主库在 Redo 日志(RLOG_PKG)写入联机日志文件前,将 Redo日志发送到备库,备库收到 Redo 日志(RLOG_PKG)后标记为 KEEP_PKG, 将原KEEP_PKG加入日志重演任务系统, 并马上响应主库, 不需要等待 Redo 日志重演结束后再响应主库。主库收到备库的响应消息,确认备库已经收到 Redo 日志后,再将Redo 日志写入联机日志文件中。

(4)即时归档

即时归档与实时归档的主要区别是 Redo 日志的发送时机不同

根据备库重演Redo日志和响应主库时机的不同,即时归档分为两种模式:事务一致模式和高性能模式。即时归档模式根据配置文件dmarch.ini中的ARCH_WAIT_APPLY配置项(默认值为1)来确定,1表示事务一致模式,0表示高性能模式。

  • 事务一致模式——主库事务提交触发Redo日志刷盘和即时归档,备库收到主库发送的Redo日志,并重演完成后再响应主库。主库收到备库响应消息后,再响应用户的提交请求。事务一致模式下,同一个事务的SELECT语句无论是在主库执行,还是在备库执行,查询结果都满足READ COMMIT隔离级要求。
  • 高性能模式——与实时归档一样,备库收到主库发送的Redo日志后,马上响应主库,再启动日志重演。高性能模式下,备库与主库的数据同步存在一定延时(一般情况下延迟时间非常短暂,用户几乎感觉不到),不能严格保证事务一致性。

事务一致模式下,主备库之间严格维护事务一致性,但主库要等备库Redo日志重演完成后,再响应用户的提交请求,事务提交时间会变长,存在一定的性能损失。高性能模式则通过牺牲事务一致性获得更高的性能和提升系统的吞吐量。用户应该根据实际情况,选择合适的即时归档模式。

(5)异步归档

异步归档(Async)由主、备库上配置的定时器触发,根据异步备库的 KEEP LSN 信息,扫描本地归档目录获取 Redo 日志,并通过 MAL 系统将 Redo 日志发送到异步备库。

(6)归档状态
  1. Valid 归档有效,正常执行各种数据库归档操作。
  2. Invalid 归档无效,主数据库不发送联机 Redo 日志到备数据库。
  • 本地归档、实时归档和即时归档均包含两种状态: Valid 和 Invalid。
  • 异步归档只有一种归档状态: Valid

2、读写分离与实时主备比较

主要区别:

  • 适用场景不同

    ​ 实时主备—— 备份容灾

    ​ 读写分离—— 负载均衡

  • 归档方式不同

    ​ 实时主备—— realtime

    ​ 读写分离—— timely

差别实时主备读写分离
支持部署1主8备一致
硬件要求独立的存储服器一致
应用场景双机热备,多种读写分离场景数据一致模式且故障手工切换
部署差异dmarch.ini中ARCH_TYPE=REALTIMEdmarch.ini中ARCH_TYPE=TIMELY
读写分离功能支持,由驱动实现支持,由驱动实现
故障恢复主机故障后可作为备机加入集群主机故障后无法重加入集群,只能踢掉或者重新搭建主机

相关文章:

  • 15种常用的数据分析模型,搭配BI工具更高效,赶紧收藏起来
  • IDEA的DEUG模式技巧和使用
  • PostgreSQL企业应用——Rust三剑客(pgx)
  • C++ 笔记
  • HBuilder包装iOS APP上App Store的详细过程
  • 1.4_9 Axure RP 9 for mac 高保真原型图 - 案例8 【动态面板】浏览、翻页、回弹
  • 火狐浏览器可以使用代理吗?火狐浏览器如何搭配易路代理使用?
  • nginx配置新的SSL证书后浏览器仍显示之前的旧SSL证书
  • JavaNIO——单线程(笔记)
  • SpringBoot工程中Dubbo多协议使用方式
  • 阿里首次开源 Java 10万字八股文,Github仅一天星标就超60K
  • 凯文凯利10条人生建议,送给迷茫的你!(上)
  • The DAO事件始末
  • 工业智能网关BL110应用之六: 支持PLC,Modbus,BACnet,电表等协议列表
  • Jackson公司蛋白质印迹指南丨样品制备
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 〔开发系列〕一次关于小程序开发的深度总结
  • ES6核心特性
  • HTTP请求重发
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • MySQL的数据类型
  • php的插入排序,通过双层for循环
  • XForms - 更强大的Form
  • yii2中session跨域名的问题
  • 对超线程几个不同角度的解释
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 面试总结JavaScript篇
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 一个JAVA程序员成长之路分享
  • elasticsearch-head插件安装
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $(function(){})与(function($){....})(jQuery)的区别
  • (2015)JS ES6 必知的十个 特性
  • (23)Linux的软硬连接
  • (3)llvm ir转换过程
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (二开)Flink 修改源码拓展 SQL 语法
  • (五)关系数据库标准语言SQL
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .Net多线程总结
  • .net分布式压力测试工具(Beetle.DT)
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @在php中起什么作用?
  • [ Linux ] Linux信号概述 信号的产生
  • [2]十道算法题【Java实现】
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [30期] 我的学习方法
  • [AAuto]给百宝箱增加娱乐功能
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [Codeforces1137D]Cooperative Game