了解更多Greenplum相关内容,欢迎访问Greenplum中文社区网站

Greenplum集群主要包括Master节点和Segment节点,Master节点称之为主节点,Segment节点称之为数据节点。Master节点与Segment节点都是可以有备份的,其中Master节点的备节点为Standby Master(不能够自动故障转移),Segment是通过Primary Segment与Mirror Segment进行容错的。通过本文你可以了解:

  • Greenplum数据库的高可用(HA)原理

  • Greenplum生产集群中master节点故障恢复

  • Greenplum生产集群中segment故障检测与恢复

  • Segment节点故障恢复原理与实践

Greenplum数据库的高可用原理

1. master mirroring概述

可以在单独的主机或同一主机上部署master实例的备份或镜像。如果primary master服务器宕机,则standby master服务器将用作热备用服务器。在primary master服务器在线时,可以从primary master服务器创建备用master服务器。

Primary master服务器持续为用户提供服务,同时获取Primary master实例的事务快照。在standby master服务器上部署事务快照时,还会记录对primary master服务器的更改。在standby master服务器上部署快照后,更新也会被部署,用于使standby master服务器与primary master服务器同步。

Primary master服务器和standby master服务器同步后,standbymaster服务器将通过walsender 和 walreceiver 的复制进程保持最新状态。该walreceiver是standby master上的进程, walsender流程是primary master上的进程。这两个进程使用基于预读日志(WAL)的流复制来保持primary master和standby master服务器同步。在WAL日志记录中,所有修改都会在应用生效之前写入日志,以确保任何进程内操作的数据完整性。

由于primary master不包含任何用户数据,因此只需要在主master和standby master之间同步系统目录表(catalog tables)。当这些表发生更新时,更改的结果会自动复制到备用master上,以确保与主master同步。

如果primary master发生故障,管理员需要使用gpactivatestandby工具激活standby master。可以为primary master和standby master配置一个虚拟IP地址,这样,在primary master出现故障时,客户端程序就不用切换到其他的网络地址,因为在master出现故障时,虚拟IP地址可以交换到充当primary master的主机上。

2. mirror segment概述

当启用Greenplum数据库高可用性时,有两种类型的segment:primary和mirror。每个主segment具有一个对应的mirror segment。主segment接收来自master的请求以更改主segment的数据库,然后将这些更改复制到相应的mirror segment上。如果主segment不可用,则数据库查询将故障转移到mirror segment上。

Primary segment和Mirror segment之间的同步与primary master和standby master相同,也是采用基于WAL流的同步。

3. group mirroring方式

只要primary segment实例和mirror segment实例位于不同的主机上,mirror segment就可以以不同的配置方式放置在群集中的主机上。每个主机必须具有相同数量的mirror segment和primary segment。默认mirror segment配置方式是group mirroring,其中每个主机的primary segment的mirror segment位于另一个主机上。如果单个主机发生故障,则部署该主机的mirror segment主机上的活动primary segment数量会翻倍,从而会加大该主机的负载。下图说明了group mirroring配置。

4. Spread mirroring方式

Spread mirroring方式是指将每个主机的mirror segment分布在多个主机上,这样,如果任何单个主机发生故障,该主机的mirror segment会分散到其他多个主机上运行,从而达到负载均衡的效果。仅当主机数量多于每个主机的segment数时,才可以使用Spread方式。下图说明了Spread mirroring方式。

Master节点故障恢复

如果primary master节点失败,日志复制进程就会停止。可以使用gpstate -f命令查看standby master的状态,使用gpactivatestandby命令激活standby master。

1. 激活Standby master

(1)确保原来的集群中配置了standby master

(2)确保primary master已经停止运行,如果primary master仍在运行,提升standby master后,系统可能会有2个primary master,造成数据不一致

(3)在standby master主机上运行gpactivatestandby命令

$ gpactivatestandby -d /data/master/gpseg-1

-d参数是指standby master的数据目录,一旦激活成功,原来的standby master就成为了primary master。

(4)执行激活命令后,运行gpstate命令检查状态

$ gpstate -f

新激活的master的状态是active,如果已经为集群配置一个新的standby master节点,则其状态会是passive。如果还没有为集群配置一个新的standby master,则会看到下面的信息:No entries found,该信息表明尚未配置standby master。

(5)在成功切换到了standbymaster之后,运行ANALYZE命令,收集该数据库的统计信息

$ psql postgres -c 'ANALYZE;'

(6)可选:如果在成功激活standby master之后,尚未指定新的standby master,可以在active master上运行gpinitstandby命令,配置一个新的standby master

$ gpinitstandby -s new_standby_master_hostname -P <port> -S <standby_master_datadir>

2. 恢复到原来的设置(可选的)

(1)确保之前的master节点能够正常使用

