OceanBase集群操作

OceanBase 集群由若干个 Zone 组成。从物理层面来讲,一个 Zone 通常是一个独立的物理部署单元,可以是一个数据中心(IDC)或者云上的一个 Zone(可用区),也可以是一个单独的机架(Rack)。通过将 OceanBase 集群部署于不同的 Zone,实现单个 Zone 故障时的故障隔离及快速恢复。

操作步骤

  1. 使用 root 用户登录到集群的 sys 租户。

    连接示例如下,连接数据库时请以实际环境为准。

    obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A
    

    有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)

  2. 查询 oceanbase.DBA_OB_ZONES 视图,获取集群中的 Zone 信息。

    obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_ZONES;
    +-------+----------------------------+----------------------------+----------+-----+----------+-----------+
    | ZONE  | CREATE_TIME                | MODIFY_TIME                | STATUS   | IDC | REGION   | TYPE      |
    +-------+----------------------------+----------------------------+----------+-----+----------+-----------+
    | zone1 | 2022-12-20 17:50:17.168745 | 2022-12-20 17:50:40.801054 | ACTIVE   | HZ0 | hangzhou | ReadWrite |
    | zone2 | 2022-12-20 17:50:17.168745 | 2022-12-20 17:50:40.809504 | ACTIVE   | HZ0 | hangzhou | ReadWrite |
    | zone3 | 2022-12-20 17:50:17.169804 | 2023-01-11 17:28:57.211079 | ACTIVE   | HZ1 | hangzhou | ReadWrite |
    | zone4 | 2023-01-06 15:30:30.887362 | 2023-01-06 15:30:30.888420 | INACTIVE | hz1 | hangzhou | ReadWrite |
    +-------+----------------------------+----------------------------+----------+-----+----------+-----------+
    4 rows in set
    

    查询结果中的字段说明如下:

    • ZONE: Zone 名称。

    • STATUS: Zone 状态。

      • ACTIVE :表示该 Zone 为可用状态。

      • INACTIVE :表示该 Zone 为不可用状态。用于客户端识别该状态并将业务流程路由到其他 Zone。

        新增 Zone 或对 Zone 执行隔离命令(Stop Zone/Force Stop Zone/Isolate Zone)后,该 Zone 的状态会变为 INACTIVE。通常出现在故障隔离或运维变更等场景。

    • IDC:Zone 所在的机房名。

    • REGION:Zone 所在的区域,通常为城市名(例如,上海)或者区域名(例如,华东)。

    • TYPE:Zone 类型,ReadWrite 表示读写类型,当前版本仅支持读写类型的 Zone。

OceanBase 数据库是单进程软件,进程名为 observer。通常一台物理或者虚拟服务器运行一个 observer 进程,由 IP 和端口作为唯一标识,称之为节点。

