可用性管理 #
集群自身高可用 #
多个计算节点高可用说明:因计算节点是无状态的,发生故障时无需切换,只要一个节点是存活的集群就是可用的。
集群业务高可用 #
集群和业务之间需添加接入层的高可用软件来保障高可用,SphereEx可以配合用户通过解决方案来实现。
同城多中心架构图 #
- 部署架构图
- 切换说明
故障 | RPO | PTO |
---|---|---|
单AZ故障 | 0 | 0 |
多AZ故障 | 0 | 取决于恢复任意AZ的时间 |
同机房架构图 #
- 部署架构图
- 切换说明
故障 | RPO | PTO |
---|---|---|
单AZ故障 | 0 | 0 |
多AZ故障 | 0 | 取决于恢复任意AZ的时间 |
集群组件可用性说明 #
组件名称 | 部署架构 | 后台技术 | 安全性说明 |
---|---|---|---|
监控中心 | 单机 | Prometheus | 出现故障人工处理 |
监控插件 | 单机 | 出现故障人工处理 | |
治理中心 | 集群 | ZooKepper | 出现故障自动切换 |
日志中心 | 集群 | Elasticsearch+logstash | 出现故障自动切换 |
Filebeat | 单机 | 出现故障人工处理 | |
计算节点 | 单机 | Engine-Proxy | 出现故障自动下线,无需切换 |
存储节点 | 用户部署环境 | 用户部署环境 | 用户部署环境 |
ZooKeeper集群不可用(大于半数节点不可用) #
SQL分类 | SQL语言分类 | Engine集群可用性描述 |
---|---|---|
用户SQL | DQL | 可用 |
DML | 可用 | |
DDL | 不可用 | |
DCL | 不支持 | |
TCL | 不支持 | |
DistSQL | RQL | 可用(从节点内存读取数据,重启后不可用) |
RDL | 不可用 | |
RAL | 不可用 | |
RUL | 不可用 |
SQL语言分类 #
SQL(Structure Query Language)语言共分为四大类:数据查询语言DQL,数据操作语言DML,数据定义语言DDL,数据控制语言DCL。另外数据库中事务控制语言称为TCL。
- DQL概述
DQL(Data Query Language)数据查询语言,数据检索语句,用于从表中获取数据。关键字有:select。
Select语句:查询表里的数据。
- DML概述
DML(Data Manipulation Language )数据操作语言,用于操作数据库对象中包含的数据,操作的对象是记录。主要的关键字有:update、delete、insert。DML操作可以手动控制事务的开启、提交和回滚。
Insert语句:向数据表张插入一条记录。
Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录。
Update语句:用于修改已存在表中的记录的内容。
- DDL概述
DDL(Data Definition Language)数据定义语言,用于定义和管理数据库中的所有对象的语言,对数据库中的某些对象(例如database,table)进行管理。操作对象包括数据库本身以及数据库对象,如表、视图等等。主要的关键字有:create、alter、drop、truncate。DDL操作是隐性提交的,不能回滚。
Create语句:可以创建数据库和数据库的一些对象。
Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。
Alter语句:修改数据表定义及属性。
Truncate语句:清空表里的数据。
- DCL概述
DCL(Data Control Language )数据控制语句,操作对象是数据库的权限,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。这些操作使数据更加的安全。主要的关键字有:grant、revoke 。
Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。
Revoke语句:可以废除某用户或某组或所有用户访问权限。
- TCL概述
TCL(Transaction Control Language)事务控制语句,用于控制事务。主要的语句关键字有:commit、rollback、savepoint、set transaction。
Rollback语句:用于事务的回退操作。
Savepoint语句:为回退而存在,个数没有限制,与虚拟机中快照类似。savepoint是事务中的一点。用于取消部分事务,当结束事务时,会自动的删除该事务中所定义的所有保存点。
Commit语句:用于提交事务。
Set transaction语句:设置事务的各种状态,比如只读、读/写、隔离级别。
DistSQL语言分类 #
- RDL(Resource & Rule Definition Language)负责资源和规则的创建、修改和删除;
- RQL(Resource & Rule Query Language)负责资源和规则的查询和展现;
- RAL(Resource & Rule Administration Language)负责 Hint、事务类型切换、分片执行计划查询等管理功能。
- RUL (Resource Utility Language) 为 SphereEx-DBPlusEngine 的工具类语言,提供 SQL 解析、SQL 格式化、执行计划预览等功能。
存储节点高可用感知 #
定义 #
高可用是现代系统的最基本诉求,作为系统基石的数据库,对于高可用的要求也是必不可少的。
在存算分离的分布式数据库体系中,存储节点和计算节点的高可用方案是不同的。
对于有状态的存储节点来说,需要其自身具备数据一致性同步、探活、主节点选举等能力;
对于无状态的计算节点来说,需要感知存储节点的变化的同时,还需要独立架设负载均衡器,并具备服务发现和请求分发的能力。
尽可能的保证 7X24 小时不间断的数据库服务,是 SphereEx-DBPlusEngine 高可用模块的主要设计目标。
SphereEx-DBPlusEngine 不提供数据库高可用的能力,它通过第三方提供的高可用方案感知数据库主从关系的切换。 确切来说,SphereEx-DBPlusEngine 提供数据库发现的能力,自动感知数据库主从关系,并修正计算节点对数据库的连接。
动态读写分离 #
高可用和读写分离一起使用时,读写分离无需配置具体的主库和从库。 高可用的数据源会动态的修正读写分离的主从关系,并正确的疏导读写流量。
- 支持项
- MySQL MGR 单主模式。
- MySQL 主从复制模式。
- OpenGauss 主从复制模式。
- 不支持项
- MySQL MGR 多主模式。
原理介绍 #
SphereEx-DBPlusEngine 提供的高可用方案,允许用户进行二次定制开发及实现扩展,主要分为四个步骤 : 前置检查、动态发现主库、动态发现从库、同步配置。
存储节点状态收集 #
用户可以通过配置 storage_node_heartbeat_interval_milliseconds 参数,配置存储节点状态收集间隔,单位毫秒,如果配置等于0,则关闭存储节点状态收集功能。从计算节点的运行日志中可以查看到存储节点状态收集的日志
通过 DistSQL 配置
set dist variable storage_node_heartbeat_interval_milliseconds = 10000;
通过 yaml 文件配置
props:
storage-node-heartbeat-interval-milliseconds: 10000
使用场景
- 单播路由,过滤掉不可用的数据源。单播路由使用场景:比如广播表查询。
- 静态读写分离读路由,过滤掉不可用的数据源。
集群生态工具可用性说明 #
工具 | 部署架构 | 安全性说明 |
---|---|---|
SphereEx-Boot | 单机 | 出现故障人工处理 |
SphereEx-Console | 单机 | 出现故障人工处理,后台数据库为主从架构,无法自动切换需人工介入 |