(2)在原来的master主机上,移除(备份)原来的数据目录gpseg-1,比如:

$ mv /data/master/gpseg-1  /data/master/backup_gpseg-1

(3)在原来的master节点上,初始化standby master,在active master上运行如下命令

$ gpinitstandby -s mdw

(4)初始化完成之后,检查standby master的状态

$ gpstate -f

显示的状态应该是--Sync state: sync

(5)在active master节点上运行下面的命令,用于停止master

$ gpstop -m

(6)在原来的master节点(mdw)上运行gpactivatestandby命令

$ gpactivatestandby -d /data/master/gpseg-1

(7)在上述命名运行结束之后,再运行gpstate命令查看状态

$ gpstate -f

确认原始的primary master状态是active。

(8)在原来的standby master节点(smdw)上,移除(备份)数据目录gpseg-1

$ mv /data/master/gpseg-1  /data/master/backup_gpseg-1

(9)原来的master节点正常运行之后,在该节点上执行如下命令,用于激活standby master

$ gpinitstandby -s smdw -P <port> -S <standby_master_datadir>

3. 检查standby master的状态

可以通过查看视图pg_stat_replication,来获取更多的同步信息。该视图可以列出walsender进程的信息,下面的命令是查看walsender进程的进程id和状态信息。

$ psql postgres -c 'SELECT pid, state FROM pg_stat_replication;'

 Segment节点故障检测与恢复

1. 概述

Greenplum数据库主节点服务器上,postmas进程有一个子进程ftsprobe,它的主要作用是处理segment节点的故障检测和提升。ftsprobe 监视Greenplum数据库segments节点,它周期性地扫描所有segment节点。如果 ftsprobe无法连接到segment,它会在Greenplum数据库系统目录中将segment标记为”down”。在管理员启动恢复进程之前,该segment是不可以被操作的。

启用mirror备份后,如果primary segment不可用,Greenplum数据库会自动故障转移到mirror segment。如果segment实例或主机发生故障,系统仍可以运行,前提是所有在剩余的活动segment上数据都可用。

要恢复失败的segment,管理员需要执行 gprecoverseg 恢复工具。此工具可以找到失败的segment,验证它们是否有效,并将事务状态与当前活动的segment进行比较,以确定在segment脱机时所做的更改。gprecoverseg将更改的数据库文件与活动segment同步,并使该segment重新上线。管理员需要在在Greenplum数据库启动并运行时执行恢复操作。

禁用mirror备份时,如果segment实例失败,系统将变得几乎不可用。管理员需要手动恢复所有失败的segment。

2. 检测和管理失败的segment

使用工具命令查看

启用mirror备份后,当primary segment发生故障时,Greenplum会自动故障转移到mirror segment。如果每个数据部分所在的segment实例都是在线的,则用户可能无法意识到segment已经出现故障。如果在发生故障时正在进行事务(还未进入两阶段提交的第二阶段),则正在进行的事务将被回滚。

如果整个Greenplum数据库系统由于segment故障而变得不可访问(例如,如果未启用mirror备份或没有足够的segment在线),则用户在尝试连接数据库时将看到错误。返回到客户端程序的错误可能表示失败。例如:

ERROR:  failed to acquire resources on one or more segments

在master节点上,运行gpstate命令,使用-e参数显示错误的segment

$ gpstate -e
值得注意的是,即便是一组primary和mirror都发生了故障(double failure),在gp_segment_configuration中也只会有一个的status显示为’d'。这是因为mirror发生故障时,ftsprobe不会再向primary进行探测了,进而不会将剩下的节点标记为’d’。在进行query派发的时候,由于创建interconnect失败,QD进程向用户返回错误。

检查日志文件

日志文件可以提供信息以帮助确定错误的原因。Master实例和segment实例都有自己的日志文件,这些日志文件位于pg_log的目录下。Master的日志文件包含最多信息,应该首先检查它。

使用 gplogfilter工具检查Greenplum数据库日志文件,可以获取额外信息。要检查segment日志文件,可以在master主机上使用gpssh命令运行 gplogfilter。

(1)使用 gplogfilter 检查master日志文件的WARNING, ERROR, FATAL 或者 PANIC日志级别消息

$ gplogfilter -t

(2)使用 gpssh 检查每个segment实例上的日志级别为WARNING, ERROR, FATAL 或者 PANIC的消息。例如:

$ gpssh -f seg_hosts_file -e 'source/usr/local/greenplum-db/greenplum_path.sh ; gplogfilter -t/data1/primary/*/pg_log/gpdb*.log' > seglog.out

恢复失败的segment

如果master服务器无法连接到segment实例,则会在Greenplum数据库系统目录中将该segment标记为“down”状态。在管理员采取措施使segment实例重新上线之前,segment实例将保持脱机离线状态。segment实例可能由于多种原因而不可用:

(1)segment主机不可用; 例如,由于网络或硬件故障。

(2)segment实例未运行; 例如,没Postgres的数据库监听进程。

(3)segment实例的数据目录损坏或丢失; 例如,无法访问数据,文件系统已损坏或磁盘发生故障。

在启用mirror segment的情况下进行恢复

(1)确保master主机能够ping通失败的segment主机

$ ping failed_seg_host_address

(2)在master主机上运行下面命令,重新激活失败的segment

$ gprecoverseg

gprecoverseg的执行过程可能需要一些时间,在此过程中,数据库不允许写入操作。成功执行后,节点会作为备节点来使用。

(3)恢复进程会显示故障segment并标识需要同步的已更改文件。这个过程可能需要一些时间,等待该过程完成。在此过程中,数据库不允许写入操作。

(4)在 gprecoverseg完成后,系统进入重新同步模式并开始复制已更改的文件。当系统处于联机状态并接受数据库请求时,此进程在后台运行。

(5)重新同步过程完成后,系统状态为“已同步”( Synchronized)。运行gpstate 命令用于验证重新同步过程状态

$ gpstate -m

将所有的segment恢复到原来的角色设置

当primary segment发生故障时,mirror segment会被激活为primary segment。运行gprecoverseg命令之后,当前活动的segment是primary segment,失败的primary segment成为了mirror segment。segment实例不会返回到在系统初始化时配置的首选角色。这意味着某些segment主机上可能运行多个primary segment实例,而某些segment主机上运行较少的segment,即系统可能处于潜在的不平衡状态。要检查不平衡的segment,可以使用如下命令:

$ gpstate -e

所有segment必须在线并完全同步以重新平衡系统,数据库会话在重新平衡期间保持连接,但正在进行的查询将被取消并回滚。

(1)运行下面命令,查看mirror segment的角色和同步状态

$ gpstate -m

(2)如果有mirror segment处于非同步状态,等待他们同步完成

(3)运行gprecoverseg命令,使用-r参数将segment恢复到原来初始化时的角色设置

$ gprecoverseg -r

(4)运行gpstate -e命令,确认所有的segment是否恢复到初始化时的角色设置

$ gpstate -e

双重故障(double-fault)

在双重故障情况下,即primary segment和mirror segment都处于失败状态。如果不同segment的主机同时发生硬件故障,则会导致primary segment和mirror segment都处于失败状态。如果发生双重故障,Greenplum数据库将不可用。

Segment故障恢复原理与实践

1. Greenplum集群环境介绍

该生产环境集群由四台服务器构成,其中一台为primary master节点,一台为standby master节点,两外两台为segment节点,每个segment节点有四个segment(两个primary segment,两个mirror segment),segment采用group方式进行备份(sdw1的备份都在sdw2上,sdw2的备份都在sdw1上),其角色分配如下图所示:

2. segment故障检查

gpstate -m日志信息

gpstate -e 日志信息

gpstate -e 日志信息

gpstate -s 日志信息

(1)sdw1节点的日志信息

(2)sdw2节点的日志信息

3. 故障说明

sdw1节点primary segment正常,mirror segment被激活,其mirror segment为sdw2节点上的primary segment备份。sdw2节点primary segment失败,mirror segment失败。此时集群环境能够正常提供服务,全部负载到sdw1节点上。

使用select * from gp_segment_configuration查看segment角色信息,如下图所示:

4. segment故障恢复

在master主机上运行下面命令,重新激活失败的segment

$ gprecoverseg

运行gpstate 命令用于验证重新同步过程状态

$ gpstate -m

当primary segment发生故障时,mirror segment会被激活为primary segment。运行gprecoverseg命令之后,失败的primary segment成为了mirror segment,而mirror segment被fts probe进程提升成为primary segment。segment实例不会返回到在系统初始化时配置的首选角色。这意味着某些segment主机上可能运行多个primary segment实例,而某些segment主机上运行较少的segment,即系统可能处于潜在的不平衡状态。如下图所示,sdw1上的mirror segment变为了primary segment,sdw2上的primary segment变为了mirror segment。即sdw2的primary segment运行在sdw1节点上,系统处于不平衡状态。

运行gprecoverseg命令,使用-r参数将segment恢复到原来初始化时的角色设置

$ gprecoverseg -r

再次查询gp_segment_configuration会发现,所有的 segment都处于up状态,并且它们此时的角色和初始化集群时分配的角色一致。

小结

本文主要介绍了GP的高可用原理及实践。首先介绍了Master与Segment的容错策略,然后介绍了Master节点与Segment节点故障恢复的步骤,最后给出了一个完整的实践过程。