操作步骤

  1. 使用 root 用户登录到集群的 sys 租户。

    连接示例如下,连接数据库时请以实际环境为准。

    obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A
    

    有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)

  2. 查询 DBA_OB_SERVERS 视图,获取集群中的所有节点信息。

    obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_SERVERS;
    +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+
    | SVR_IP      | SVR_PORT | ID | ZONE         | SQL_PORT | WITH_ROOTSERVER | STATUS | START_SERVICE_TIME         | STOP_TIME | BLOCK_MIGRATE_IN_TIME | CREATE_TIME                | MODIFY_TIME                | BUILD_VERSION                                                                             |
    +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+
    | 172.xx.xx.xx|     2882 |  3 | sa128_obv4_3 |     2881 | NO              | ACTIVE | 2022-11-14 12:28:49.796499 | NULL      | NULL                  | 2022-11-03 15:37:09.530894 | 2022-11-14 12:28:50.795464 | 4.0.0.0_100000302022111120-7cef93737c5cd03331b5f29130c6e80ac950d33b(Nov 11 2022 20:38:33) |
    | 172.xx.xx.xx|     2882 |  1 | sa128_obv4_1 |     2881 | NO              | ACTIVE | 2022-11-14 11:57:31.763941 | NULL      | NULL                  | 2022-11-03 15:37:08.990683 | 2022-11-14 11:57:32.762787 | 4.0.0.0_100000302022111120-7cef93737c5cd03331b5f29130c6e80ac950d33b(Nov 11 2022 20:38:33) |
    | 172.xx.xx.xx|     2882 |  2 | sa128_obv4_2 |     2881 | YES             | ACTIVE | 2022-11-14 11:35:34.223948 | NULL      | NULL                  | 2022-11-03 15:37:09.490511 | 2022-11-14 11:37:26.542479 | 4.0.0.0_100000302022111120-7cef93737c5cd03331b5f29130c6e80ac950d33b(Nov 11 2022 20:38:33) |
    +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+
    3 rows in set
    

    查询结果中的相关字段说明如下:

    • SVR_IP:节点 IP。

    • SVR_PORT:节点的 RPC 端口。

    • ZONE:节点所在的 Zone。

    • SQL_PORT:节点的 SQL 端口,可以使用该端口通过直连方式连接 OceanBase 数据库。

    • WITH_ROOTSERVER:该节点是否为集群 RS(RootServer),RS 负责处理集群管理操作。

    • STATUS:节点的状态。

      • ACTIVE:表示该节点为可用状态。

      • INACTIVE:表示该节点为宕机状态。

      • DELETING:表示该节点正在被删除。

    • STOP_TIME:用户主动停止节点服务的时间点。如果值为 NULL,表示节点服务正常运行。

    • START_SERVICE_TIME:节点进程启动后,可以对外提供服务的时间点。如果值为 NULL,表示节点进程未启动或节点状态不可用。

    • BLOCK_MIGRATE_IN_TIME:禁止副本迁入的开始时间点。如果为 NULL,表示副本正常迁入。

    • BUILD_VERSION:OceanBase 数据库软件的版本号。

 

重启是常见运维动作之一,适用于对机器进行短暂维修,以及修改系统配置项后需要重启生效的场景。重启过程中节点的下线时间需要在配置项 server_permanent_offline_time 设置的时间以内,否则会被永久下线。如果机器长时间维修,需要走机器替换流程,有关机器替换的详细操作请参见 替换节点

说明

集群级配置项 server_permanent_offline_time 用于设置节点心跳中断的时间阈值,即节点心跳中断多久后认为其被永久下线,永久下线的节点上的数据副本需要被自动补足。默认为 3600s。有关该配置项的更多详细信息,请参见 server_permanent_offline_time

背景信息

OceanBase 数据库作为一款分布式数据库,典型的部署架构为多副本部署(例如,同城三中心部署架构为 3 份副本,三地五中心部署架构为 5 份副本)。事务提交时利用 Paxos 协议在多个副本间达成多数派提交,从而维护副本之间的数据一致性,在少数派副本异常的情况下达成 RPO=0 的 SLA。

STOP SERVER 命令在多副本架构的基础上能够达到业务无损的重启效果,STOP SERVER 命令执行以下逻辑:

  1. 将待重启节点上的 Leader 全部切走,并保证除了重启节点以外的其他节点上的副本满足多数派。

  2. 在 Root Service 上将待重启节点标记为 stopped(节点状态为 ACTIVE 状态且 stop_time 字段大于 0),客户端识别后,不会将业务请求路由到该节点。

最终成功 Stop Server 后,重启节点不会引起无主选举及客户端报错等问题,对业务流量完全透明。如果 Stop Server 操作执行失败,需要停止重启并检查原因,例如,可能出现的原因有缺少副本、RedoLog 延迟、总投票成员数小于多数派等。

操作步骤

重启节点的主要流程为:停止服务 -> 转储 -> 关闭进程 -> 启动进程 -> 启动服务。

