初始化新Segment

初始化新Segment

使用gpexpand工具初始化新的Segment,创建扩展方案并且为数据库设置一种系统范围的随机分布策略。

当用户第一次用一个合法的输入文件运行gpexpand时,它会创建扩展方案并且把所有的表的分布策略设置为DISTRIBUTED RANDOMLY。在这些步骤完成后,运行gpexpand可检测扩展模式是否已经被创建,如果已经创建则还会执行表的重新分布。

为系统扩展创建一个输入文件

要开始扩展,gpexpand要求一个包含有关新Segment和主机信息的输入文件。如果用户运行gpexpand但不指定输入文件,该工具会显示一个交互式的问讯来收集所需的信息并且自动创建一个输入文件。

如果用户使用交互式问讯创建输入文件,用户可以在问讯提示符中指定一个含有扩展主机列表的文件。如果用户的平台或者命令shell限制主机列表的长度,使用-f指定主机就是唯一的办法。

在交互模式中创建一个输入文件

在用户运行gpexpand在交互模式中创建一个输入文件之前,确保用户了解:

  • 新主机的数量(或者一个主机文件)
  • 新主机名(或者一个主机文件)
  • 现有主机中使用的镜像策略(如果有)
  • 每个主机要增加的Segment数量(如果有)

该工具会基于这些信息、dbidcontent ID以及gp_segment_configuration中存储的数据目录值自动生成一个输入文件,并将该文件保存在当前目录中。

要在交互模式中创建一个输入文件

  1. 以将要运行用户的Greenplum数据库系统的用户(例如gpadmin)登入Master主机。
  2. 运行gpexpand。该工具显示关于如何准备一次扩展操作的消息,并且它会提示用户退出或者继续。

    可以选择用-f指定一个主机文件。例如:

    $ gpexpand -f /home/gpadmin/new_hosts_file
  3. 在该提示符中,选择Y以继续。
  4. 除非用户用-f指定了一个主机文件,用户会被提示输入主机名。可以输入新扩展主机的主机名组成的由逗号分隔的列表。不要包括接口主机名。例如:
    > sdw4, sdw5, sdw6, sdw7

    如果只对现有主机增加Segment,在这个提示符处留一个空行。不要指定 localhost或者任何现有的主机名。

  5. 输入在用户的系统中使用的镜像策略(如果有)。选项是 spread|grouped|none。默认设置是 grouped

    确保用户有足够的主机用于选中的组策略。更多有关镜像的信息请见规划镜像Segment

  6. 输入要增加的主要Segment的数量(如果有)。默认情况下,新主机会被用与现有主机相同数量的主要Segment初始化。输入一个大于零的数字可以为每个主机增加Segment数量。用户输入的数字将是在所有主机上初始化的额外Segment的数量。例如,如果现有主机当前每个有两个Segment,输入一个值 2会在现有主机上多初始化两个Segment,而在新主机上会初始化四个Segment。
  7. 如果用户在增加新的主要Segment,为这些新的Segment输入新的主要数据目录的根目录。不要指定真实的数据目录名称,目录会由gpexpand 基于现有数据目录名称自动创建。

    例如,如果用户的现有数据目录像下面这样:

    /gpdata/primary/gp0
    /gpdata/primary/gp1

    那么输入下面的内容(每一个提示输入一个)来指定两个新的主要Segment的数据目录:

    /gpdata/primary
    /gpdata/primary

    当初始化运行时,该工具会在/gpdata/primary下面创建新目录 gp2以及gp3

  8. 如果用户在增加新的镜像Segment,为这些新的Segment输入新的镜像数据目录的根目录。不要指定数据目录名称,目录会由gpexpand 基于现有数据目录名称自动创建。

    例如,如果用户的现有数据目录像下面这样:

    /gpdata/mirror/gp0
    /gpdata/mirror/gp1

    输入下面的内容(每一个提示输入一个)来指定两个新的镜像Segment的数据目录:

    /gpdata/mirror
    /gpdata/mirror

    当初始化运行时,该工具会在/gpdata/mirror下面创建新目录gp2以及gp3

    这些新Segment的主要和镜像根目录必须在主机上存在,并且运行gpexpand的用户必须具有在其中创建目录的权限。

    在用户已经输入所有要求的信息后,该工具会生成一个输入文件并且把它保存在当前目录中。例如:

    gpexpand_inputfile_yyyymmdd_145134

扩展输入文件的格式

除非用户的扩展场景有非典型的需求,请使用交互式问讯过程来创建用户自己的输入文件。

扩展输入文件的格式是:

hostname:address:port:fselocation:dbid:content:preferred_role:replication_port

例如:

sdw5:sdw5-1:50011:/gpdata/primary/gp9:11:9:p:53011
sdw5:sdw5-2:50012:/gpdata/primary/gp10:12:10:p:53011
sdw5:sdw5-2:60011:/gpdata/mirror/gp9:13:9:m:63011
sdw5:sdw5-1:60012:/gpdata/mirror/gp10:14:10:m:63011

对于每一个新的Segment,这种格式的扩展输入文件要求下列内容:

表 1. 用于扩展配置文件的数据
参数 合法值 描述
hostname 主机名 Segment主机的主机名。
port 一个可用的端口号 Segment的数据库监听器端口,在现有Segment的port基数上增加。
fselocation 目录名 一个Segment的数据目录(文件空间)位置,这对应着pg_filespace_entry系统目录中有关该Segment的记录。
dbid 整数。不能与现有的dbid值冲突。 用于该Segment的数据库ID。用户输入的值应该是从系统目录gp_segment_configuration中显示的现有dbid值开始顺序增加的值。例如,要在一个现有10个Segment的阵列(dbid 值从1-10)中增加四个节点,应列出新的dbid值11、12、13和14。
content 整数。不能和现有的content值冲突。 Segment的内容ID。一个主要Segment和它的镜像应该具有相同的内容ID,并且从现有的值开始顺序增加。更多信息请见gp_segment_configuration的参考信息中的content
preferred_role p | m 决定这个Segment是主要还是镜像。指定p表示主要,指定m表示镜像。
replication_port 一个可用的端口号 用于该Segment的文件复制端口,在现有Segment的replication_port基数上增加。

运行gpexpand初始化新Segment

在用户创建了一个输入文件之后,运行gpexpand以初始化新的Segment。当处理结束时,该工具自动停止Greenplum数据库Segment初始化并且重启系统。

要用一个输入文件运行gpexpand

  1. 以将要运行用户的Greenplum数据库系统的用户(例如gpadmin)登入Master主机。
  2. 运行gpexpand工具,用-i指定输入文件。可以选择使用-D指定在哪个数据库中创建扩展方案。例如:
    $ gpexpand -i input_file -D database1

    该工具会检测是否存在一个用于该Greenplum数据库系统的扩展方案。如果存在一个方案,在用户开始一次新的扩展操作前使用gpexpand -c移除它。参见移除扩展方案

    当新的Segment被初始化并且扩展方案被创建时,该工具会打印一个成功消息并且退出。

当初始化处理完成时,用户可以连接到Greenplum数据库并且查看扩展方案。该方案位于用户用 -D或者用PGDATABASE环境变量指定的数据库中。更多信息请见关于扩展方案

回滚一个失败的扩展设置

只有当一次扩展操作失败时,用户才能回滚它。

如果扩展在初始化步骤失败,而数据库没有启动,用户必须首先通过运行gpstart -m命令以master-only模式重启数据库。

用下列命令回滚失败的扩展,指定包含扩展方案的数据库:
gpexpand --rollback -D database_name