【实战经验】Greenplum集群Master與Segment节点故障检测与恢复相关推荐

  1. Greenplum集群Master与Standby相互切换

    Greenplum集群Master与Standby相互切换 1 概述 1 2 查看集群的基本信息 2 2.1 查看集群的配置信息 2 2.2 快速查看down segments节点 2 2.3 查看M ...

  2. 故障分析 | Greenplum 集群 standby 故障处理

    作者:杨文 DBA,负责客户项目的需求与维护,没有擅长,会点数据库,不限于MySQL.Redis.Cassandra.GreenPlum.ClickHouse.Elastic.TDSQL等等. 本文来 ...

  3. Greenplum集群安装配置及最佳实践

    Greenplum集群安装配置及最佳实践 目录 Greenplum集群安装配置及最佳实践 1 目录 1 1 总体介绍 2 1.1 硬件平衡 2 1.2 高可用 2 1.3 部署方案 2 1.3.1 G ...

  4. Greenplum集群部署安装指南

    目录 一.官方安装链接 二.Greemplum安装文件下载 三.数据库安装步骤 1.准备工作 (1)修改hostname (2)关闭SELinux (3)关闭防火墙 (4)配置/etc/hosts ( ...

  5. 【ES实战】ES集群节点迁移与缩容补充说明

    [ES实战]ES集群节点迁移与缩容补充说明 [ES实战]ES集群节点迁移与缩容 文章目录 [ES实战]ES集群节点迁移与缩容补充说明 1.集群的现状分析和集群的规划 2.集群健康关注点,变化关注点 3 ...

  6. Greenplum集群安装

    文章目录 主机与软件 环境准备 禁SELinux和防火墙 修改Host 修改内核参数 加载XFS文件系统 安装依赖 修改读块大小 设置io的调度算法 安装ntp服务(可选,该手册未执行这步) 安装 创 ...

  7. Greenplum集群故障修复小记

    今天有一套环境因为网络调整,结果诺大的Greenplum集群,primary和mirror节点部分有了故障,假设有200个实例,100个segment,100个mirror,情况就是100个实例出现了 ...

  8. K8S集群Master高可用实践

    本文将在前文基础上介绍k8s集群的高可用实践,一般来讲,k8s集群高可用主要包含以下几个内容: 1.etcd集群高可用 2.集群dns服务高可用 3.kube-apiserver.kube-contr ...

  9. 全手动搭建Kubernetes集群——Master管理节点和Node工作节点部署

    目录 前言 一.Master管理节点需要安装的组件介绍 二.配置Master管理节点各组件模块 1.配置kube-apiserver组件 2.配置kube-controller-manager组件 3 ...

最新文章

  1. 简单明了,一文入门视觉SLAM
  2. Trie树统计单词前缀
  3. MySQL--更新自增列的潜在风险
  4. jQuery 9 相对选择器
  5. python opencv 图像添加噪声_opencv+python同时加椒盐噪声和随机杂点噪声
  6. Camparable与Comparator之区别
  7. 查看Full GC方法:1,jconsel:2,linux 命令: jstat -gcutil id 4s 10003,linux 命令(前提有.gc日志):c
  8. Android自定义控件之流式布局
  9. oh-my-zsh扫描git仓库卡慢的解决方法
  10. 中油C语言第一次在线作业,中石油华东《程序设计(C语言)》2020年春季学期在线作业(二)...
  11. 【MySQL】mysql The server time zone value “乱码” 错误
  12. 龙邱STM32单片机用J-LINK下载无法被识别的解决方法
  13. 软件网站安全性的设计与检测与解决方案
  14. Linux虚拟网络基础 — Tap
  15. 那时的回忆~九州幻想!
  16. “视”不可挡:征兵招警,近视手术成“通关法宝”
  17. gird布局几种用法
  18. Redis基本数据类型、持久化机制、集群模式、淘汰策略、缓存穿透、击穿、雪崩、常见面试题大集合!
  19. Linux下Mysql启动、关闭、重启指令
  20. 【9106】天使的起誓

热门文章

  1. web前端大作业--响应式风景旅游网页设计(国庆旅游主题-HTML+CSS+JavaScript)实现
  2. 怎么把两段音频合成一段-快速合并音频文件
  3. 海关数据|俄罗斯与中国之间的贸易数据
  4. 微信小程序设置打开pdf并进行保存到本地,下次打开就无需进行服务器请求
  5. 这个生物黑客体内植入了14枚芯片,真的很酷吗?
  6. c libxml2解析html,在Python中,lxml和libxml2哪个更适合解析格式错误的html?
  7. isNaN()与Number.isNaN()的区别
  8. NASA发布NASADEM_HGT及下载方式——从珠穆朗玛峰和天门山说起
  9. javascript查找并输出英语文章出现最多次数单词,和英语字符中出现最多字母
  10. 红旗linux shell方式下配置声卡的命令是:,‘红旗杯’linux大赛——基础知识2