本文以重启集群中的一个节点为例提供操作指导,如果需要重启多个节点,请参考本操作执行多次即可。

  1. 使用 root 用户登录到集群的 sys 租户。

    连接示例如下,连接数据库时请以实际环境为准。

    obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A
    

    有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)

  2. 执行以下命令,进行节点隔离。

    节点在重启过程中可能会影响服务的连续性,例如,集群只有一个或两个节点、或者租户的数据只分布在两个节点上的场景,重启节点的过程中系统将可能会无法提供服务。执行 Stop Server 操作进行节点隔离时,系统将会执行安全检查,保证节点重启过程中不影响系统服务的连续性。待节点成功隔离后,该节点上将不再提供服务。如果 Stop Server 操作失败,则需要检查集群的部署情况或根据报错信息解决问题后再重新执行 Stop Server 操作;或者如果可以接受节点停止服务,也可以跳过本步骤。

    obclient [(none)]> ALTER SYSTEM STOP SERVER 'svr_ip:svr_port';
    

    相关参数说明如下:

    • svr_ip:表示待停止的节点所在的 IP。

    • svr_port:表示待停止的节点的 RPC 端口,默认为 2882。

    示例如下:

    obclient [(none)]> ALTER SYSTEM STOP SERVER '172.xx.xx.xx:2882';
    

    执行成功后,可以查询 oceanbase.DBA_OB_SERVERS 视图中该 Server 的 STATUS 字段,可以看到字段值仍为 ACTIVE 不变,但 STOP_TIME 字段的值由 NULL 变为停止服务的时间点。

    查询 oceanbase.DBA_OB_SERVERS 视图的具体操作可参见 查看节点

  3. 执行以下命令,对待重启的节点进行转储操作,以便缩短重启后回放 Redo Log 的时间,加速重启。

    obclient [(none)]> ALTER SYSTEM MINOR FREEZE SERVER = ('svr_ip:svr_port');
    

    相关参数说明如下:

    • svr_ip:表示待重启的节点的 IP。

    • svr_port:表示待重启的节点的 RPC 端口,默认为 2882。

    示例如下:

    obclient [(none)]> ALTER SYSTEM  MINOR FREEZE SERVER = ('172.xx.xx.xx:2882');
    

    执行转储操作后,需要等待转储结束方可执行下一步操作,查看转储进度的相关操作请参见 查看转储信息

    更多转储相关的详细介绍,请参见 转储

  4. 停止 observer 进程。

    1. 使用 admin 用户登录待停止进程的节点所在的机器。

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

      [admin@xxx /]$ cd /home/admin/oceanbase
      

      更多 OceanBase 数据库软件的安装目录的详细介绍信息,请参见 OBServer 安装目录结构

    3. 执行以下命令,查看并获取节点的进程 ID。

      [admin@xxx oceanbase]$ ps -ef | grep observer | grep -v grep
      admin    103364      1 99  2022 ?        51-17:24:41 /home/admin/oceanbase/bin/observer
      

      示例中,103364 即为节点的进程 ID。

    4. 停止 observer 进程。

      命令如下:

      [admin@xxx oceanbase]$ kill -9 pid
      

      其中,pid 为待停止的节点的 observer 进程 ID。

      示例如下:

      [admin@xxx oceanbase]$ kill -9 103364
      
      注意

      一个部署目录只能停止该节点上的一个 observer 进程,如果需要停止多个节点上的 observer 进程,则需要依次登录多台机器进行操作。

    5. 执行以下命令,确认进程是否已停止。

      [admin@xxx oceanbase]$ ps aux | grep observer
      

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

  5. (可选)如果需要维修机器,在本步骤对机器进行短暂的维修。

  6. 启动 observer 进程。

    1. 使用 admin 用户登录待启动进程的节点所在的机器。

    2. 启动 observer 进程。

      [admin@xxx oceanbase]$ cd /home/admin/oceanbase  &&  ./bin/observer
      
      注意

      一个部署目录只能启动该节点上的一个 observer 进程,如果需要启动多个节点上的 observer 进程,则需要依次登录多台机器进行操作。

      更多 OceanBase 数据库软件的安装目录的详细介绍信息,请参见 OBServer 安装目录结构

      执行成功后,可以查询 oceanbase.DBA_OB_SERVERS 视图中的 START_SERVICE_TIME 字段,如果该值不为 NULL,则表示 observer 进程启动成功。

  7. 执行以下命令,启动节点服务。

    obclient [(none)]> ALTER SYSTEM START SERVER 'svr_ip:svr_port';
    

    其中:

    • svr_ip:表示待启动的节点的 IP。

    • svr_port:表示待启动的节点的 RPC 端口,默认为 2882。

    示例如下:

    obclient [(none)]> ALTER SYSTEM START SERVER '172.xx.xx.xx:2882';
    

    执行成功后,可以查询 oceanbase.DBA_OB_SERVERS 视图中的 STOP_TIME 字段,如果该值为 NULL,则表示该节点启动服务成功,可以对外提供服务。

 

