第七节:X-Paxos 三副本与高可用(四)|学习笔记

简介: 快速学习第七节:X-Paxos 三副本与高可用(四)

开发者学堂课程【PolarDB-X 开源系列课程:第七节:X-Paxos 三副本与高可用(四)】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/1032/detail/15168


第七节:X-Paxos 三副本与高可用(四)

六、实验实操

image.png

刚刚的操作其实就是部署 PolarDB-X 集群的内容,没有一步一步讲解

下面这一步搭建跑到 DBX 进行比较慢,可能要几分钟

image.png

主节点挂了后新选主,新的主节点如何保证 Binlog 能和原主节点一致。

不需要和原主节点完全一致,新的 leader 只需要保证节点数据,拥有这个集群上已经达成共识的最新的数据就行。原来老leader 节点数据可能多,但老节点的数据肯定没有提交。

MGR 也是基于 pixels 协议来实现的,但功能实现差别还是有点大,MGR 其实它最早的版本实现了多写,也就是说它三个节点,每个节点都可以承接读写服务,所以这个地方它就必须要解决冲突问题比如说 A 节点它改了一行,B 节点也改了一行,那在这个集群中,这种行集的冲突是要解决的。所以 MGR 的实现是比较复杂的,其实有兴趣可以去用一下社区的 MGR,体验现在是什么情况,例如体验其性能以及稳定性就在去年的时候社区放宽多写的能力,并且也提供了单 leader 模式 pictures 实现的时候,到底是 marty 还是 single?但是对于作为 PolarDB-X 的存储集群来讲,其实不需要在多个节点都能够提供多服务,整个分布数据库的多写是在 CN 层完成的存储节点用 single leader 模式,其实性能是更好的工程上也更简洁工程简洁会使其更稳定。

大家有兴趣可以看一下代码,其实真正在多数等待多数的同步细节方面还是有不少东西的比如说真的要做成平等模式的情况下,做到发一条等一条,那么这个性能是不可接受的实际在真正共同实现的时候,在刚刚 Binlog commit 的那张图里,在 flash 阶段时,其实这个数据以及日志就已经发出去了只是在 follow 那边缓存起来,这其实是一种类似于 TCP 的流射模式

目前此集群已经搭建完成,先登上去看一下是正常的。

image.png

录成功,创建一个 yasir 用的数据库。其实下面阶段用压缩工具起一个 suspends,然后点击 CN,点击 DN,观察 suspends 的流量情况。

压缩之前在集群里面观察发现有两个对等 CN。然后这里是一个集群,并且因为这个环境资源有限,就只建立了一个逻辑 DN它有三个节点,包括两个正常的数据节点,还有一个 logger 节点其实杀 CN 和 DN过程很简单现在向大家展示这里部署出来的 DN 集群,或者说 MYSQU 集群,观察一下其基本情况

首先登录到其中一个节点,登录它的其中一个容器里,登录到它的系统里观察其比普通 MYSQU 多出来的一些协议方面的东西。

image.png

 information_schema 多出来的一些系统表是关于 x-paxos 协议的一些东西,这里先关注其中比较关键的几张表。

Global表可以查看当前节点的角色,这张表只有 leader 角色的节点才有数据,如果角色为 Follow 节点会导致变为空的,所以如果 global 表查出来数据,就说明当前这个节点是 leader。

image.png

个例子可以发现它有两个 Follower:第一个是 follower,第二个 leader自己,第三个也是 follower。这里看不到 logger因为在协议层没有角色,没有应用状态机而已。看 index 是日志里其的标识,一条日志的标识是二元组来形成的,一个是产生这条日志当时的 leader 的任期编号另外一个是 index索引,就是positionIndex 和任期编号都是递增向上,不会变小的。目前可以观察这两个 follower,其实日志全部都已经发过。因为现在还没有起压力,所以看 apply  index 字段,就是在follower 的节点,它的 Binlog 应用的如何了?应用哪个位点了和最新的位点有多少差距从这个表就能看出来这是 leader 节点

这个是leader 节点,另外两个肯定是 follower 节点,到上面看一下,发现这张表虽然是空的,但是可以看自己的信息

image.png

这张 local 表可以看自己的信息,就是自己SOID,还有当前 leader 的任期还有 IP 端口,commit以及最新的 index,还有最新应用的 apply index

这样看 show tables alisql 这几张表,可以用 show create table看每张表是什么含义?大家有兴趣可以自己去看记录了这个节点的状态,协议信息、节点信息以及健康状况等等这些都从系统表里可以看到。

现在退出来,演示一下高可用现在准备起 six months。

Test 已经起来了,接着开始起流量。

