跟我学:用PolarDB-X搭建一个高可用系统
摘要:本文整理自阿里云数据库高级技术专家吴学强,在PolarDB-X动手实践系列的分享。
本篇内容主要分为四个部分:
1. 动手实践系列介绍
2. 环境准备
3. 演示内容
4. 用户问答
一、动手实践系列介绍
PolarDB-X采用Shared-nothing与存储分离计算架构进行设计,系统由4个核心组件组成。PolarDB-X社区版围绕开源PolarDB-X,对应商业2.0版本。PolarDB-X社区版主要面向应用开发者、架构师、DBA等。
PolarDB-X是一款基于云架构理念,同时支持在线事务处理与在线分析处理,融合型分布式数据库产品。专注解决海量数据存储、超高并发吞吐、大表瓶颈以及复杂计算效率等数据库瓶颈难题,助力企业加速完成业务数字化转型。
二、环境准备
在搭建环境之前,用户需要确定系统是CentOS 7或8;macOS;Ubuntu在18以上;Windows 10以上。相关配置需要大于等于4G。搭建环境需要的软件有:Docker&K8S;PolarDB-X 2.1.0;PolarDB-X Operator 1.2.1;PolarDB-X Monitor 1.2.1。
PolarDB-X采用Shared-nothing与存储计算分离架构进行设计,系统由4个核心组件组成。主要包括:计算节点、存储节点、元数据服务以及日志节点。
计算节点是系统的入口,采用无状态设计,包括SQL解析器、优化器、执行器等模块。
存储节点负责数据的持久化,基于多数派Paxos协议提供数据高可靠、强一致保障,同时通过MVCC维护分布式事务可见性。
元数据服务负责维护全局强一致的Table/Schema,Statistics等系统Meta信息,维护账号、权限等安全信息,同时提供全局授时服务(即TSO)。
日志节点提供完全兼容MySQL Binlog格式和协议的增量订阅能力,提供兼容MySQL Replication协议的主从复制能力。
三、演示内容
接下来,在Sysbench OLTP场景,模拟一个应用。在Sysbench OLTP进行负载,之后数据进入PolarDB-X分布式数据库。然后,通过Prometheus和Grafana相互配合,搭建一个监控链路。
目前,新版本已经将Prometheus和Grafana内置到产品里。用户可以用打包的组件,对PolarDB-Xdx集群进行监控。
PolarDB-X的集群由一个cms,两个cn、两个dn和两个cdc组成的。首先,做一个端口转发,将K8S里的PolarDB-X的端口转发到本地。
为了跟MySQL的version兼容,把MySQL版本作为返回。在实例里面已经有一个库了,叫做sysbench_test。
接下来,打开第三个cd class-8,把测试数据灌进去。启动灌数据的脚本,用第三方打包的sysbench_test的镜像进行操作。它会建一张表,在里面写入56万的数据。它是一个K8S的任务,完成之后,开始检查数据情况。
将官方的服务端口,从K8S集群映射到ECS本机.然后,开启另一个窗口,运行监控组件。再做一次端口转发,将ECS的Grafana的3000端口,转发到操作电脑。这样就可以在操作电脑的浏览器里,看到监控页面。
接下来,启动业务流量。启动之后,应用系统成功运行,它是用css、sysbench_test来模拟业务流量。用PB作为数据库。由于系统是分布式的,所以它有高可用的能力。部分节点宕机之后,能够自动恢复,应用可以不受影响继续的运行。
当前的QPS在2400左右。sysbench_test提供了压缩镜像,也可以将它log透出,从而看到更加及时的数据。
接下来,将一个cn删除,观察QPS的变化情况。首先,在两个cn中,随便删除一个。系统会立即开始重建,然后监控整个变化过程。用户可以在K8S的结果里,观察到cn的状态。
初期,一个cn在跑,另一个在重建。过了一会儿,第二个cn建好,系统恢复到两个cn的状况。在QPS中可以看到,经过一点波动之后,系统快速恢复到了正常状态。
通过QPS可以看到,在16:20:34秒出现下跌,在16:21分基本恢复正常。整个过程,只有不到半分钟的时间。如果系统不是高可用,用户在半夜收到报警电话,需要起床进行故障响应。如果系统是高可用的,对于组件被删除,这个系统会自动恢复。
接下来,删除一个dn节点。dn主要负责存储数据。系统当中虽然有两个dn,但每个dn对应三个port,所以一共有六个port。有一个dn是正常的,另一个dn还在恢复。QPS从4500跌到了1300,然后开始爬升,最低值是1300。系统在恢复的过程中,可以看到QPS在逐步爬升。
接下来,删除一个cdc。删除cdc之前,QPS保持在4000左右。因为cdc在本次模拟中它不参与业务。所以QPS跟cdc组件没有关系,理论上不会出现波动。当cdc也变成了1/2,即一个正常,一个不正常。QPS没有明显变化,一直在4000左右进行活动。
接下来,删除gms中的一个port。gms是一个特殊角色的dn,它也是一个三副本,高可用的形态。删除之后,从QPS的数据来看,系统依然能够获取到4000上下的QPS,数据库依然正常对外提供服务。
kubernetes operator是封装、部署和管理Kubernetes应用的方法,可以扩展kubernetes API的功能,创建、配置和管理复杂应用的实例。
它基于基本Kubernetes资源和控制器概念构建,但又涵盖了特定于域或应用的知识,用于实现其所管理软件的整个生命周期的自动化。
PolarDB-X集群是K8S的一个集群。它有四个组件组成.其中cn和cdc是标准的资源。gms和dn是定制化资源。因为cn和cdc它是无状态的,所以恢复相对较快速,也容易处理的。gms和dn是有状态的,恢复相对较慢。
在最新PolarDB-X开源版本中,开源了Paxos的能力。PolarDB-X面向用户的使用,可以完全和单机的事务模型保持一致。Paxos将dn从原来的单节点变成了现在的三副本、高可用模式。
用户可以把一个dn看成三个MySQL进程。cn会将所有读写的流量,打在leader节点。通过日志,Paxos和强一致同步的协议,将变更日志同步到其他两个节点,也就是这里的Follower和logger。从而保证系统的高可用。
四、用户问答
问:生产环境会不会出现节点缺失的问题?
答:刚才出现的问题,发生在获取镜像的过程。如果是生产环境,用户通常会选择一共靠谱的端口容器的镜像。为了避免这种情况,可以在生产环境里,做一个自己的镜像仓库。
问:可以对比各种类似的产品吗?他们各有什么特色?
答:每个产品都有自己的特点,尤其是分布式数据库。国内有好几家友商在做。如果进行比较客观的对比,由第三方会更合适。阿里也会在后续的文章中,把相关产品的能力、性能等参数发布出来,大家可以在同样的环境下,进行对比。
问:是不是可以理解为像MySQL一样使用PolarDB-X?但它具备了灵活的计算以及存储的扩展能力。
答:是的。简单来说,在应用的视角,可以这么理解。
问:PolarDB-X完全兼容了阿里SQL限流、绑定、索引的特性吗?
答:在应用的视角,PolarDB-X提供原生的限流的能力。应用跟cn直接交互,所以需要在cn侧,重新实现限流能力。在绑定、索引方面,PolarDB-X会提供跟阿里SQL不一样的语法。