暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【玩转OceanBase笔记46】如何启动或停止 OBServer 运行?

1136

您可以根据数据库的运行情况,启动或停止 OBServer 的运行。

通过 SQL 语句停止 OBServer

停止 OBServer 主要包含以下 2 个 操作:

  • 停止节点服务,即 Stop Server 操作

  • 停止 observer 进程

停止节点服务

您可以通过对 OBServer 执行 Stop Server 操作来停止节点服务。Stop Server 操作的目的是将该 OBServer 上的分区 Leader 切到其他节点。当该 OBServer 上没有分区 Leader 的情况下,系统将内部标记 OBServer 为 stop 状态,客户端请求不会再次发送到该 OBServer,该 OBServer 也不会再对外提供服务。

关于 OBServer 状态的更多说明请参见 查看 OBServer 状态

Stop Server 操作通常是特殊运维操作时执行,例如机器硬件维修、替换和升级,或者对该 Server 进行诊断等而进行的动作。

Stop Server 操作的语句如下:

obclient> ALTER SYSTEM STOP SERVER 'ip:port' [,'ip:port'...] [ZONE='zone'];

该语句仅支持在 sys 租户中执行。

在执行 Stop Server 操作前,需要确认分区副本满足多数派。

此外,执行 Stop Server 操作时,还需要注意以下事项:

  • 不能跨 Zone 执行 Stop Server 操作,同一个 Zone 可以同时 Stop 多个 Server。

  • 一个 Stop 操作发起没有结束前,不能发起第二个操作。

  • 如果分区数多,或者被 Stop Server 的节点分区的 Leader 数量多, Stop Server 操作时间会比较长,如果超时,可以加大 SQL 超时时间。

    SQL 超时时间可通过租户变量 ob_query_timeout 来设置,该变量的默认值为 10000000,单位为微秒,具体设置方法可参见 设置变量

    更多变量 ob_query_timeout 的介绍信息请参见 ob_query_timeout 。

  • 如果命令很快执行失败,那么可能是日志不同步,需要查询 oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY 视图,确认是否有 Stop Server 的记录。如果没有记录,则说明在 RS 没执行 Stop Server 操作前就失败了;如果有记录,则说明是日志不同步导致 Stop Server 操作执行失败。

    查询示例如下:

    obclient> SELECT rs_svr_ip FROM oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY WHERE event='stop_server';
    +----------------+
    | RS_SVR_IP      |
    +----------------+
    | xxx.xx.xxx.xx5 |
    | xxx.xx.xxx.xx5 |
    +----------------+
    2 rows in set
    
  • 执行 Stop Server 操作后,oceanbase.DBA_OB_SERVERS 视图中该 Server 的 status 字段仍为 Active 不变,但 stop_time 字段的值由 NULL 变为 Stop Server 的时间点,同时 OBServer 处于 stop 状态。

    更多 OBServer 状态的介绍和查看相关操作请参见 查看 OBServer 状态

示例:

  1. 使用 root 用户登录数据库的 sys 租户。

  2. 执行以下 SQL 语句,停止节点服务。

    obclient> ALTER SYSTEM STOP SERVER "10.10.10.1:2882" zone='z1';
    

    停止节点服务后,如果该节点上有主副本,则系统会自动切换为备副本,且节点的备副本依然可以参与投票,但不会当选为主副本。节点服务停止与 OBServer 宕机性质不同,节点停止服务的时间可以超出配置项 server_permanent_offline_time 指定的永久下线时间且不会导致节点真的下线。

    说明

    配置项 server_permanent_offline_time 用于设置节点心跳中断的时间阈值,即节点心跳中断多久后认为其被永久下线,永久下线的节点上的数据副本需要被自动补足。

停止 observer 进程

  1. 使用 admin 用户登录 OBServer 所在的机器。

  2. 通过命令行工具进入 /home/admin/oceanbase/bin 目录。

  3. 运行以下命令,停止 observer 进程。

    kill `pidof observer`
    
  4. 运行以下命令,确认进程是否已停止。

    ps -ef | grep observer | grep -v grep
    

    如果命令执行后没有返回信息,则表示进程停止成功。

通过 SQL 语句启动 OBServer

启动 OBServer 主要包含以下 2 个操作:

  • 启动 observer 进程

  • 启动节点服务,即 Start Server 操作

启动 observer 进程