这个是 suspends 的客户端。

image.png

这是 suspends 的流量。

image.png

CN有两个对等的,随便删掉一个。被掉流量是有下跌的,现在应该已经起来了。刚才 CN 被删了一次现在起来了,流量又恢复了

因为只有一个 DN,删除之后它会停止服务现在恢复了

刚才看到有一个细节刚才流量是恢复了,但是被干掉的 DN 节点,就是有一个副本还没起来,已经有一个 follower 被选为新 DN 去承接流量了,现在两个节点包括被干掉节点也起来了,演示也就是这个情况,下去之后可以自己试着一下。

下面再次解答一些问题

原来被干掉的 DN 起来后会重新选吗?

被干掉的 leader 重新起来之后,会以 follower 的身份加入到集群里面去。因为他被干掉之后,有一个 follower 的被选为 leader 了,然后原 leader 再起来之后,没必要一定要用原来的新 leader 再作为leader。

除非遇到刚才说的选权重的情况,如果原来被干掉的 leader 权重比较高的话有更大更高的概率被选为 leader。

Logger 节点其实是没有 MYSQL,其没有数据,只有日志,但是它依然有可能被选为 leader,因为有可能日志就是集群中最新的但是其被选为 leader但是它自己又没有 MUSQL 数据,不能提供服务的。所以当 leader 之后,会把自己的 Binlog 日志同步给另外两个 follower 节点,等其他节点把日志接收完毕后,logger 会把自己的 leader 角色自动放出去

权重高有更高概率当选 leader。权重高也不一定要选为leader因为其实如果在生产场景中,如果真的需要一定某个节点,就是要 leader,比如只要不坏就是 leader这里其实可以人工干预人工干预的意思就是,万一权重没有把它选为 leader 的话,可以在集群里用一条命令,指定某个节点成为 leader,这种指定也不破坏协议,只是如果有条件,或者能够当选为新 leader 才能成为 leader

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
Dubbo Java 应用服务中间件
微服务框架(十四)Spring Boot @ControllerAdvice异常处理
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Spring Boot使用@ControllerAdvice进行自定义异常捕捉
|
缓存 网络协议 网络架构
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
|
分布式计算 资源调度 Hadoop
Hadoop【问题记录 02】【hadoop-3.1.3 单机版】ResourceManager无法启动NodeManager启动后过自动关闭 javax/activation/DataSource
【4月更文挑战第2天】Hadoop【问题记录 02】【hadoop-3.1.3 单机版】ResourceManager无法启动NodeManager启动后过自动关闭 javax/activation/DataSource
558 2
|
Rust 编译器 C++
使用 def、cdef、cpdef 创建函数
使用 def、cdef、cpdef 创建函数
358 0
|
设计模式 算法 架构师
【搞懂设计模式】设计模式与面向对象原则
【搞懂设计模式】设计模式与面向对象原则
263 1
|
JavaScript 前端开发
JavaScript中call()与apply()的作用与区别?
JavaScript中call()与apply()的作用与区别?
339 3
|
JavaScript jenkins 持续交付
Jenkins自动化构建Vue项目的实践
在现代的Web开发中,Vue.js已经成为一种非常流行的JavaScript框架。为了更高效地管理和部署Vue.js项目,使用自动化构建工具是至关重要的。Jenkins作为一款强大的持续集成和持续部署(CI/CD)工具,为我们提供了一种便捷的方式来自动化构建Vue.js项目。本文将介绍如何在Jenkins中配置和使用自动化构建Vue.js项目的步骤。
413 1
Jenkins自动化构建Vue项目的实践
|
运维 监控 物联网
快速开发光伏电站数字孪生运维系统(二)
简介: 本文重点介绍如何从零开始构建出光伏电站数字孪生系统的详细步骤。
15620 0
快速开发光伏电站数字孪生运维系统(二)
|
API 定位技术 Python
别被骗了,通过手机号码归属地轻松辨别诈骗电话
通过手机号码归属地,我们可以大致了解一个人的所在地,这对于很多人来说是很有用的。
1723 0
别被骗了,通过手机号码归属地轻松辨别诈骗电话
|
数据采集 机器学习/深度学习 弹性计算
买了一台云服务器到底能干什么?
买了一台云服务器到底能干什么?使用阿里云服务器可以做什么?阿里云百科分享使用阿里云服务器常用的十大使用场景,说是十大场景实际上用途有很多,阿里云百科分享常见的云服务器使用场景,如本地搭建ChatGPT、个人网站或博客、运维测试、学习Linux、跑Python、小程序服务器等等,云服务器吧分享使用阿里云服务器可以做的几件小事
1049 0