gp6.9.0商业版,计划在现有gp集群的基础上,再部署一个同构的gp集群做灾备,做成同城双数据中心的形式。
我在官档上只搜到一小段“ Dual Clusters ”话,并没有具体的解决方案……
不过从官档可以看出有两种方式,一种是同步的ETL,一种是异步的备份恢复。就是不知道使用什么技术来实现, ????
求助各位大神,不管同步还是异步的先来个可行的灾备方案就行!要不工作推进不了 ????
目前,最新的Release版本为GP6版本,并没有产品级别实现容灾功能,所以,目前都是变相的来实现灾备方案。
文档中提到的双集群方案,一个是双ETL方案,另一个是备份恢复方案,两个都是很难落地的。
首先,双ETL方案不能保证两个集群的数据一致性,因为同一份数据也不能保证同一个SQL两次执行的结果完全相同,这取决于多方面的因素,比如,随机数,时间戳,排序问题。甚至,缺省的事务隔离级别本身就不能保证得到可串行化结果(缺省为读已提交隔离级别,GP中未实现可串行化隔离级别,而是退化到可重复读隔离级别),也就是说,除非两个集群都按照一条一条串行的方式执行所有的SQL,否则,理论上来说,只要有并发访问同一份数据,就无法保证结果一致性。
其次是备份恢复,这个方案是可以保证数据的一致性的,毕竟备集群不会主动产生数据,只是将主集群备份的数据进行恢复。该方案的缺点是,其必须建立在备份的基础之上,而且即便gpbackup,目前还不支持只针对增量备份的恢复,如果每天进行一次全量恢复,从效率的角度来说,往往是难以接受的。
所以,到目前为止,几乎鲜有见到落地上述两种方案的案例,双ETL方案的确有用户在使用,需要辅助以定期的数据比对来解决可能出现的数据一致性问题,对于大规模的生产集群来说,进行记录数的比对是比较容易的,但是要进行数据内容的比对是极其困难的,且代价极大,即便是计算类似checksum的方法也耗时很久,不是很实用。
目前有用户在使用的灾备方案是这样的,通过原厂售后专业支持团队提供的脚本命令,可以实现两个集群之间的增量数据同步,这里所谓的增量,类似gpbackup等备份命令的增量概念,即,只要表中数据在上次同步之后,发生过变化,就重新同步该表,可以识别到叶子分区,因为叶子分区其实就是一张普通的物理表。同时,增强了对heap表的变化识别,即,heap表如果没有发生过变化,增量同步将不会重新同步该表。