原 在Greenplum数据库中启用和删除Master和segment镜像mirror
Tags: 原创GreenPlumgpinitstandbygpaddmirrors启用standby master启用镜像
- 简介
- 启用Segment镜像
- 要增加Segment镜像到一个现有系统(和主Segment相同的主机阵列)
- 要增加Segment镜像到一个现有系统(和主Segment不同的主机阵列)
- 启用Master镜像
- 要向一个现有系统增加一个standby master
- 检查Master镜像进程状态(可选)
- 删除segment镜像mirror示例(不用这个,用总结中的,,慎用慎用。。。。)
- gpaddmirrors
- 概要
- 描述
- 选项
- 示例
- gpmovemirrors
- 概要
- 描述
- 选项
- 示例
- gpinitstandby
- 概要
- 描述
- 选项
- 示例
- 示例
- 添加和删除standby master库
- 添加mirror镜像示例
- 总结(看这个就行)
- 1、添加和删除standby master的命令:
- 2、添加segment镜像mirror的命令:
- 3、删除mirror实例过程(需慎重,严格安装步骤来):
- 参考
简介
可直接看最后的总结内容。。。。。
可以在建立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数据库软件。
在所有的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:
1234mirror0=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数据库工具指南。
删除segment镜像mirror示例(不用这个,用总结中的,,慎用慎用。。。。)
⾸先检测系统的状态信息
如果集群的状态不正常,则需要进⾏系统的问题定位和处理。否则可以执⾏以下步骤,来进⾏集群删除镜像操作:的数据⽬录的 pg_log ⽬录下的⽇志都可以删除。删除操作需要慎重!!!1rm -rf $MASTER_DATA_DIRECTORY/pg_log/*备份 Master 主机的数据⽬录。
1tar -zcvf /home/gpadmin/master.tar.gz $MASTER_DATA_DIRECTORY启动集群,进⾏数据库⼀致性检查 gpcheckcat
12gpstart -agpcheckcat <database_name>运⾏删除镜像的脚本,将删除脚本放⼊ remove_mirro.sh 中,并使⽤以下语句调整脚本的属性
chmod 777 remove_mirror.sh
使⽤ gpadmin ⽤户运⾏,hostfile 作为参数传⼊。hostfile 中列出集群中所有主机的主机名称。示例如下:1./remove_mirror.sh hostfile启动数据库,进⾏数据库⼀致性检查
123gpstart -agpcheckcatgpstate -s删除镜像计算节点的数据⽬录。
12-- remove Mirror data 注意使⽤绝对路径进⾏删除操作。删除前⼀定要反复确认,以免误删除gpssh -f hostfile_seg -e 'rm -rf /data0/Greenplum/mirror/*'⾄此删除集群镜像就结束了。
删除脚本如下(执行要慎重呀,我上次把库搞坏了。。。。):
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 | cat > remove_mirror.sh <<"EOF" #!/usr/bin/env bash set -xeuo pipefail gpstop -a -M fast gpstart -a -R HOSTFILE=$1 SQL_FILE=/tmp/remove_mirror.sql PSQL="psql -qtA -v ON_ERROR_STOP=1 -t template1" max_content=$(${PSQL} -c "select max(content) from gp_segment_configuration;") echo "set allow_system_table_mods='true';" > ${SQL_FILE} for cid in $(seq 0 ${max_content}); do \ echo "select gp_remove_segment_mirror(${cid}::int2);" >> ${SQL_FILE} done ${PSQL} -f ${SQL_FILE} gpstop -a -M fast gpssh -f ${HOSTFILE} -e "pkill -9 postgres" || true EOF chmod 777 remove_mirror.sh ./remove_mirror.sh ./conf/all_host -- SQL文件内容:/tmp/remove_mirror.sql set allow_system_table_mods='true'; select gp_remove_segment_mirror(0::int2); select gp_remove_segment_mirror(1::int2); select gp_remove_segment_mirror(2::int2); select gp_remove_segment_mirror(3::int2); |
其实过程就是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | gpstop -a -M fast gpstart -a -R psql -qtA -v ON_ERROR_STOP=1 -t template1 set allow_system_table_mods='true'; -- select max(content) from gp_segment_configuration; select gp_remove_segment_mirror(0::int2); select gp_remove_segment_mirror(1::int2); select gp_remove_segment_mirror(2::int2); select gp_remove_segment_mirror(3::int2); gpstop -a -M fast gpstart -a -- 或者直接删除 set allow_system_table_mods='true'; delete from gp_segment_configuration where role='m'; -- 删除mirror文件(请认真确认) gpssh -f all_host -e 'rm -rf /opt/greenplum/mirror/*' |
使用命令select gp_remove_segment_mirror(1::int2);
或删除视图gp_segment_configuration
执行完成后,再使用gpstate
会报错:
gpstate:lhrgp40:gpadmin-[CRITICAL]:-gpstate failed. (Reason='Invalid GpArray: Master: lhrgp40:/opt/greenplum/data/master/gpseg-1:content=-1:dbid=1:role=p:preferred_role=p:mode=n:status=u
Standby: Not Configured
Segment Pairs: (Primary: lhrgp41:/opt/greenplum/data/primary/gpseg0:content=0:dbid=2:role=p:preferred_role=p:mode=s:status=u, Mirror: None)
(Primary: lhrgp42:/opt/greenplum/data/primary/gpseg1:content=1:dbid=3:role=p:preferred_role=p:mode=s:status=u, Mirror: None)') exiting...
目前没找到对应的办法,所以非必要不删除mirror。
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 |