初始化新节点

使用gpexpand工具创建并初始化新节点实例,并创建扩容schema。

第一次用一个合法文件运行gpexpand工具,它会创建并初始化节点实例并创建扩容schema。 这些过程完成后,运行gpexpand检测扩容schema是否被创建,如果成功则做表重分布。

Parent topic: 扩容Greenplum系统

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

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

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

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

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

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

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

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

  1. 使用将要运行Greenplum数据库的用户登录master主机;例如,gpadmin。
  2. 运行gpexpand。该工具显示关于如何准备一次扩容操作的消息,并且它会提示用户退出或者继续。

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

    1. $ gpexpand -f /home/gpadmin/new_hosts_file
  3. 在交互中,输入Y以继续。

  4. 除非用户用-f指定了一个主机文件,用户会被提示输入主机名。 可以输入新扩容主机的主机名组成的由逗号分隔的列表。 不要包括接口主机名。例如:

    1. > sdw4, sdw5, sdw6, sdw7

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

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

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

  6. 输入要增加的主节点的数量(如果有)。 默认情况下,新主机会被用与现有主机相同数量的主节点初始化。 输入一个大于零的数字可以为每个主机增加节点数量。 用户输入的数字将是在所有主机上初始化的额外节点的数量。 例如,如果现有每个主机当前有两个节点,输入一个值2会在现有主机上多初始化两个节点,而在新主机上会初始化四个节点。

  7. 如果用户在增加新的主节点,为这些新的节点输入新的主数据目录的根目录。 不要指定真实的数据目录名称,目录会由gpexpand基于现有数据目录名称自动创建。

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

    1. /gpdata/primary/gp0
    2. /gpdata/primary/gp1

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

    1. /gpdata/primary
    2. /gpdata/primary

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

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

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

    1. /gpdata/mirror/gp0
    2. /gpdata/mirror/gp1

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

    1. /gpdata/mirror
    2. /gpdata/mirror

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

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

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

    1. gpexpand_inputfile_yyyymmdd_145134

扩容输入文件格式

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

扩容输入文件格式:

  1. hostname:address:port:datadir:dbid:content:preferred_role

例如:

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

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

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

运行gpexpand初始化新节点

在用户创建了一个输入文件之后,运行gpexpand以初始化新的节点。

用一个输入文件运行gpexpand

  1. 使用将要运行Greenplum数据库的用户登录master主机;例如,gpadmin。
  2. 运行gpexpand工具,通过-i指定输入文件。例如:

    1. $ gpexpand -i input_file

    工具检测扩容schema是否存在。 如果gpexpand schema存在,在开始一个新扩容操作前通过gpexpand -c删除它。 参考移除扩容Schema

    当新的节点被初始化并且扩容schema被创建时,该工具会打印一个成功消息并且退出。

当初始化完成,可以连到数据库查看扩容schema。 gpexpand schema存在于postgres数据库中。 更多的信息请参考关于扩容Schema

回滚一个失败的扩容设置

可以回滚一个扩容操作(增加节点实例和主机),仅当它失败的时候。

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

用下列命令回滚失败的扩容:

  1. gpexpand --rollback

监控集群扩容状态

在任何时候,可以运行带有-x标记的gpstate命令来检查集群扩容状态:

  1. $ gpstate -x

如果扩容schema存在于postgres数据库,gpstate -x报告扩容的进度。 在扩容的第一阶段,gpstate报告节点初始化的进度。 在第二阶段,gpstate报告表重分布的进度,和重分布是否暂停或运行。

还可以通过查询扩容schema来查看扩容状态。参考监控表的重分布获取更多信息。