可以向 OceanBase 集群中添加节点,添加节点适用于弹性扩容场景和调整部署场景。

  • 弹性扩容场景:扩容后,Zone 内有更多的节点容纳 Unit,从而可以执行后续的迁移 Unit、调整租户的 UNIT_NUM、新建租户等操作。

  • 调整部署场景:调整部署场景,包括将集群的部署方式从同城三中心调整为三地五中心,以及机房裁撤场景下将 Zone 从一个机房搬迁到另一个机房。该场景需要先增加 Zone,再在该 Zone 内增加节点,然后调整租户的 Locatity 属性。

OceanBase 数据库的弹性扩容能力相比于传统数据库具有明显的架构优势。传统数据库的数据存放于一台机器上,而 OceanBase 数据库能够把数据打散到不同机器,从而能够解决可扩展性的问题,真正体现出分布式架构的优势。当集群或者租户的容量不足时,只需要增加更多的节点,集群就能够容纳更多的租户,租户也能够容纳更多的数据和业务流量。同样,在集群或者租户的容量富余时,也可以将节点下线,从而降低成本。

多副本部署能力同样是 OceanBase 数据库相比于传统数据库的架构优势,多副本部署能力是 OceanBase 数据库具备多级无损容灾能力的基础,包括单机级无损容灾、机房级无损容灾、城市级无损容灾等能力。此外,OceanBase 数据库支持灵活地调整集群部署架构,从而可以满足业务场景的技术演进。

前提条件

  • 请确认待增加的所有 OBServer 服务器已完成相关配置,具体操作可参见 部署前准备 章节。

  • 添加节点前需要为所有 OBServer 服务器安装数据库软件,您可以从 OceanBase 官网的下载中心下载对应版本的 OceanBase 数据库软件安装包,或者从 OceanBase 技术支持人员处获取。

操作步骤

说明

