这是因为 Kubernetes 本质上是容器编排的抽象层,具有高度的可配置性和可延展性,用户甚至可以在特定场景下自定义编码 。例如,Kubernetes 上的挂载服务是由众多云供应商实现和提供 。如果服务部署在 Kubernetes 上,应用就能够与 Kubernetes 实现交互,无需与不同类型的特定云服务或基础设施产生额外的交互 。实践证明这种理念在无状态应用程序或微服务的领域非常适用 。正是由于这些成功案例,人们开始思考如何将数据库部署在 Kubernetes 上,进而实现云中立 。
不过这一方案的缺点在于,Kubernetes 天生适用于无状态应用,而非数据库及其它有状态应用,因此管理 Kubernetes 上的数据库或有状态的应用比管理无状态的应用层的难度更大 。为了解决这一问题,可以基于 Kubernetes 的基础机制,使用 StatefulSet 和 Persistent Volume 等方法来实现桥接和适配 。MongoDB、cockachdb、PostgreSQL 等数据库的 operator 就是采用了这种方法 。
3 命题一:如何将单体数据库转换为更接近云原生的分布式数据库?
上述方案已经很常见,那还有其他的方案吗?答案是肯定的 。本节将会演示另一种方法,将完成从『MySQL、Oracle、PostgreSQL』等单体数据库到分布式数据库系统的升级改造,并且以一种更加接近云原生的管理方式,来实现 Kubernetes 上的分布式数据库系统的部署、管理及使用 。
【Kubernetes 环境下的数据库新命题】顾名思义,这个方案主要分为两个步骤:首先将单体数据库转换为分布式数据库,其次将该分布式成功部署在 Kubernetes 环境中并实现有效管理 。
![Kubernetes 环境下的数据库新命题](https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F1202%2F90eef143j00rm96qe004nd200u000lkg00id00d6.jpg&thumbnail=660x2147483647&quality=80&type=jpg)
文章插图
其核心理念在于利用数据库最本真的两大基础能力,即计算能力和存储能力,如上图所示 。任何一款数据库必然具备这样的核心组件、核心能力;传统的 MySQL、PostgreSQL 和其它单节点数据库只是刚好将两个组件部署在一台服务器或容器上而已,而所谓的分布式数据库架构,即是采用存算分离的分布式架构,将存储节点、计算节点进行分布式化,部署在不同服务器节点上,进行内部组件的通讯,完成对上层业务的响应 。
首先,使用数据分片能力打造分布式数据库
作为一款分布式的数据库生态系统,ShardingSphere 提供两个客户端:ShardingSphere-Proxy 和 ShardingSphere-JDBC 。用户可选择使用 ShardingSphere-Proxy 充当 “分布式” MySQL 或 PostgreSQL 的服务器端;或者使用 ShardingSphere-JDBC 作为 JAVA 应用的 Driver 端来完成同样的功能实现 。无论采用哪种方式,用户都无需变更原来访问数据库的方式,这极大地降低了用户的学习曲线和迁移成本 。
如果将单体数据库看做分片节点(即存储节点),将 ShardingSphere-Proxy 或 ShardingSphere-JDBC 看做全局的 Server 入口或代理端(即计算节点),他们的组合就是一种分布式数据库系统 。如下图所示:
![Kubernetes 环境下的数据库新命题](https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F1202%2F690418cej00rm96qf003hd200u000ieg00id00b9.jpg&thumbnail=660x2147483647&quality=80&type=jpg)
文章插图
此外,ShardingSphere 内置有 DistSQL (分布式 SQL),用于管理分片数据库、动态控制分布式数据库系统的工作负载,如 SQL 审计、读写分离、权限等 。
例如,你可以使用 CREATE TABLE t_order () SQL 在 MySQL 中创建一个新表 。在 ShardingSphere-Proxy 中使用 CREATE SHARDING TABLE RULE t-order () 就可以在新升级的分布式数据库系统中创建一个全局分片表 。
其次,在 Kubernetes 层面部署分布式数据库
目前为止,我们已经解决了数据分布式问题,但我们如何将其部署在 Kubernetes 上呢?Shardingsphere-on-cloud 提供了 ShardingSphere-Operator-Chart 和 ShardingSphere-Chart,帮助用户在 Kubernetes 上部署 ShardingSphere-Proxy 和『云上 DBA』ShardingSphere-Operator 集群 。
『ShardingSphere-Chart』这个 Charts 能够帮助用户使用 helm 命令在 Kubernetes 环境中部署 ShardingSphere-Proxy 集群,包括 Proxy 计算节点本身、治理中心、数据库连接驱动程序和 ShardingSphere-Operator 。
作为『云上 DBA』,ShardingSphere-Operator 通过利用预定义的 CustomResourceDefinition,可以声明 ShardingSphere-Proxy 在 Kubernetes 上的部署结构,并持续监控运行状态,还可以基于 CPU 指标进行 Kubernetes 上的 HPA (横向自动扩容),并能够确保 ShardingSphere-Proxy 的高可用性,以维持所需计算服务节点的副本数量,提升整个分布式数据库系统的高可用性 。
推荐阅读
- 神秘的大佛|十多万拍一部功夫片,实现零的突破险遭禁映,创下8000多万票房!
- 不耻下问的故事20字 不耻下问的故事
- 电影院|北京进电影院需48小时核酸 上座率控制在75%以下
- 上有天堂 下有苏杭(苏州排在杭州前面当之无愧)
- 上九天揽月 下五洋捉鳖什么意思 上九天揽月 下五洋捉鳖
- 想知道天蝎座喜不喜欢你,看有没有以下表现,一秒猜透他们的内心
- 文竹摆放也有禁忌?以下3个地方不要放文竹,容易黄叶难养护
- 辅警|有潜力的几种下属
- 天下长河|《天下长河》已经迎来收官,网上也传出了接档剧的消息,让人十分的期待
- 药材是经济效益很高作物,选择以下两种也许给你带来致富