十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇文章为大家展示了如何理解配置数据库高可用性中的SEGMENT镜像,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了陇川免费建站欢迎大家使用!
前面介绍过了GREENPLUM数据库的备份和恢复。这部分主要介绍GREENPLUM的高可用性配置。GREENPLUM的高可用性是通过master和segment的镜像来实现的。这种镜像是基于服务器级别的镜像。因此,不仅可以提供存储级别的保护,还可以防止其它PC服务器硬件的损坏。
segment级别的镜像是通过把primary segment对应的mirror segment放置到不同的物理主机实现的。正常情况下,只有primary segment的instance处于工作状态,所有primary segment上的变化通过文件块的复制技术拷贝到mirror segment。因此,存放mirror segment的主机上只有复制用的进程,而不存在mirror segment instance。一旦primary segment出现故障,mirror segment的复制进程停止,并启动instance,保证数据库的操作继续。
segment的故障检测是通过后台进程ftsprobe实现的,并可以进行自动容错,不需要DBA进行干预。ftsprobe的检测间隔是通过global服务参数gp_fts_probe_interval进行定义的,默认值是1分钟,通常这个参数的设置应该与参数gp_segment_connect_timeout保持一致。一旦ftsprobe进程发现primary segment出现故障,它会在数据字典中标记该segment已经停止。只有管理员对其进行恢复后,才会改变状态。
如果系统没有进行segment级别的镜像,当出现segment故障后,整个系统都将脱机,直到恢复故障segment后,才可以重新启动。
启用segment镜像,既可以在初始化系统时进行,也可以为存在的系统添加mirror。
如果在初始化系统是要求添加镜像,需要在初始化配置文件中添加如下参数
MIRROR_PORT_BASE 指定第一个mirror segment的端口号,其它mirror segment在此基础上加1,它的设置范围是1到65535,但是设置时要注意不能与primary segment冲突。
REPLICATION_PORT_BASE 指定第一个primary segment用于数据复制的端口号,其它primary segment以此为基础,每次加1,计算复制用端口号。它的设置也不要与primary segment冲突。取值范围1到65535
MIRROR_REPLICATION_PORT_BASE 指定第一个mirror segment用于数据复制的端口号,其它mirror segment以此为基础,每次加1,计算复制用端口号。它的设置也不要与mirror segment冲突。取值范围1到65535
MIRROR_DATA_DIRECTORY 指定了mirror segment的数据目录,声明的目录数量必须与primary segment的目录数量一致,而且要保证进行初始化操作的os用户对这些目录有读写权限。
然后调用gpinitsystem进行初始化,默认是使阵列中的主机相互存放对方的镜像。如果主机的数量多于segment的数量,可以使用-S选项,指定使用哪些主机作为镜像用。
如果原有系统没有镜像,我们也可以向存在的系统添加镜像。首先要获取添加镜像的构造文件。这个文件可以自己编辑,也可以通过gpaddmirrors自动生成,然后在此基础上根据需要进行修改。比如自动生成添加mirror的构造文件
$ gpaddmirrors -o filename
文本编辑器打开该构造文件,可以看到其格式如下
mirror[content]=content:hostname:address:port:mir_replication_port:pri_replication_port:datadir_location
默认配置是原有的主机间互为镜像,我们也可以添加新的主机作为镜像使用,从而减少镜像对性能的影响。
在得到mirror构造文件后,可以掉用命令启用镜像。
$ gpaddmirrors -i mirror_config_file
这时系统会根据配置文件设置,复制镜像,并对镜像进行同步,提供保护。需要注意的是,在添加镜像前应该先备份数据库,防止镜像添加失败(比如网路配置问题,内核参数设置不正确可能导致添加镜像失败)。因为GREENPLUM目前只能添加镜像,不能删除镜像。如果添加镜像失败会导致系统处于不正常状态。
由于mirror segment可以自动failover,因此当primary segment出现故障时,管理员可能无法及时察觉。所以一方面管理员应该对系统定期检查,另外一方面如果系统性能大幅下降(理论上,如果采用互为镜像方式,当一个主机出现故障时,整个系统性能下降一半)管理员也应该进行系统检查,判断是否有segment已经down掉了。
检查是否有segment down掉,可以在master上执行gpstate,如果看到类似这样的内容[WARN]:-Total primary segment failures (at master) = 1 <<<<<<,说明有primary segment down掉了。进一步检查故障segment,可以用SQL SELECT * FROM gp_segment_configuration WHERE status='d';获取细节信息,请注意故障段的主机,端口号,首选身份,以及目录这样的信息,可以在troubleshooting的过程中提供帮助。还可以通过gpstate -c看到primary与mirror之间的映射关系。
此外,DBA还应该检查master和segment上的日志,通过$ gplogfilter -t可以获取WARNING, ERROR, FATAL 或者PANIC级别的日志信息帮助进行troubleshooting。
一般来说,造成segment故障的原因主要就是三大类,一类是segment主机由于硬件问题或者网络问题无法访问,一类是segment的相关进程出现故障,比如被kill掉了。还有就是存储问题,比如控制器故障等等。在这些问题被解决之后,系统不会自动恢复故障segment,必须由DBA手工进行恢复。这需要在master上调用命令$ gprecoverseg 进行。它从故障之后产生的变化开始捕获,整个操作会在后台进行。所以需要DBA调用命令gpstate -m判断恢复操作完成的进度情况。
如果原始主机无法恢复,并且启用mirror,用命令$ gprecoverseg -i recover_config_file,指定新的主机进行恢复。配置文件的格式如下
failed_host_address:port:datadir
recovery_host_address:recovery_host_name:port:replication_port:fselocation
当然替代主机需要事先装好greenplum的软件。另外,3.x版本中的参数gp_fault_action已经废弃掉了。gprecoverseg在4.x版本中可以联机执行。
注:如果segment出现故障,已经执行的操作会中断,需要重新提交操作
上述内容就是如何理解配置数据库高可用性中的SEGMENT镜像,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。