本节主要介绍如何通过命令手动向集群中添加节点,对于 OceanBase 数据库社区版,如果需要通过 obd 向 OceanBase 集群中添加节点,可参考 obd 产品文档 中 集群扩容 的相关内容进行操作。

  1. (可选)对于需要添加 Zone 后再向该 Zone 中添加节点的场景,请确认已添加新的 Zone,添加 Zone 的操作请参见 添加 Zone

  2. 通过 ssh 登录到待添加的 OBServer 服务器,初始化 OBServer 服务器并配置时钟源。

    初始化 OBServer 服务器的详细操作,请参见 使用 oatcli 初始化 OBServer 服务器

    配置时钟源的详细操作,请参见 配置时钟源

  3. 通过 ssh 登录到待添加的 OBServer 服务器,安装 OceanBase 数据库的 RPM 包。

    在添加节点前,需要为待添加的所有 OBServer 服务器安装数据库软件。

    命令如下:

    [root@xxx /]#cd $rpm_dir
    
    [root@xxx $rpm_dir]#rpm -ivh $rpm_name
    

    其中,rpm_dir 表示存放 RPM 包的目录;$rpm_name 表示 RPM 包的名称。

  4. 初始化 OceanBase 数据库的目录。

    OceanBase 数据库的数据目录通常建议设置在独立的磁盘上,然后通过软链接方式链接到软件的 Home 目录下面。

    [root@xxx admin]#su - admin
    -bash-4.2$ mkdir -p /data/1/$cluster_name/{etc3,sort_dir,sstable,slog} 
    -bash-4.2$ mkdir -p /data/log1/$cluster_name/{clog,etc2,ilog,oob_clog} 
    -bash-4.2$ mkdir -p /home/admin/oceanbase/store/$cluster_name
    -bash-4.2$ for t in {etc3,sort_dir,sstable,slog};do ln -s /data/1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
    -bash-4.2$ for t in {clog,etc2,ilog,oob_clog};do ln -s /data/log1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
    

    其中,cluster_name 表示待添加 OBServer 服务器的集群名。

    示例如下:

    [root@xxx admin]#su - admin
    -bash-4.2$ mkdir -p /data/1/obdemo/{etc3,sort_dir,sstable,slog} 
    -bash-4.2$ mkdir -p /data/log1/obdemo/{clog,etc2,ilog,oob_clog} 
    -bash-4.2$ mkdir -p /home/admin/oceanbase/store/obdemo
    -bash-4.2$ for t in {etc3,sort_dir,sstable,slog};do ln -s /data/1/obdemo/$t /home/admin/oceanbase/store/obdemo/$t; done
    -bash-4.2$ for t in {clog,etc2,ilog,oob_clog};do ln -s /data/log1/obdemo/$t /home/admin/oceanbase/store/obdemo/$t; done
    
  5. 启动节点 observer 进程。

    执行以下命令,启动 observer 进程。

    [root@xxx admin]$ su - admin
    
    -bash-4.2$ cd /home/admin/oceanbase
    
    -bash-4.2$ ./bin/observer -I xx.xx.xx.xx -P XXXX -p YYYY -z zone1 -d /home/admin/oceanbase/store/obdemo -r 'xx.xx.xx.xx:xxxx:yyyy' -c 20190716 -n obdemo -o "system_memory=30GB,datafile_size=100G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"
    

    相关参数说明如下:

    • -I:参数用于指定待启动的节点 IP。在多机部署场景下,不能指定 127.0.0.1 作为目标 IP。

      通过指定网卡名来启动节点(例如 -i eth0)的方式在当前版本依然可以使用,但建议使用指定 IP(例如,-I 10.10.10.1)来启动。此外,通过同时指定 IP 和网卡名(例如 -I 10.10.10.1 -i eth0)来启动节点也可以,但不建议这么用。

      对于当前版本,支持指定的节点 IP 为 ipv6 地址,使用时需要注意以下事项:

      • ipv6 地址分为 Global 地址和 Link 地址,建议使用 Global 地址。
      • 需要在 -I 前,添加 -6
    • -c:用于指定集群 ID。其值可通过 SHOW PARAMETERS LIKE 'cluster_id'; 语句获取。

    • -p:用于指定 SQL 端口号。一般为 2881,除非有明确目的,一般不建议修改。

    • -P:用于指定 RPC 端口号。一般为 2882,除非有明确目的,不建议修改。

    • -n:用于指定集群名。其值可通过 SHOW PARAMETERS LIKE 'cluster'; 语句获取。本示例中集群名为 obdemo

    • -z:用于指定待加入的 Zone。可通过视图 DBA_OB_ZONES 查看集群中的 Zone 名。

    • -d:用于指定数据目录。

    • -r:用于指定待添加的 OceanBase 集群的 RS 地址列表。

      指定的地址为 ipv6 地址时,需要注意以下事项:

      • ipv6 地址分为 Global 地址和 Link 地址,建议使用 Global 地址。
      • IP 地址需要使用 [] 包裹。
      • 需要在 -r 前,添加 -6
    • -l:用于指定日志的级别,本示例中为 WARN,表示日志级别为 WARNING 级别。

      有关 OceanBase 数据库日志级别的详细介绍,请参见 日志级别

    • -o:用于指定集群的启动配置项,需要根据实际情况配置。

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

      • 不分大小写,但是推荐按照 observer.config.bin 中的名称来写。

      • 配置项名不能包含以下特殊字符:空格、\r\n\t

      • 配置项名和配置项值中间必须有等号(=)。

      • 配置项之间使用英文逗号(,)进行分割。

      语句中:

      • system_memory:用于指定 OceanBase 数据库内部保留内存,默认是 30G。
      • datafile_size:用于指定 OceanBase 数据库数据文件 SSTable 的大小(一次性初始化),根据 /data/1/ 可用空间评估,建议不少于 100G,同时又保留一些剩余空间。
      • config_additional_dir:用于指定参数文件的冗余目录。

    示例如下:

    [root@xxx admin]$ su - admin
    
    -bash-4.2$ cd /home/admin/oceanbase
    
    -bash-4.2$ ./bin/observer -I xx.xx.xx.1 -c 20221216 -p 2881 -P 2882 -z zone4 -n obdemo -d /home/admin/oceanbase/store/obdemo -r 'xx.xx.xx.1:2882:2881' -l WARN -o "system_memory=30GB,datafile_size=100G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"
    

    使用 ipv6 地址启动的示例如下:

    [root@xxx admin]$ su - admin
    
    -bash-4.2$ cd /home/admin/oceanbase
    
    -bash-4.2$ ./bin/observer -6 -I xxxx:xxxx:xxxx:xxxx:xxx:xxxx:xxxx:ebd8 -c 20221216 -p 2881 -P 2882 -z zone4 -n obdemo -d /home/admin/oceanbase/store/obdemo -r '[xxxx:xxxx:xxxx:xxxx:xxx:xxxx:xxxx:ebd8]:2882:2881' -l WARN -o "system_memory=30GB,datafile_size=100G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"
    
  6. (可选)如果需要添加多个节点,请重复执行步骤 2 ~ 5。

  7. 向集群中添加节点。

    1. 使用 root 用户登录到集群的 sys 租户。

      连接示例如下,连接数据库时请以实际环境为准。

      obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A
      

      有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)

    2. 执行以下命令,向集群的 Zone 中添加节点。

      ALTER SYSTEM ADD SERVER 'svr_ip:svr_port' [,'svr_ip:svr_port'...] [ZONE [=] 'zone_name'];
      

      相关参数说明如下:

      • svr_ip:表示待添加的节点的 IP。

      • svr_port:表示待添加的节点的 RPC 端口。默认为 2882

      • zone_name:表示待添加节点的 Zone。

      示例如下:

      ALTER SYSTEM ADD SERVER '10.xx.xx.xx:2882','10.xx.xx.xx:2882' ZONE 'zone4';
      

      该操作会将 OBServer 服务器加入到服务列表,只有服务列表中的 OBServer 服务器才可以提供服务。

  8. 执行成功后,可以查询 DBA_OB_SERVERS 视图进行确认。

    查询示例如下:

    SELECT * FROM oceanbase.DBA_OB_SERVERS;
    

    列表中有刚刚添加的 OBServer 服务器,则表示添加成功。

