达梦DM8读写分离环境搭建及原理
达梦DM8读写分离环境搭建及原理
DM8读写分离是建立在主备基础上,搭建过程大致相同,区别如下:
1、主备的dmarch.ini不同。
读写分离是: ARCH_TYPE = TIMELY #即时归档类型
主备是: ARCH_TYPE = REALTIME #实时归档类型
2、客户端连接集群配置稍有不同。
客户端主机上需要配置 dm_svc.conf 文件读写分离比主备添加:
RW_SEPARATE=(1) #启用读写分离
RW_PERCENT=(25) #读事务分发到主库的比例
3、读写分离原理
实现读写分离集群的基本思路是:利用备库提供只读服务、无法修改数据的特性,优先将所有操作发送到备库执行,一旦备库执行报错,则发送到主库重新执行。通过备库“试错”这么一个步骤,自然地将只读操作分流到备库执行。并且,备库“试错”由接口层自动完成,对应用透明。
读写分离集群数据库连接创建流程:
1. 用户发起数据库连接请求。
2. 接口(JDBC、DPI 等)根据服务名配置(在 dm_svc.conf 中进行配置)登录主库。
3. 主库挑选一个有效即时备库的 IP/Port 返回给接口。
4. 接口根据返回的备库 IP 和 Port 信息,向备库发起一个连接请求。
5. 备库返回连接成功信息。
6. 接口响应用户数据库连接创建成功接口在备库上创建的连接是读写分离集群自动创建的;对用户而言,就是在主库上创建了一个数据库连接。下图以配置了两个备库的读写集群为例,说明了读写分离集群的连接创建流程。
4、DM数据守护(data watch)的实现原理
原理:
将主库(生产库)产生的redo日志传输到备库,备库接收并重新应用redo日志,从而实现备库与主库的数据同步。
DM数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为redo日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
DM数据守护系统结构:
主库、备库:
redo日志、redo日志传输、redo日志重演、守护进程(dmwatcher)、监视器(dmmonitor)
进程介绍:
守护进程(dmwatcher)
是DM数据守护系统不可或缺的核心部件,是数据库实例和监视器之间信息流转的桥梁。数据库实例向本地守护进程发送信息,接收本地守护进程的消息和命令;
监视器(dmmonitor)
接收守护进程的消息,并向守护进程发送命令;
数据库实例与监视器之间没有直接的消息交互;
守护进程解析并执行监视器发起的各种命令switchover/takeover/open database等,并在必要时通知数据库实例执行相应的操作。
本地归档
redo日志写入日志文件后,由归档线程再写入本地服务器中的归档日志
①实时归档(realtime)
实时归档只有在数据模式为primary主库才生效,是实现MPP和实时主备的基础。在redo日志写入联机日志文件之前,在通过mal系统将redo_buf发送到备库。
②即时归档(timely)
在redo日志写入联机日志文件之后,再通过mal系统将redo_buf发送到备库,及时归档时读写分离实现的基础,一个主库最多配8个即时备库。
③远程归档
redo日志写入日志文件后,有归档线程再写入远程服务器中的归档日志
④异步归档(async)
redo日志写入日志文件后,定时或者定期启动归档redo日志进行发送,设置定时归档必须确保至少有一个本地归档。
OGUID(O:dbid)
数据守护唯一标识码
select oguid from v$instance;
mal系统
mal系统是基于TCP协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。DM通过mal系统实现redo日志传输,以及其他一些实例间的消息通讯。
达梦社区地址:https://eco.dameng.com