目录
1. 前言
MPPDB集群服务组件主要分为内核端和集群管理端,内核端主要包括GTM组件,CN组件和DN组件;集群管理端主要包括CMServer组件和CMagent组件。
2. 内核端高可用设计
2.1 GTM高可用
在MPPDB中,GTM在集群中只有一个实例,如果故障后,集群将无法使用,因此需要给GTM配置一个备机,主机故障后,备机可以接管服务。
GTM主要负责分发xid和snapshot,由于xid要全局唯一,因此需要持久化到磁盘上,凡是需要持久化磁盘的都需要有备份,那么GTM主机在每将一次xid值写入到gtm.control文件中,就会和备机同步一次,备机写完后,主机再写。
在同步过程中,主机业务线程只需给GTM备机发送一个消息包,GTM备机接收到消息后创建一个服务线程,并将事务xid写入本地文件,回复消息,主机的一次同步便完成。GTM在内存中xid每加2000时会向备机同步一次。
如果GTM主机永久故障,GTM备机升主后,只需要重新初始化一个GTM实例出来然后和主机同步xid即可
2.2 CN高可用
通常一个集群中会部署多个CN,多个CN互为主备。如果一个CN故障,那么客户端可以使用其他CN。
由于CN只存储元信息数据(即每张用户表数据分布在哪几个DN),因此只有DDL操作时才设计到CN存储数据,DML时CN并不需要写数据。在DDL操作时,接受业务的CN会把该SQL发送到所有其他CN与所有DN,通过两阶段提交来保证各个CN的数据一致性。这里也有一个设计缺陷,即当一个CN故障时,那么集群便无法操作DDL,此时只能手动从集群中删除该CN才能使用。
如果集群中一个CN永久故障,那么需要重新初始化一个CN,然后使用gs_dump从另一个CN到处元数据再导入到该新CN上。
2.3 DN高可用
由于所有用户表数据通过sharding的方式存储在各个DN主上,各个DN数据完全没有分叉,如果主机故障后,那么数据将丢失,并无法提供服务,因此DN的高可用尤为重要,必须给DN主备配置一个或多个备机。
MPPDB中的D