原 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秒。