某些特殊情况下,您可以通过命令启动 observer 进程。

  1. 使用 admin 用户登录 OBServer 所在的机器。

  2. 通过命令行工具进入 /home/admin/oceanbase/bin 目录。

  3. 运行以下命令,启动 observer 进程。

    cd /home/admin/oceanbase/
    
    ./bin/observer [启动参数]
    

    通常仅在第一次启动时,需要添加启动参数,其他时候启动时,可直接使用 ./bin/observer 命令启动 observer 进程。同时,您还可以运行 ./bin/observer --help 查看 observer 启动参数的详细信息。

    第一次启动 observer 进程的命令示例如下:

    cd /home/admin/oceanbase/bin
    
    ./observer -p 2881 -P 2882 -z 'zone_1' -d '/data/1/prod_data/' -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -l WARN -d '/data/1/prod_data' -o 'memory_limit=100GB,datafile_disk_percentage=85'
    

    其中:

    • 2881:表示 MySQL 的访问端口。

    • 2882:表示远程访问端口。

    • zone_1:表示 Zone 名称。

    • /data/1/prod_data:表示数据盘目录。

    • datafile_disk_percentage=85:表示数据盘的占用比率为 85%。

    • 10.10.10.1 和 10.10.10.2 和 10.10.10.3:表示 RootServer 列表。

    • memory_limit=100GB:表示进程启动内存上限为 100 GB。

    • WARN:表示日志级别为 WARNING 级别。

    • 使用 -o 参数时,需满足以下条件:

      • 不分大小写,但是建议按照 observer.config.bin 中的变量名称来写。

      • 参数不能包含以下特殊字符:空格、\r\n\t

      • 参数名和参数值中间必须有等号(=)。

      • 参数之间使用逗号(,)进行分割。

  4. 进程启动后,5~10 秒钟后,执行以下命令,确认进程是否启动成功。

    1. 执行以下命令,确认进程是否已存在。

      示例如下:

      [root@xx oceanbase]#ps -ef | grep observer | grep -v grep
      root       6136      0 99 11:23 ?        00:00:19 ./bin/observer
      

      示例中,命令执行后有返回信息,表示进程已启动成功。如果命令执行后没有返回信息,则表示进程未启动成功。

    2. 执行以下命令,确认端口监听是否成功。

      示例如下:

      [root@xxx oceanbase]#netstat -ntlp | grep `pidof observer`
      tcp        0      0 0.0.0.0:2881            0.0.0.0:*               LISTEN      6136/./bin/observer
      tcp        0      0 0.0.0.0:2882            0.0.0.0:*               LISTEN      6136/./bin/observer
      

      示例中,6136/./bin/observer 中的 6136 表示 observer 的进程 ID,从执行结果可知,端口监听成功。

启动节点服务

一般情况下,您可以通过 Start Server 操作来启动节点服务。Start Server 操作对应 Stop Server 操作。集群中的 OBServer 启动后,通常默认状态为 started。如果执行过 Stop Server 操作,则需要通过 Start Server 操作将 Server 状态置为 started

启动节点服务的语句如下:

obclient> ALTER SYSTEM START SERVER 'ip:port' [,'ip:port'...] [ZONE='zone'];

该语句仅支持在 sys 租户中执行。

示例:

  1. 使用 root 用户登录数据库的 sys 租户。

  2. 执行以下 SQL 语句,启动节点服务。

    obclient> ALTER SYSTEM START SERVER "10.10.10.1:2882";
    
  3. 执行以下 SQL 语句,查看节点服务是否已经正常。

    示例如下:

    obclient> SELECT * FROM oceanbase.DBA_OB_SERVERS\G
       *************************** 1. row ***************************
                   SVR_IP: xx.xx.xx.xx
                SVR_PORT: 2882
                      ID: 1
                   ZONE: zone1
                SQL_PORT: 2881
          WITH_ROOTSERVER: YES
                   STATUS: ACTIVE
       START_SERVICE_TIME: 2022-06-17 11:30:04.589074
                STOP_TIME: NULL
    BLOCK_MIGRATE_IN_TIME: NULL
       LAST_OFFLINE_TIME: NULL
          BUILD_VERSION: 4.0.0.0_20220525115829-1873fc2598d56060fe307ce3b7b88647686e0b09(May 25 2022 12:12:10)
    1 row in set
    

    其中:

    • status:表示节点服务的状态,一般有以下几种状态:

      • active:表示该 OBServer 节点为正常状态。

      • inactive:表示该 OBServer 节点为下线状态,集群升级过程中该值为 inactive

    • start_service_time:表示节点启动服务的时间。如果该值是 NULL;则表示该节点的服务还没有启动。

    • stop_time:表示节点停止时间,该时间应该是默认值 NULL,如果不是,则表示该节点被停止服务(Stop Server 操作)了,需要先启动服务(Start Server)。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论