可以向 OceanBase 集群中删除节点,删除节点是添加节点的逆向操作,适用于弹性缩容场景和调整部署场景。

  • 弹性缩容场景:集群中有资源富余时,可以通过调整 Unit 分布、缩减租户的 UNIT_NUM 等操作来减少节点的资源占用,并最终通过删除节点来下线机器。

  • 调整部署场景:调整集群的部署架构时,如果调整租户的 Locality 属性后使得某 Zone 内不再分布有任何租户的 Unit,可以通过 Stop Zone -> Delete Server -> Delete Zone 等一系列操作下线该 Zone。

注意事项

Delete Server 操作涉及到负载均衡,被删除的节点上的资源单元(称为 Unit )会在同一个 Zone 中进行迁移。Unit 的迁移动作是 Unit 自动均衡的过程,主要由 Root Service 控制。待 Unit 迁移成功,Delete Server 操作即可执行成功。如果您想要选择待删除节点上 Unit 迁移的目标机器,可以手动执行 Unit 迁移。

注意

删除节点会减少可用资源,如果同 Zone 中其他节点的剩余资源不足以容纳待删除节点上的 Unit,将会导致 Unit 迁移失败,故在执行删除节点之前建议先查询 oceanbase.GV$OB_SERVERS 视图判断 Zone 内各节点的资源使用情况。

Unit 自动迁移过程中,迁移任务会占用迁出节点与迁入节点的网络资源和 IO 资源,从而使迁移流量与业务流量叠加,并导致业务流量受影响。为了避免业务流程受影响:

  • 可以先执行 Stop Zone 操作后再执行 Delete Server 操作,确保两种流量不发生叠加。

    Stop Zone 的相关操作请参见 隔离节点

  • 也可以调整迁移任务的相关配置项来控制迁移速度。

    迁移任务相关的配置项如下表所示。

    配置项名描述
    balancer_idle_time租户级配置项,可以控制每次发起迁移任务的时间间隔。默认值为 10s,表示 10 秒,取值范围为 [10s, +∞)。
    sys_bkgd_net_percentage集群级配置项,可以控制迁移任务占用网卡带宽的百分比。默认值为 60,取值范围为 [0, 100]。

    查看并修改各配置项值的相关操作请参见 修改集群配置项

