gbase8s hdr(hac)集群通信流程

什么是hdr

HDR是一种将数据从主服务器复制到备服务器的方法
实例级别的复制 (所有启用日志记录功能的数据库)
基于逻辑日志的复制技术,需要传输大量的逻辑日志,数据库需启用日志模式
通过网络持续将数据复制到备节点
HDR 确保从服务器总是与主服务器保持同步
如果主服务器发生故障,那么备用服务器可以接管,直到主服务器恢复运行为止


HDR特点

仅有一个HDR备节点,备节点可读写
高带宽、主备节点距离近
每个节点拥有它自己的存储设备
能承受服务器软硬件故障

HDR 提供了三种同步模式
完全同步,近似同步,异步
主要差异来源于集群交互时的不同处理

通信流程如下

完全同步

近似同步

异步

图片来源于网络

相关线程

主节点
dr_prsend
主要函数 dr_primary_send()
作用
1 向备节点发送DR buffer
2 每次发送成功后等待备节点的ack
3 启动时强制检查点与备机同步


dr_prping
主要函数 dr_primary_ping()
作用
1 向备机发送DR_MSG_PING 消息,每隔DR_TIMEOUT s 一次(有的版本固定1s)
2 接收备节点的响应ack报文

dr_idx_send
索引发送线程
主要函数 dr_idx_send_thread()
作用 
1 索引上加共享锁
2 复制index btree page 到 DR Buffers ,并且发送到备节点
3 等待备节点返回ack 并且释放共享锁

gbase8s 特有的集群通信协议smx 

smxrcv gbase02
主要函数 smx_send_thread()
使用内部smx_pipe结构来管理缓冲队列,用于向对等节点发送数据消息

smxsnd gbase02
主要函数 smx_recv_thread()
使用内部smx_pipe结构来管理缓冲队列,用于从对等节点接收数据消息

smxRecvSnd
主要函数  smx_send_from_recv_thread()

用于从ASF层发送消息,而不会因管道破裂而遇到问题


备节点

dr_secrcv
主要函数 dr_secondary_recv()
作用
1 接收从主节点发送过来的DR Buffers
2 将DR Buffers传递给dr_secapply线程
3 向主节点响应ack

dr_secapply
主要函数 dr_secondary_apply()
作用
1 获取完整的DR Buffers,并将逻辑日志页转发给恢复线程 logrecvr
2 返回一个空的DR Buffers

dr_secping
主要函数 dr_secondary_ping()
作用
检查是否收到 主节点 每隔DR_TIMEOUT s 的DR_MSG_PING 消息

dr_idx_recv
主要函数 dr_idx_recv_thread()
作用
接收主节点发送的index btree page 并且写入到  buffer pool

如下线程主要作用为解析主机发送的逻辑日志然后在备机重做
logrecover
logredo
xchg_*

如下线程同主节点
smxsnd gbase01
smxrcv gbase01
smxRecvSnd

hdr集群监控

onstat -g gri
onstat -g cluster
onstat -g smx


可使用xtrace 追踪数据库集群交互的通信过程

xtrace 是用来追踪在线运行ids的工具,这个工具可以打印代码中已经插针的日志,使用时会先初始化一个环形队列,将用来记录日志信息。

xtrace on
xtrace size 10000
xtrace heavy –c XTF_HDR –f XTF_CALL

将环形队列信息导出到文件
xtrace -t fview > result.txt

关闭
xtrace off

xtrace 输出如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值