Greenplum的启动和关闭
简介
在一个Greenplum数据库管理系统中,所有主机上的数据库实例(Master和所有的Segment)一起被启动或者停止,启停操作统一由Master实例发起,它们步调一致,在外界看来是一个完整的数据库管理系统。
由于一个Greenplum数据库系统分布在很多机器上,启动和停止一个Greenplum数据库系统的过程与普通PostgreSQL数据库的启动和停止过程不同。
分别使用gpstart
和 gpstop
工具来启动和停止Greenplum数据库。这些工具位于Greenplum数据库Master主机的 $GPHOME/bin 目录下。
Important: 不要采用kill命令来直接杀掉任何后台Postgres进程。 可以使用数据库内命令pg_cancel_backend()来完成此操作。
采用 kill -9 或 kill -11 可能引发数据库损坏并且妨碍根据目前数据库的表现进行问题根源分析。
启动Greenplum数据库
在Master实例上,通过执行gpstart
可以启动一个初始化好的Greenplum数据库系统。
可以使用gpstart
工具来启动一个已经由gpinitsystem工具初始化好的Greenplum数据库系统,前提是该系统已经被gpstop工具停止。 gpstart
通过启动整个Greenplum数据库集群中的所有Postgres数据库实例来启动Greenplum数据库。 gpstart
会精心安排这一过程并且以并行的方式执行它。
在Master主机上运行gpstart
以启动一个Greenplum数据库:
1 | $ gpstart |
重启Greenplum数据库
停止Greenplum数据库系统然后重新启动它。
执行gpstop工具并带有-r选项时,会停止Greenplum数据库并在数据库完全关闭后重新启动它。
要重启Greenplum数据库,在Master主机上输入下面的命令:
1 | $ gpstop -r |
仅重新载入配置文件更改
重新载入对Greenplum数据库配置文件的更改而不中断系统。
gpstop 工具可以在不中断服务的前提下重新载入对 pg_hba.conf配置文件和Master上postgresql.conf、 pg_hba.conf文件中的运行参数进行更改。 活动会话将会在它们重新连接到数据库时使用这些更新。 很多服务器配置参数需要完全重启系统(gpstop -r)才能激活。
使用gpstop工具重新载入配置文件更改而不关闭系统:
1 | $ gpstop -u |
以维护模式启动Master
只启动Master来执行维护或者管理任务而不影响Segment上的数据。
例如,可以用维护模式连接到一个只在Master实例上的数据库并且编辑系统目录设置。
使用-m模式运行
gpstart
:1$ gpstart -m以维护模式连接到Master进行目录维护。例如:
1$ PGOPTIONS='-c gp_session_role=utility' psql postgres在完成管理任务后,停止处于维护模式的额Master。然后以生产模式重启它。
1$ gpstop -mrWarning:
对维护模式连接的不当使用可能会导致不一致的系统状态。只有技术支持才应该执行这一操作。
停止Greenplum数据库
gpstop工具可以停止或者重启Greenplum数据库系统,它总是运行在Master主机上。 当被激活时,gpstop 会停止系统中所有的postgres进程,包括Master和所有的Segment实例。 gpstop工具使用一种默认的最多64个并行工作线程的方式来关闭构成整个Greenplum数据库集群的Postgres实例。 系统在关闭之前会等待所有的活动事务完成。要立即停止Greenplum数据库,可以使用快速模式。
要停止Greenplum数据库:
1$ gpstop要以快速模式停止Greenplum数据库:
1$ gpstop -M fast默认情况下,如果有任何客户端连接存在,就不允许关闭Greenplum数据库。 使用-M fast选项可以在关闭前回滚所有正在进行中的事务并且中断所有连接。
停止客户端进程
Greenplum数据库会为每一个客户端连接唤起一个后台进程。具有SUPERUSER权限的Greenplum用户可以取消或直接终止这些客户端后台进程。
使用pg_cancel_backend()函数可以取消某个活动查询或队列中的后台进程。使用pg_terminate_backend()可以直接终端访问Greenplum数据库的客户端连接。
pg_cancel_backend()函数有两种表现形式:
- pg_cancel_backend( pid int4 )
- pg_cancel_backend( pid int4, msg text )
pg_terminate_backend()函数也有两种同样地表现形式:
- pg_terminate_backend( pid int4 )
- pg_terminate_backend( pid int4, msg text )
如果提供了msg信息, Greenplum数据库会将取消信息的msg内容一并返回给客户端。msg 最大为128字节; 任何超出该长度的信息都会被Greenplum数据库直接截断。
如果pg_cancel_backend()和pg_terminate_backend()函数执行成功,会返回状态true, 相反的会返回false。
区别:pg_cancel_backend 只是取消当前某一个进程的查询操作,但不能释放数据库连接。但pg_terminate_backend可以在pg的后台杀死这个进程,从而释放出宝贵的连接资源,类似于kill -9 pid操作。
要取消或中断后台进程,必须先查出要处理的后台进程ID。进程ID可以从pg_stat_activity视图的pid列得到。 例如,如果要看所有运行中和等待中查询的进程信息,可以执行:
1 | SELECT usename, pid, waiting, query, datname FROM pg_stat_activity; |
上例语句部分查询结果如下:
1 2 3 4 | usename | pid | waiting | query | datname ---------+----------+---------+-----------------------+--------- sammy | 31861 | f | <IDLE> in transaction | testdb billy | 31905 | t | SELECT * FROM topten; | testdb |
我们可以从查询结果中找到对应查询或客户端连接的进程ID(pid)。
例如,下面语句会取消上面输出中的等待查询,并将”Admin canceled long-running query.”信息反馈给客户端。
1 2 | =# SELECT pg_cancel_backend(31905 ,'Admin canceled long-running query.'); ERROR: canceling statement due to user request: "Admin canceled long-running query." |
gpstart详解
启动一个Greenplum数据库系统。
命令
1 2 3 4 5 6 | gpstart [-d master_data_directory] [-B parallel_processes] [-R] [-m] [-y] [-a] [-t timeout_seconds] [-l logfile_directory] [--skip-heap-checksum-validation] [-v | -q] gpstart -? | -h | --help gpstart --version |
描述
gpstart
工具用于启动Greenplum数据库服务器进程。当用户启动一个Greenplum 数据库系统时,用户实际上是同时启动了几个postgres数据库服务器监听器进程 (Master和所有的Segment实例)。gpstart
工具处理各个实例的启动。每个实例 都是并行启动的。
管理员第一次运行gpstart
时,该工具将在用户的主目录中创建一个名为 .gphostcache的主缓存文件。随后,该工具使用此主机列表更有效地启动系统。 如果将新主机添加到系统中,则必须手动从gpadmin用户的主目录中删除此文件。 该工具将在下次启动时创建一个新的主机缓存文件。
作为启动过程的一部分,该工具会检查堆表checksum设置是否在集群上启用。如果堆表checksum启用情况 在各个实例之间不同,Greenplum数据库不会启动,会返回一个错误信息。该验证选项可以通过指定选项 --skip-heap-checksum-validation来停用。更多关于堆表checksum的情况, 请见Greenplum数据库管理员指南中的启用高可用和数据一致性特性部分。
Note: 在启动Greenplum数据库系统之前,用户必须首先使用gpinitsystem初始化系统。 堆表checksum特性在系统初始化时配置启用和禁用,系统初始化后不能修改。
选项
-a
不要提示用户确认。
-B parallel_processes
并行启动的Segment数。如果未指定,则该工具将启动最多64个并行进程,具体取决于需要启动 多少个Segment实例。
-d master_data_directory
可选。Master主机的数据目录。如果未指定,则使用为$MASTER_DATA_DIRECTORY 设置的值。
-l logfile_directory
写入日志文件的目录。默认为~/gpAdminLogs。
-m
可选。仅启动Master实例,这可能对维护任务有用。该模式只允许连接到utility 模式下的Master。例如:
1 | PGOPTIONS='-c gp_session_role=utility' psql |
此模式下不检查Master和Segment实例的堆表checksum设置一致性。
-q
以静默模式运行。命令输出不显示在屏幕上,但仍然写入日志文件。
-R
以受限模式启动Greenplum数据库(只允许数据库超级用户连接)。
--skip-heap-checksum-validation
启动时指定该选项,该工具不检查Master和Segment之间的堆表checksum一致性。 默认情况下该设置在所有实例上是一样的,或者启用或者禁用。
Warning: 不进行该项验证启动Greenplum数据库会导致数据丢失。 只有在必须要忽略堆表checksum验证错误以恢复数据或进行错误调试时,才能 使用该选项。
-t timeout_seconds
指定等待Segment实例启动的超时时间(秒)。如果某个Segment实例异常关闭 (例如由于电源故障或终止其postgres数据库监听器进程), 由于数据库恢复和验证过程,启动可能需要较长的时间。如果未指定,则默认超时 时间为60秒。
-v
显示工具输出的详细状态,进度和错误消息。
-y
可选。不启动后备Master主机。默认是启动后备Master主机和同步过程。
-? | -h | —help
显示在线帮助。
--version
显示工具的版本。
示例
启动Greenplum数据库系统:
1 | gpstart |
以受限模式启动Greenplum数据库系统(仅允许超级用户连接):
1 | gpstart -R |
仅启动Greenplum主实例并以utility模式连接:
1 | gpstart -m PGOPTIONS='-c gp_session_role=utility' psql |
gpstop详解
停止或者重启Greenplum数据库系统。
概要
1 2 3 4 5 6 7 8 9 | gpstop [-d master_data_directory] [-B parallel_processes] [-M smart | fast | immediate] [-t timeout_seconds] [-r] [-y] [-a] [-l logfile_directory] [-v | -q] gpstop -m [-d master_data_directory] [-y] [-l logfile_directory] [-v | -q] gpstop -u [-d master_data_directory] [-l logfile_directory] [-v | -q] gpstop --host host_name [-d master_data_directory] [-l logfile_directory] [-t timeout_seconds] [-a] [-v | -q] gpstop --version gpstop -? | -h | --help |
描述
gpstop工具用于停止构成Greenplum数据库系统的数据库服务器。当用户停止一个 Greenplum数据库系统时,用户实际上是一次停止几个postgres数据库服务器进程 (Master和所有的Segment实例)。gpstop工具处理个别实例的关闭。每个实例 被并行地关闭。
默认情况下,如果有任何客户端连接到数据库,则不允许关闭Greenplum数据库。使用-M fast 选项来回滚所有正在进行的事务,并在关闭之前终止所有连接。如果有任何事务正在进行,则默认行为是 在关闭之前等待它们提交。
使用-u选项时, 该工具会上传对主pg_hba.conf文件所做的更改, 或者在postgresql.conf文件中将运行时配置参数上载到服务中。请注意, 任何活动的会话在重新连接到数据库之前都不会获取更改。
选项
-a
不要提示用户确认。
-B parallel_processes
并行停止的Segment数。如果未指定,则工具将启动最多64个并行进程,具体取决于需要停止 多少个Segment实例。
-d master_data_directory
可选。Master主机的数据目录。如果未指定,则使用为$MASTER_DATA_DIRECTORY 设置的值。
--host host_name
The utility shuts down the Greenplum Database segment instances on the specified host to allow maintenance on the host. Each primary segment instance on the host is shut down and the associated mirror segment instance is promoted to a primary segment if the mirror segment is on another host. Mirror segment instances on the host are shut down.
The segment instances are not shut down and the utility returns an error in these cases:
- Segment mirroring is not enabled for the system.
- The master or standby master is on the host.
- Both a primary segment instance and its mirror are on the host.
This option cannot be specified with the -m, -r, -u, or -y options.
Note: The gprecoverseg utility restores segment instances. Run gprecoverseg commands to start the segments as mirrors and then to return the segments to their preferred role (primary segments).
-l logfile_directory
写入日志文件的目录。默认为~/gpAdminLogs。
-m
可选。关闭在维护模式下启动的Greenplum主实例。
-M fast
快速关闭。任何正在进行的事务都会中断并回滚。
-M immediate
立即关闭。任何正在进行的事务都会中止。
该模式杀死所有postgres进程,而不允许数据库服务器完成事务处理 或清理任何临时或进程内工作文件。
-M smart
智能关闭。如果存在活动连接,则此命令将失败并显示警告。这是默认的关闭模式。
-q
以静默模式运行。命令输出不显示在屏幕上,但仍然写入日志文件。
-r
关机完成后重新启动。
-t timeout_seconds
指定等待Segment实例关闭的超时阈值(以秒为单位)。如果Segment实例没有在指定的秒数内关闭, gpstop将显示一条消息,指示一个或多个Segment仍处于关闭过程中,并且 直到Segment实例停止后才能重新启动Greenplum数据库。这个选项在gpstop 被执行且有非常大的事务需要回滚的情况下非常有用。这些大型事务可能需要一分钟才能回滚,并超过 600秒的默认超时时间。
-u
此选项将重新加载Master和Segment的pg_hba.conf文件以及 postgresql.conf文件的运行时参数,但不会关闭数据库阵列。 编辑postgresql.conf或pg_hba.conf 之后,使用此选项可使新的配置设置处于活动状态。请注意,这仅适用于设计为运行时 的配置参数。
-v
显示工具输出的详细状态,进度和错误消息。
-y
不要停止后备Master进程。默认是停止后备Master。
-? | -h | —help
显示在线帮助。
--version
显示工具的版本。
示例
在智能模式下关闭Greenplum数据库系统:
1 | gpstop |
在快速模式下关闭Greenplum数据库系统:
1 | gpstop -M fast |
停止所有的Segment实例,然后重新启动系统:
1 | gpstop -r |
停止在维护模式下启动的Master实例:
1 | gpstop -m |
在进行配置更改后重新加载postgresql.conf和pg_hba.conf 文件,但不要关闭Greenplum数据库阵列:
1 | gpstop -u |
总结
1、启动和关闭的常见命令如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -- 启动 gpstart -a -- 关闭 gpstop -M fast -a -- 重载配置文件 gpstop -u -- 重启 gpstop -ra -- 不用输入Y进行确定而直接重启 gpstop -M fast -ra |
参考
https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/80af26cfee60eab5.md
https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/f1b84f5cd1e53e5d.md
https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/265c08537b4a8724.md