操作步骤

  1. 使用 root 用户登录到集群的 sys 租户。

    连接示例如下,连接数据库时请以实际环境为准。

    obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A
    

    有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)

  2. (可选)手动迁移待删除节点上的 Unit。

    注意

    下线节点时,建议您先手动迁移待删除的节点上的 Unit 后再执行 Delete Server 操作。

    1. 查看当前 Unit 分布,获取待迁移的 Unit 的 ID。

      obclient [(none)]> SELECT UNIT_ID,TENANT_ID,STATUS,ZONE,SVR_IP FROM oceanbase.DBA_OB_UNITS;
      +---------+-----------+--------+-------+----------------+
      | UNIT_ID | TENANT_ID | STATUS | ZONE  | SVR_IP         |
      +---------+-----------+--------+-------+----------------+
      |       1 |         1 | ACTIVE | zone1 |   xx.xx.xx.237 |
      |       2 |         1 | ACTIVE | zone2 |   xx.xx.xx.238 |
      |       3 |         1 | ACTIVE | zone3 |   xx.xx.xx.218 |
      |    1001 |      1002 | ACTIVE | zone3 |   xx.xx.xx.218 |
      |    1002 |      1002 | ACTIVE | zone1 |   xx.xx.xx.237 |
      |    1003 |      1002 | ACTIVE | zone2 |   xx.xx.xx.238 |
      |    1010 |      1008 | ACTIVE | zone3 |   xx.xx.xx.218 |
      |    1011 |      1008 | ACTIVE | zone2 |   xx.xx.xx.238 |
      |    1012 |      1008 | ACTIVE | zone1 |   xx.xx.xx.237 |
      |    1013 |      1010 | ACTIVE | zone3 |   xx.xx.xx.218 |
      |    1014 |      1010 | ACTIVE | zone1 |   xx.xx.xx.237 |
      |    1015 |      1010 | ACTIVE | zone2 |   xx.xx.xx.238 |
      |    1016 |      NULL | ACTIVE | zone1 |   xx.xx.xx.237 |
      |    1017 |      NULL | ACTIVE | zone2 |   xx.xx.xx.238 |
      +---------+-----------+--------+-------+----------------+
      14 rows in set
      

      其中:

      • UNIT_ID:表示节点上各 Unit 的 ID。

      • TENANT_ID:表示该 Unit 所属的租户 ID。如果值为 NULL,表示当前 Unit 不属于任何租户。

      • STATUS:表示该 Unit 当前的状态:

        • ACTIVE:正常状态

        • DELETING:正在删除状态

      • ZONE:表示该 Unit 所属的 Zone。

      • SVR_IP:表示该 Unit 所属的节点 IP。

      有关 DBA_OB_UNITS 视图的更多说明,请参见 DBA_OB_UNITS

    2. 根据查询结果,执行以下命令,手动迁移 Unit。

      语句如下:

      obclient [(none)]> ALTER SYSTEM MIGRATE UNIT = unit_id DESTINATION = 'svr_ip:svr_port'; 
      

      相关参数说明如下:

      • unit_id:表示待迁移的 Unit 的 ID。

      • svr_ip:指定 Unit 迁移后的节点的 IP。

      • svr_port:指定 Unit 迁移后的节点的 RPC 端口。

      将 ID 为 1012 的 Unit 迁移到同 Zone 的 172.xx.xx.xx 服务器上的示例如下:

      obclient [(none)]> ALTER SYSTEM MIGRATE UNIT = 1012 DESTINATION = '172.xx.xx.xx:2882'; 
      

      该命令可多次执行,如果手动迁移 Unit 失败,可以根据报错信息解决问题后再重新执行。

      更多关于 Unit 迁移的操作及说明,请参见 Unit 迁移

  3. 执行以下命令,删除节点。

    语句如下:

    obclient [(none)]> ALTER SYSTEM DELETE SERVER 'svr_ip:svr_port' [,'svr_ip:svr_port'...] [ZONE [=] 'zone_name']
    

    相关参数说明如下:

    • svr_ip:表示待删除的节点的 IP。

    • svr_port:表示待删除的节点的 RPC 端口。

    • zone_name:待删除的节点所属的 Zone。如果需要删除多个节点,多个节点要求必须在同一 Zone 内。

    删除 zone1 中的一台 OBServer 服务器,示例如下:

    obclient [(none)]> ALTER SYSTEM DELETE SERVER "172.xx.xx.xx:2882" zone='zone1'
    
  4. 待所有操作结束后,查询 oceanbase.DBA_OB_SERVERS 视图,确认节点是否删除成功。

    obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_SERVERS;
    

    如果列表中已经查询不到该节点,则表示删除成功。如果列表中仍然有该节点,且该节点的状态为 DELETING,则表示该节点仍然在删除状态中。

    对于未手动迁移 Unit 而是直接执行 Delete Server 操作的场景,可能会导致节点删除失败,确认节点删除失败后,可以参考 后续操作 进行处理。

