高可用性概述
高可用性概述¶
SeaboxMPP数据库系统的高可用可以通过提供容错硬件平台实现,可以通过启用SeaboxMPP数据库高可用特性实现,也可以通过执行定期监控和运维作业来确保整个系统所有组件保持健康来实现。
从软件层面来说,通过启用各个组件的高可用功能,配合集群监控服务来实现了整个SeaboxMPP数据库系统的高可用,确保在绝大多数情况下都能够确保SeaboxMPP数据库系统能够对外提供服务,并确保在任何情况下集群数据不丢失,确保用户的数据安全。
硬件平台的最终故障,可能因为常见的持久运行故障或非预期的运行环境。异常断电会导致组件临时不可用。系统可以通过为可能故障的节点配置冗余备份节点来保证异常出现时仍能够不间断提供服务。在一些情况下,系统冗余的成本高于用户的服务终端容忍度。此时,高可用的目标可以改为确保服务能在预期的时间内恢复。
硬件级别RAID¶
SeaboxMPP数据库部署最佳时间是采用硬件级别的RAID为单盘失败的情况提供高性能的磁盘冗余,避免只采用数据库级别的容错机制。该方式可以在磁盘级别提供低级别的冗余保护。
数据存储Checksum¶
SeaboxMPP数据库采用Checksum校验机制在文件系统上验证从磁盘加载到内存的数据没有被破坏。
SeaboxMPP数据库有两种存储用户数据的方式:Heap表和SColumn表。两种存储模型均采用Checksum机制验证从文件系统读取的数据,默认配置下,二者采用总和校验机制验证错误的方式基本类似。
SeaboxMPP数据库coordinator和executor实例在他们所管理的自有内存中更新页上的数据。当内存页被更新并刷新到磁盘时,会执行总和校验并保存起来。当下次该页数据从磁盘读取时,先进行总和校验,只有成功通过验证的数据才能进入管理内存。如果总和校验失败,就意味着文件系统有损坏等情况发生,此时SeaboxMPP 数据库会生成错误并中断该事务。
默认的总和校验设置能提供最好的保护,可以防止未检测到的磁盘损坏影响到数据库实例及其镜像executor节点。
堆表的总和校验机制在SeaboxMPP数据库采用seabox init
初始化时默认启用。一旦集群初始化完成,就不能改变堆表总和校验机制在该集群上的状态,除非重新初始化系统并重载数据库。
可以通过查看只读服务器配置参数 data_checksums
来查看 堆表的总和校验是否开启。
$ seabox config -s data_checksums
当启动SeaboxMPP数据库集群时,seabox start
工具会检查堆表的总和校验机制在coordinator和所有executor上是启用了还是禁用了。如果有任何异常,集群会启动失败。详情请见seabox start
。
在一些情况下,为了保证数据及时恢复有必要忽略堆表总和校验产生的错误,设置ignore_checksum_failure
系统配置参数为on会使在堆表总和校验失败时只生成一个警告信息,数据页仍然可以被夹在到管理内存中。
如果该页被更新并存到磁盘,损坏的数据会被复制到镜像executor节点。因为该操作会导致数据丢失,所以只有在启用数据恢复时才允许设置ignore_checksum_failure
参数为on。
列存存储表的总和校验可以在使用CREATE TABLE
命令创建表时定义。默认的存储选项在sc_default_storage_options
服务器配置参数中定义。checksum
存储选项默认被启用并且强烈不建议禁用它。
如果想要禁用列存表上的总和校验机制,可以使用以下2种方式:
-
在创建表时,修改
sc_default_storage_options
配置参数包含checksum=false
-
增加
checksum=false
选项到CREATE TABLE
语句的WITH storage_options
语法部分
注意CREATE TABLE
允许为每一个单独的分区表设置包括checksums在内的存储选项。
查看CREATE TABLE
命令参考和sc_default_storage_options
配置文件参考语法和示例。
executor镜像¶
SeaboxMPP数据库将数据存储在多个executor实例中,每一个实例都是SeaboxMPP数据库的一个SeaboxSQL实例,数据依据建表语句中定义的分布策略在executor节点中分布。启用executor镜像时,每个executor实例都由一对primary和mirror组成。镜像executor采用基于预写日志(WAL)流复制的方式保持与主executor的数据一致。详情请见executor镜像概述。
镜像实例在集群初始化时进行配置,考虑到集群中某台主机发生故障的情况,为了使负载尽量均衡,默认使用组分散的策略来分布镜像executor,并将其与主executor分布在不同的主机上。当然,用户也可以按照自身的需求来自定义主executor和镜像executor的分布情况。
coordinator多活¶
在一个高可用集群中,可以配置多个coordinator实例,它们可以部署在不同的主机上,以保证集群不出现单节点故障问题。这些coordinator实例之间是完全平等的,客户端可以连接到任意一个coordinator,并在其上进行业务操作。详情请见coordinator镜像概述.
如果coordinator故障了,集群监控服务时刻监控coordinator的状态,当某个coordinator发生故障时,会自动修复此coordinator,如果在设定的时间(默认为120s)内没有修复故障的coordinator,则集群监控服务会将此coordinator从集群中隔离,在后台由集群自愈服务进行全面的恢复。
可以通过在多个coordinator上配置一个虚拟IP地址,客户端不需要在不同的网址之间切换。如果正在连接的coordinator主机发生故障时,虚拟IP可以漂移到其他的活动coordinator节点上继续提供服务。
SCDCS高可用¶
SCDCS对SeaboxMPP数据库集群提供了全局数据一致性服务,能够让集群中所有组件都看到一致性的数据,而且这个数据可以随着业务要求进行修改。
在SeaboxMPP集群进行部署时,配置多个SCDCS主机(建议至少配置3台主机)来实现SCDCS的高可用,只要SCDCS集群一半以上的主机能够正常运行,就可以确保数据的正确性和完整性。
当有SCDCS服务节点发生故障时,集群监控服务会尝试将其再次启动。
GTM高可用¶
GTM是SeaboxMPP集群中的全局事务管理器,其数据保存在SCDCS中,由SCDCS来确保数据的高可用性。当GTM服务发生故障时,集群监控服务会尝试将其再次启动,如果在设定的时间(默认为30s)内没有启动成功,在将其在其他的节点上启动,并将数据从SCDCS中下载,确保能够正常对外提供服务。
集群监控服务高可用¶
集群监控服务确保了整个SeaboxMPP数据库系统各个组件的高可用性,其自身也需要进行高可用部署。集群监控服务在SeaboxMPP集群中会部署多个节点,节点之间也会提供监控,当某个集群监控服务节点发生故障时,其他监控服务节点会将其再次启动起来。只要集群监控服务有一个节点存活,就可以对整个SeaboxMPP提供监控服务。
双集群¶
可以通过维护两套SeaboxMPP数据库集群,都存储相同的数据来提供额外的冗余。
保持双集群数据同步有两种方法,分别叫做"双ETL"和"备份/恢复"。
双ETL提供一个与主集群数据一致的热备份集群。ETL(抽取,转换和加载)大致的过程为清理数据,转换数据,验证数据和加载数据进入数据仓库。双ETL的方式,以上过程会被执行两次,每个集群一次,每次都需要被验证。这允许在两个集群上进行查询数据操作,还可以提高查询的吞吐量为原来的两倍。应用可以有效的利用两套集群的优势,页可以确保ETL 成功进行并在两套集群上验证通过。
通过备份/恢复的方法来维护一个双集群,可以直接采用在主集群上创建备份,然后恢复到第二个集群上。该方法可能会比双ETL的方式花费更多的时间来同步数据,但是对应用端特定业务逻辑开发的要求几乎没有。双ETL的优势是同步频率上更快,时间间隔更小。