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


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

    一、实时主备

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 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
    读写分离功能支持,由驱动实现支持,由驱动实现
    故障恢复主机故障后可作为备机加入集群主机故障后无法重加入集群,只能踢掉或者重新搭建主机
  • 相关阅读:
    【OBS】circlebuf
    Stable Diffusion的模型选择,采样器选择,关键词
    酒店客房管理系统|基于Springboot的酒店客房管理系统设计与实现(源码+数据库+文档)
    原神私服搭建服务器配置该如何选择
    jetson nano——ubuntu换源
    SpringBoot-Dubbo中的Customer怎么获取了注册中心的服务呢?
    软件测试和软件开发之间的关系及模型
    One class learning(SVDD)
    kerberos 客户端windows系统版本
    SharedPreferences()存储
  • 原文地址:https://blog.csdn.net/qq_44619675/article/details/126664126