目录
1.查看节点
2.添加节点
2.1 创建数据目录
2.2.OceanBase 运行时所依赖的部分三方动态库
2.3.安装 OceanBase 数据库的 RPM 包
2.4.启动节点 observer 进程
2.5.向集群中添加节点
3.隔离节点
4.重启节点
4.1 停止服务
4.2 转储
4.3 关闭进程
4.4 启动进程
4.5 启动服务
5.删除节点
5.1.隔离节点
5.2.手动迁移Unit
5.3.删除节点
5.4.确认删除
OceanBase 数据库是单进程软件,进程名为 observer。通常一台物理或者虚拟服务器运行一个 observer 进程,由 IP 和端口作为唯一标识,称之为节点。
1.查看节点
#查询
DBA_OB_SERVERS
视图,获取集群中的所有节点信息
SELECT * FROM oceanbase.DBA_OB_SERVERS;
查询结果中的相关字段说明如下:
- 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 数据库软件的版本号。
2.添加节点
2.1 创建数据目录
创建数据目录和日志目录
mkdir -p /oceanbase/data
mkdir -p /oceanbase/redo
mkdir -p /ocenabase/data/slog
mkdir -p /oceanbase/data/sstable
#创建日志目录软连接
ln -s /oceanbase/redo /ocenabase/data/clog
#创建配置文件目录
mkdir -p /home/admin/oceanbase/etc2
mkdir -p /home/admin/oceanbase/etc3
2.2.OceanBase 运行时所依赖的部分三方动态库
#默认安装在/home/admin/oceanbase目录下,需要先创建该目录,否则按照不成功。
sudo rpm -ivh oceanbase-ce-libs-4.1.0.0-100000202023040520.el7.x86_64.rpm
将第三方库路径加入环境变量
2.3.安装 OceanBase 数据库的 RPM 包
sudo rpm -ivh oceanbase-ce-4.1.0.0-100000202023040520.el7.x86_64.rpm
2.4.启动节点 observer 进程
/home/admin/oceanbase/bin/observer -p 2881 -P 2882 -z zone1 -n obcluster -c 1 -d /oceanbase/data -i ens192 -o "memory_limit=6G,system_memory=1G,datafile_size=20G,log_disk_size=15G,cpu_count=8,enable_syslog_wf=False,enable_syslog_recycle=True,max_syslog_file_count=4,config_additional_dir=/home/admin/oceanbase/etc3;/home/admin/oceanbase/etc2"
启动脚本可在已运行OBServer节点服务器上通过 ps aux|observer命令查看其他节点的运行参数,各参数说明请参考官方文档:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218350
2.5.向集群(Zone)中添加节点
alter system add server '192.168.1.220:2882' zone 'zone1';;
列表中有刚刚添加的 OBServer 服务器,则表示添加成功。
3.隔离节点
当节点发生异常或者需要运维变更时,可以隔离节点。隔离后,新的读写请求不会路由到该节点上,从而可以隔离故障或者无损的执行运维变更动作。
隔离节点有以下三种命令,不同的隔离命令有不同的安全级别保证:
- 通过 STOP SERVER 命令隔离节点
- 通过 FORCE STOP SERVER 命令隔离节点
- 通过 ISOLATE SERVER 命令隔离节点
ALTER SYSTEM STOP SERVER 'svr_ip1:svr_port1', 'svr_ip2:svr_port2', ...;
执行成功后,可以查询 oceanbase.DBA_OB_SERVERS
视图中该 Server 的 STATUS
字段,可以看到字段值仍为 ACTIVE
不变,但 STOP_TIME
字段的值由 NULL
变为停止服务的时间点。
4.重启节点
重启是常见运维动作之一,适用于对机器进行短暂维修,以及修改系统配置项后需要重启生效的场景。重启过程中节点的下线时间需要在配置项 server_permanent_offline_time 设置的时间以内,否则会被永久下线。
重启节点的主要流程为:停止服务 -> 转储 -> 关闭进程 -> 启动进程 -> 启动服务。
4.1 停止服务
ALTER SYSTEM STOP SERVER 'svr_ip:svr_port';
4.2 转储
对待重启的节点进行转储操作,以便缩短重启后回放 Redo Log 的时间,加速重启。
ALTER SYSTEM MINOR FREEZE SERVER = ('svr_ip:svr_port');
4.3 关闭进程
kill -9 pid
4.4 启动进程
cd /home/admin/oceanbase && ./bin/observer
4.5 启动服务
ALTER SYSTEM START SERVER 'svr_ip:svr_port';
执行成功后,可以查询 oceanbase.DBA_OB_SERVERS
视图中的 START_SERVICE_TIME
字段,该字段表示节点启动服务的时间。如果该值为 NULL
,则表示该节点的服务还没有启动。
5.删除节点
Delete Server 操作涉及到负载均衡,被删除的节点上的资源单元(称为 Unit )会在同一个 Zone 中进行迁移。Unit 的迁移动作是 Unit 自动均衡的过程,主要由 Root Service 控制。待 Unit 迁移成功,Delete Server 操作即可执行成功。删除节点会减少可用资源,如果同 Zone 中其他节点的剩余资源不足以容纳待删除节点上的 Unit,将会导致 Unit 迁移失败,故在执行删除节点之前建议先查询 oceanbase.GV$OB_SERVERS 视图判断 Zone 内各节点的资源使用情况。
5.1.隔离节点
Unit 自动迁移过程中,迁移任务会占用迁出节点与迁入节点的网络资源和 IO 资源,从而使迁移流量与业务流量叠加,并导致业务流量受影响。为了避免业务流程受影响,可以先执行 Stop Zone 操作后再执行 Delete Server 操作,确保两种流量不发生叠加。
ALTER SYSTEM STOP SERVER 'svr_ip:svr_port';
5.2.手动迁移Unit
删除节点Unit可以自动迁移,但建议您先手动迁移待删除的节点上的 Unit 后再执行 Delete Server 操作。
a.查看当前 Unit 分布,获取待迁移的 Unit 的 ID
SELECT UNIT_ID,TENANT_ID,STATUS,ZONE,SVR_IP FROM oceanbase.DBA_OB_UNITS;
b.根据查询结果,手动迁移 Unit
ALTER SYSTEM MIGRATE UNIT = unit_id DESTINATION = 'svr_ip:svr_port';
5.3.删除节点
ALTER SYSTEM DELETE SERVER 'svr_ip:svr_port' [,'svr_ip:svr_port'...] [ZONE [=] 'zone_name']
5.4.确认删除
SELECT * FROM oceanbase.DBA_OB_SERVERS;
如果列表中已经查询不到该节点,则表示删除成功。如果列表中仍然有该节点,且该节点的状态为 DELETING,则表示该节点仍然在删除状态中。
对于未手动迁移 Unit 而是直接执行 Delete Server 操作的场景,可能会导致节点删除失败,确认节点删除失败后,可以参考 后续操作 进行处理。