云数据库 GaussDB(for MySQL)
需求与挑战
在考虑云原生场景下的GaussDB(for MySQL)高可用架构时,主要有如下几个方面的挑战:
1、故障转移:主库发生宕机时,集群能够自动选主并快速转移故障,且转移前后数据一致。
2、敏捷弹性伸缩:基于副本的弹性横向扩展,扩缩容过程不中断业务访问。
3、数据安全性:数据定时冷备/实时热备,以便故障恢复和数据迁移。
4、数据强一致性:用作备份/只读副本的Slave节点数据应该和主节点数据保持实时或半实时一致。
目标与关键考虑点
GaussDB(for MySQL)高可用方案要达到的目标:
1、SLA保障:一年内可接受最高52.56分钟服务不可用(99.99%)。
2、故障转移:主库出现异常时主从切换耗时小于2分钟。
3、弹性扩展:从库理论可无限扩展,扩展从库耗时小于2分钟。
4、冷备恢复:GaussDB(for MySQL)集群出现不可恢复性问题时,从冷备恢复耗时小于10分钟。
除以上目标外,在技术架构设计时还需重点考虑以下关键点:
1、高可用
2、应用接入成本
3、资源占用量
4、可扩展性
5、可维护性
架构设计
该GaussDB(for MySQL)高可用方案使用一主多从的复制结构,主从数据复制采用半同步复制,保证了数据一致性和读写效率,理论上从库可无限扩展。
1、在数据引擎上层添加了仲裁器:使用Raft分布式一致性算法实现自动化选主和故障切换。
2、路由层使用ProxySQL作为SQL请求代理:能够实现读写分离、负载均衡和动态配置探测。
3、监控告警方面:采用PrometheusOperator方案实现整个GaussDB(for MySQL)高可用系统的资源监控告警。
4、运维管控方面:引入Kubernetes Operator的管控模型来实现DBOperator,能够做到声明式配置、集群状态管理以及On Demand(按需创建),可以在GaussDB(for MySQL)控制台上进行GaussDB(for MySQL)的基础运维,数据库管理、表管理、SQL查询,索引变更、配置变更、数据备份&恢复等。
关键技术
状态持久化
容器技术诞生后,大家很快发现用它来封装“无状态应用”(Stateless Application)非常好用,但如果想要用容器运行“有状态应用”,其困难程度就会直线上升,对于GaussDB(for MySQL)等存储型分布式应用,它的多个实例之间往往有依赖关系,主从关系、主备关系,各个实例往往都会在本地磁盘上保存一份数据,当实例被杀掉,即便重建出来,实例与数据之间的对应关系也已经丢失,从而导致应用失败,这种实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,被称为“有状态应用”(Stateful Application)。
Kubernetes集群中使用节点本地存储资源的方式有emptyDir、hostPath、Local PV等几种方式,emptyDir无法持久化数据,hostPath方式需要手动管理卷的生命周期,运维压力大,因此在GaussDB(for MySQL)场景中,出于性能和运维成本考虑需要使用本地存储,Local PV是目前为止唯一的选择,Local PV利用机器上的磁盘来存放业务需要持久化的数据,和远端存储类似,Pod的数据和生命周期是互相独立的,即使业务Pod被删除,数据也不会丢失,和远端存储相比,本地存储可以避免网络IO开销,拥有更高的读写性能,所以分布式文件系统和分布式数据库这类对IO要求很高的应用非常适合本地存储,不同于其他类型的存储,Local PV本地存储强依赖于节点,换言之,在调度Pod的时候还要考虑到这些Local PV对容量和拓扑域的要求,GaussDB(for MySQL)使用的Local PV还需通过nodeAffinity将Pod调度到正确的Node上。
下面展示了GaussDB(for MySQL)使用Local PV的简单配置示例:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: creationTimestamp: null name: localstorage provisioner: kubernetes.io/noprovisioner reclaimPolicy: Delete apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: pv.kubernetes.io/boundbycontroller: "yes" creationTimestamp: null labels: app: slightshiftgaussdb gaussdbnode: "true" spec: accessModes: ReadWriteOnce resources: requests: storage: 1Gi status: {}
FAQs
什么是GaussDB(for MySQL)?
GaussDB(for MySQL)是一种稳定可靠、可弹性扩展和便于管理的关系型数据库服务,它提供备份恢复、监控、容灾、快速扩容、数据传输等全套解决方案,旨在简化数据库运维工作,使用户能更加专注于业务发展。
GaussDB(for MySQL)的主要优势是什么?
GaussDB(for MySQL)具有企业级定制内核TXSQL、高可用和高可靠性、企业级安全、灵活扩展性和智能运维等特点,通过使用腾讯云数据库GaussDB(for MySQL),可以实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠而且稳定可靠,易于运维。