在Greenplum数据库中启用Master和segment镜像mirrors
Tags: gpaddmirrorsgpinitstandbyGreenplum启用镜像
可以在建立Greenplum数据库系统时使用gpinitsystem配置系统使用镜像,或者之后用gpaddmirrors 以及gpinitstandby启用镜像。
这个主题假定现有系统初始化时没有镜像,现在要向其中加入镜像。
启用Segment镜像
镜像Segment允许数据库查询在主Segment不可用时故障转移到备用Segment。为了配置镜像,Greenplum数据库 系统必须具有足够的节点以保证镜像Segment和对应的主Segment不在同一台主机上。默认情况下,镜像会被配置在 主Segment所在的主机阵列上。也可以为镜像Segment选择一组完全不同的主机,这样它们就不会分享任何主 Segment的机器。
Important: 在线数据复制处理期间,Greenplum数据库应该处于一种静止状态,不应运行负载和 其他查询。
要增加Segment镜像到一个现有系统(和主Segment相同的主机阵列)
在所有的Segment主机上为镜像数据分配数据存储区域。数据存储区域必须与主Segment 的文件系统位置不同。
使用gpssh-exkeys确保Segment主机能通过SSH和SCP免密码连接到彼此。
运行gpaddmirrors工具在Greenplum数据库系统中启用镜像。 例如,在主Segment端口号基础上加10000来计算得到镜像Segment的端口号:
1$ gpaddmirrors -p 10000其中-p指定要加在主 Segment端口号上的数字。使用默认的组镜像配置来增加镜像。
要增加Segment镜像到一个现有系统(和主Segment不同的主机阵列)
确保在所有主机上都安装有Greenplum数据库软件。 详细的安装指导请见Greenplum数据库安装指南。
在所有的Segment主机上为镜像数据分配数据存储区域。
使用gpssh-exkeys确保Segment主机能通过SSH和SCP免密码连接到彼此。
创建一个配置文件,其中列出要在其上创建镜像的主机名称、端口号和数据目录。要创建 一个示例配置文件作为起点,可运行:
1$ gpaddmirrors -o filename镜像配置文件的格式为:
1mirrorrow_id=contentID:address:port:data_dir其中row_id是文件中的行号, contentID是segment实例的内容ID, address是segment主机的主机名或IP地址,port是用于通信的端口号, data_dir是segment实例的数据目录。
例如这是一个配置文件,其中有两个Segment主机,每个主机上有两个Segment:
1mirror0=2:sdw1-1:41000:/data/mirror1/gp2mirror1=3:sdw1-2:41001:/data/mirror2/gp3mirror2=0:sdw2-1:41000:/data/mirror1/gp0mirror3=1:sdw2-2:41001:/data/mirror2/gp1运行gpaddmirrors工具在Greenplum数据库系统中启用镜像:
1$ gpaddmirrors -i mirror_config_file其中-i指定所创建的镜像配置文件。
启用Master镜像
可以用gpinitsystem来配置一个带有后备Master的新Greenplum数据库系统, 或者以后用gpinitstandby来启用后备Master。这个主题假定现有系统初始化时没有 后备Master,现在要向其中加入一个后备Master。
有关工具gpinitsystem和gpinitstandby的详细信息,请见Greenplum数据库工具指南.
要向一个现有系统增加一个standby master
确保standby Master主机已经被安装且配置好Greenplum数据库: gpadmin系统用户已创建、Greenplum数据库二进制文件已安装、 环境变量已设置、SSH密钥已交换并且数据目录和表空间已创建。
在当前活动的primary master主机上运行gpinitstandby 工具向Greenplum数据库系统增加一个standby master主机。例如:
1$ gpinitstandby -s smdw这里-s指定后备Master主机的名称。
要把操作切换到standby master上,请见恢复故障的Master。
检查Master镜像进程状态(可选)
可以通过运行gpstate工具并带有-f选项来显示standby master 主机的详细信息。
1 | $ gpstate -f |
standby master的状态应该是passive,WAL sender状态应该是streaming。
有关gpstate工具的详细信息,请见Greenplum数据库工具指南。
gpaddmirrors
将镜像Segment添加到最初没有配置镜像的Greenplum数据库系统。
概要
1 2 3 4 5 6 7 8 | gpaddmirrors [-p port_offset] [-m datadir_config_file [-a]] [-s] [-d master_data_directory] [-B parallel_processes] [-l logfile_directory] [-v] gpaddmirrors -i mirror_config_file [-a] [-d master_data_directory] [-B parallel_processes] [-l logfile_directory] [-v] gpaddmirrors -o output_sample_mirror_config [-s] [-m datadir_config_file] gpaddmirrors -? gpaddmirrors --version |
描述
gpaddmirrors工具为初始仅配置了主Segment实例的现有Greenplum数据库系统配置镜像 Segment实例。该工具创建镜像实例并开始主Segment实例和镜像Segment实例之间的在线复制进程。一旦所有 的镜像与其主Segment同步好,用户的Greenplum数据库系统就建立了完全的数据冗余。
Important: 在在线复制进程中,Greenplum数据库应处于静止状态,负载和其他查询不应该运行。
默认情况下,该工具将提示用户输入将创建镜像Segment数据目录的文件系统位置。如果用户不想被提示, 可以使用-m选项传递包含文件系统位置的文件。
镜像位置和端口必须与用户的主Segment数据位置和端口不同。如果用户创建了额外的文件空间,则还将提示用户 为每个文件空间提供镜像位置。
该工具使用预定义的命名习惯在指定位置中为每个镜像Segment实例创建唯一的数据目录。必须为镜像Segment 实例声明与主Segment实例相同数量的文件系统位置。如果用户希望在同一位置创建镜像数据目录,可以多次 指定同样的目录名称,或者可以为每个镜像输入不同的数据位置。对于文件系统位置,请输入绝对路径。例如:
1 | Enter mirror segment data directory location 1 of 2 > /gpdb/mirror Enter mirror segment data directory location 2 of 2 > /gpdb/mirror |
或
1 | Enter mirror segment data directory location 1 of 2 > /gpdb/m1 Enter mirror segment data directory location 2 of 2 > /gpdb/m2 |
还有,用户可以运行gpaddmirrors工具,并使用-i选项提供详细的 配置文件。如果用户希望镜像Segment位于完全不同于主Segment的主机集合上,这非常有用。镜像配置文件的 格式是:
1 | mirror<row_id>=<contentID>:<address>:<port>:<data_dir> |
此处row_id是文件中的行号,contentID是segment实例的content_id, address是segment所在的主机名或IP地址,port是交互端口, data_dir是segment实例数据目录。
例如:
1 | mirror0=0:sdw1-1:60000:/gpdata/mir1/gp0 mirror1=1:sdw1-1:60001:/gpdata/mir2/gp1 |
gp_segment_configuration系统目录表可以帮助用户确定当前的主Segment配置, 以便用户可以规划镜像Segment配置。例如,运行以下的查询:
1 | =# SELECT dbid, content, address as host_address, port, datadir FROM gp_segment_configuration ORDER BY dbid; |
如果在后补的镜像主机上创建镜像,则新的镜像Segment主机必须预先安装Greenplum数据库软件,并且被配置为 与现有的主Segment主机完全相同。
用户必须确保运行gpaddmirrors的用户(gpadmin用户)有权在指定 的数据目录位置写入。用户可能想要在Segment主机上创建这些目录并且在运行gpaddmirrors 之前将这些目录的拥有者改为(chown)适当的用户。
Note: 该工具在系统内部采用SSH连接执行各项操作任务。在大型Greenplum集群、云部署或每台主机部署了大量的 segment实例时,可能会遇到超过主机最大授权连接数限制的情况。此时需要考虑更新SSH配置参数MaxStartups 以提高该限制。更多关于SSH配置的选项,请参考您的Linux分发版的SSH文档。
选项
-a(不提示)
以静默模式运行 - 不提示输入信息。如果使用这一选项,必须使用-m或-i提供一个配置文件。
-B parallel_processes
并行启动的镜像设置进程的数量。如果未指定,则该工具将启动最多10个并行进程,具体取决于需要 设置多少个镜像Segment实例。
-d master_data_directory
主数据目录。如果没有指定,将使用为$MASTER_DATA_DIRECTORY设置的值。
-i mirror_config_file
一个配置文件,每个要创建的镜像Segment对应一行。用户必须为系统中的每个主Segment都在该 文件中列出一个镜像Segment。该文件格式如下(如gp_segment_configuration 目录表中的每个属性):
1 | mirror<row_id>=<contentID>:<address>:<port>:<data_dir> |
此处row_id是文件中的行号,contentID是segment实例的content_id, address是segment所在的主机名或IP地址,port是交互端口, data_dir是segment实例数据目录。
-l logfile_directory
用来写日志的目录,默认为~/gpAdminLogs。
-m datadir_config_file
包含将创建镜像数据目录的文件系统位置列表的配置文件。如果未提供,该工具将提示用户输入位置。 文件中的每一行都指定一个镜像数据目录位置。例如:
1 | /gpdata/m1 /gpdata/m2 /gpdata/m3 /gpdata/m4 |
-o output_sample_mirror_config
如果用户不确定如何布置-i选项使用的镜像配置文件,用户使用这一选项运行 gpaddmirrors来生成一个基于主Segment配置的镜像配置文件示例。该工具 将提示用户输入用户的镜像Segment数据目录位置(除非用户使用-m在一个文件 中提供了这些位置)。然后,用户可以编辑此文件根据需要将主机名更改为后补的镜像主机。
-p port_offset
可选。这个数字被用于计算用于镜像Segment的数据库端口和复制端口。默认偏移量为1000。 镜像端口分配计算如下:
主机端口 + 偏移量 = 镜像数据库端口
例如,如果主Segment的端口为50001,则默认情况下,其镜像将使用数据库端口51001。
-s(散布镜像)
在可用主机上散布镜像Segment。默认情况下,将把一组镜像Segment集合在一起放在不同于其 主Segment集合的后补主机上。镜像散布将把每个镜像放置在Greenplum数据库阵列中的不同主机上。 只有在阵列中有足够数量的主机(主机数大于每个主机的Segment实例数)时,才允许使用散布镜像方式。
-v(详细模式)
将日志记录输出设置为详细。
--version(显示工具版本)
显示该工具的版本。
-? (help)
显示在线帮助。
示例
使用和主要数据相同的一组主机向现有的Greenplum数据库系统添加镜像。通过在当前主Segment端口号上加上 100来计算镜像数据库端口和复制端口:
1 | $ gpaddmirrors -p 100 |
使用和主要数据不同的一组主机向现有的Greenplum数据库系统添加镜像:
1 | $ gpaddmirrors -i mirror_config_file |
其中mirror_config_file看起来像这样:
1 | mirror0=0:sdw1-1:52001:/gpdata/mir1/gp0 mirror1=1:sdw1-2:52002:/gpdata/mir2/gp1 mirror2=2:sdw2-1:52001:/gpdata/mir1/gp2 mirror3=3:sdw2-2:52002:/gpdata/mir2/gp3 |
使用gpaddmirrors -o输出一个要使用的镜像配置文件样例:
1 | $ gpaddmirrors -o /home/gpadmin/sample_mirror_config |
gpinitstandby
为Greenplum数据库系统添加或初始化后备Master主机。
概要
1 2 3 4 | gpinitstandby { -s standby_hostname [-P port] | -r | -n } [-a] [-q] [-D] [-S standby_data_directory] [-l logfile_directory] gpinitstandby -v gpinitstandby -? |
描述
gpinitstandby工具为用户的Greenplum数据库系统添加一个备份的后备Master主机。 如果用户的系统已经配置了后备Master主机,请在添加新的后备Master主机之前使用-r 选项将其删除。
在运行此工具之前,请确保Greenplum数据库软件已安装在后备Master主机上,并且用户已在主机之间交换了 SSH密钥。推荐在Master主机和后备Master主机上将主端口设置为相同的端口号。
此工具应该在当前活动的主Master主机上运行。方法请参见Greenplum数据库安装指南。
该工具执行以下的步骤:
- 更新该Greenplum数据库系统目录来删除现有的后备Master主机信息 (如果指定了-r)
- 更新该Greenplum数据库系统 目录来添加新的后备Master主机信息
- 编辑Greenplum数据库Master的pg_hba.conf 来允许从新添加的后备Master主机进行访问。
- 在后补Master主机上设置后备Master实例。
- 开始同步进程。
如果主Master主机变为不可操作,后备Master主机将作为“热备用”。后备Master通过事务日志 复制进程(walsender和walreceiver)保持最新 状态,这些进程在主Master主机和后备Master主机上运行,并使两者的数据保持同步。如果主 Master失效,日志复制过程将关闭,后备Master可以使用gpactivatestandby 工具在其位置激活。一旦后备Master激活,复制日志将用于重建最后一次成功提交事务时Master 主机的状态。
激活的后备Master实际上成为Greenplum数据库的Master,在主端口上接受客户端连接并执行正常的 Master操作,例如SQL命令处理和负载管理。
Important: 如果gpinitstandby工具之前初始化后备Master失败, 则必须显示删除后备Master数据目录中的文件,然后再次运行gpinitstandby。 后备Master数据目录在初始化失败后不会被清理,因为它包含可帮助确定失败原因的日志文件。
如果发生初始化失败,则会在后备主机目录/tmp中生成摘要报告文件。 该报告列出了后备主机上需要清理的目录。
选项
-a(不提示)
不要提示用户确认。
-D(调试)
设置日志级别为debug。
-l logfile_directory
写入日志的目录,默认为~/gpAdminLogs。
-n(重启被主机)
指定此选项以启动已配置但由于某种原因已停止的Greenplum数据库的后备Master。
-P port
此选项指定Greenplum数据库的后备Master使用的端口。默认值是Greenplum数据库的活动 Master使用的端口。
如果Greenplum数据库的后备Master和活动Master在同一台主机上,则端口必须不同。 如果活动Master和后备Master的端口相同,并且所在的主机也相同,则该工具将返回错误。
-q(无屏幕输出)
以静默模式运行。命令输出不显示在屏幕上,但是仍然写入日志文件。
-r(移除后备Master)
从Greenplum数据库系统中删除当前已配置的后备Master。
-s standby_hostname
后备Master的主机名。
-S standby_data_directory
新备用Master主机使用的数据目录。默认为和活动Master相同的路径。
如果备用Master和活动Master在同一台主机上,必须使用该选项定义一个不同的路径。
-v(显示工具版本)
显示该工具的版本、状态、上次更新的日期和校验和。
-?(帮助)
显示在线帮助。
示例
添加一个后备Master到用户的Greenplum数据库系统,并重启同步进程:
1 | gpinitstandby -s host09 |
开启一个存在的后备Master主机,并且和当前的主Master主机同步:
1 | gpinitstandby -n |
Note: 不要在同一命令指定-n和-s选项。
指定一个不同的端口向Greenplum数据库系统添加一台后备Master主机:
1 | gpinitstandby -s myhost -P 2222 |
如果指定的主机名与Greenplum数据库的活动Master相同,则用作后备Master的Greenplum数据库软件必须 用-P参数指定 与Greenplum数据库的活动Master的软件位于不同位置。 另外,后备Master使用的文件空间位置必须与 Greenplum数据库的活动Master不同。
从Greenplum系统配置中删除现有的后备Master:
1 | gpinitstandby -r |
示例
添加和删除standby master库
命令gpstate -f
可以查看standby master库的详情。
添加:
1 | gpinitstandby -s mdw2 -S /opt/greenplum/data/master/gpseg-1 -P 5432 |
删除:
1 | gpinitstandby -r |
注意:master和standby master可以在同一台主机上,请注意端口号和data目录不能一样。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | [gpadmin@mdw1 ~]$ gpstate -f 20230131:16:43:47:022028 gpstate:mdw1:gpadmin-[INFO]:-Starting gpstate with args: -f 20230131:16:43:47:022028 gpstate:mdw1:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 6.23.0 build commit:5b5e432f35f92a40c18dffe4e5bca94790aae83c Open Source' 20230131:16:43:47:022028 gpstate:mdw1:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 9.4.26 (Greenplum Database 6.23.0 build commit:5b5e432f35f92a40c18dffe4e5bca94790aae83c Open Source) on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 6.4.0, 64-bit compiled on Dec 20 2022 08:02:23' 20230131:16:43:47:022028 gpstate:mdw1:gpadmin-[INFO]:-Obtaining Segment details from master... 20230131:16:43:47:022028 gpstate:mdw1:gpadmin-[INFO]:-Standby master instance not configured 20230131:16:43:47:022028 gpstate:mdw1:gpadmin-[INFO]:-------------------------------------------------------------- 20230131:16:43:47:022028 gpstate:mdw1:gpadmin-[INFO]:--pg_stat_replication 20230131:16:43:47:022028 gpstate:mdw1:gpadmin-[INFO]:-------------------------------------------------------------- 20230131:16:43:47:022028 gpstate:mdw1:gpadmin-[INFO]:-No entries found. 20230131:16:43:47:022028 gpstate:mdw1:gpadmin-[INFO]:-------------------------------------------------------------- [gpadmin@mdw1 ~]$ gpinitstandby -s mdw2 -S /opt/greenplum/data/master/gpseg-1 -P 5432 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Validating environment and parameters for standby initialization... 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Checking for data directory /opt/greenplum/data/master/gpseg-1 on mdw2 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:------------------------------------------------------ 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Greenplum standby master initialization parameters 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:------------------------------------------------------ 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Greenplum master hostname = mdw1 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Greenplum master data directory = /opt/greenplum/data/master/gpseg-1 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Greenplum master port = 5432 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Greenplum standby master hostname = mdw2 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Greenplum standby master port = 5432 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Greenplum standby master data directory = /opt/greenplum/data/master/gpseg-1 20230131:16:43:54:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Greenplum update system catalog = On Do you want to continue with standby master initialization? Yy|Nn (default=N): > y 20230131:16:43:56:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Syncing Greenplum Database extensions to standby 20230131:16:43:56:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-The packages on mdw2 are consistent. 20230131:16:43:56:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Adding standby master to catalog... 20230131:16:43:56:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Database catalog updated successfully. 20230131:16:43:56:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Updating pg_hba.conf file... 20230131:16:43:57:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-pg_hba.conf files updated successfully. 20230131:16:44:03:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Starting standby master 20230131:16:44:03:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Checking if standby master is running on host: mdw2 in directory: /opt/greenplum/data/master/gpseg-1 20230131:16:44:04:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Cleaning up pg_hba.conf backup files... 20230131:16:44:04:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Backup files of pg_hba.conf cleaned up successfully. 20230131:16:44:04:022058 gpinitstandby:mdw1:gpadmin-[INFO]:-Successfully created standby master on mdw2 [gpadmin@mdw1 ~]$ gpstate -f 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:-Starting gpstate with args: -f 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 6.23.0 build commit:5b5e432f35f92a40c18dffe4e5bca94790aae83c Open Source' 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 9.4.26 (Greenplum Database 6.23.0 build commit:5b5e432f35f92a40c18dffe4e5bca94790aae83c Open Source) on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 6.4.0, 64-bit compiled on Dec 20 2022 08:02:23' 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:-Obtaining Segment details from master... 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:-Standby master details 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:----------------------- 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:- Standby address = mdw2 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:- Standby data directory = /opt/greenplum/data/master/gpseg-1 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:- Standby port = 5432 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:- Standby PID = 9485 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:- Standby status = Standby host passive 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:-------------------------------------------------------------- 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:--pg_stat_replication 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:-------------------------------------------------------------- 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:--WAL Sender State: streaming 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:--Sync state: sync 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:--Sent Location: 0/14000000 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:--Flush Location: 0/14000000 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:--Replay Location: 0/14000000 20230131:16:44:16:022145 gpstate:mdw1:gpadmin-[INFO]:-------------------------------------------------------------- [gpadmin@mdw1 ~]$ |
参考
https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/0e9cda6e1e88d4aa.md
https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/6e24f3d590fa5db3.md
https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/b4f3aec7e394da3e.md