后续操作

对于未手动迁移 Unit 而是直接执行 Delete Server 操作的场景,由于 Unit 均衡过程中可能会发生资源不足,即同 Zone 中其他节点的剩余资源不足以容纳待删除节点上的 Unit,将会导致 Unit 迁移失败,从而使该节点持续在删除状态中。您可以通过 Root Service 机器上的 /home/admin/oceanbase/log/rootservice.log 查看 Unit 是否迁移失败。如果确认是 Unit 迁移失败,则需要执行 Cancel Delete Server 操作,然后向 Zone 内添加节点对集群扩容后再重新删除节点。向 Zone 内添加节点的相关操作请参见 添加节点

Cancel Delete Server 的具体操作如下:

  1. 使用 root 用户登录到集群的 sys 租户。

    连接示例如下,连接数据库时请以实际环境为准。

    obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A
    
  2. 执行以下语句,取消删除节点。

    语句如下:

    obclient [(none)]> ALTER SYSTEM CANCEL DELETE SERVER 'svr_ip:svr_port' [,'svr_ip:svr_port'...] [ZONE [=] 'zone_name']
    

    相关参数说明如下:

    • svr_ip:表示待取消删除的节点的 IP。

    • svr_port:表示待取消删除的节点的 RPC 端口,默认为 2882。

    • zone_name:待取消删除的节点所属的 Zone。

    示例如下:

    obclient [(none)]> ALTER SYSTEM CANCEL DELETE SERVER '172.xx.xx.xx:2882' zone='zone1';
    
  3. 查询 oceanbase.DBA_OB_SERVERS 视图,确认节点是否取消删除成功。

    obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_SERVERS;
    

    如果待取消删除的 OBServer 的状态从 DELETING 变为 ACTIVE,则表示取消删除成功。

 

### OceanBase 集群安装部署教程最佳实践 #### 准备工作 对于内网环境中进行OceanBase集群的离线安装,准备工作至关重要。确保中控机器能够访问所需资源文件,下载相关软件包[^1]。 #### 安装依赖项 为了使OceanBase数据库正常运行,在目标服务器上需预先设置一些必要的环境条件。例如通过`yum`工具来安装时间同步服务Chrony,这有助于保持分布式系统的时间一致性[^4]: ```bash yum -y install chrony ``` #### 使用OBD工具进行部署 OBD (OceanBase Deployer),作为一款专为OceanBase设计的自动化部署解决方案,极大地简化了集群构建过程。无论是初次接触还是有经验的操作人员都能从中受益。该工具支持多种场景下的灵活配置选项,并针对不同网络状况提供了相应的解决策略——特别是对于无法直接连通外部互联网的情况特别适用。 #### Kubernetes集成方案概述 当考虑将OceanBase与Kubernetes平台相结合时,则会涉及到利用特定于云原生架构的设计模式和技术栈。这里提到kubeblocks/oceanbase组件扩展正是为此目的而设;它不仅描述了一个完整的OBDB实例生命周期管理框架,还涵盖了从初始化到销毁期间可能遇到的各种操作细节[^2]。 #### 验证部署状态 完成上述步骤之后,可以通过执行如下命令验证Prometheus监控Pod的状态以确认整个流程是否顺利完成: ```bash kubectl get pod -n oceanbase | grep prometheus ``` 此指令用于筛选并显示属于oceanbase命名空间内的所有名称中含有“prometheus”的Pod对象信息[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值