首批通过分布式安全可靠测评,为关键业务系统打造
创建日志流
更新时间:2025-11-02 15:44:57
用户可以根据业务需要,在 Unit Group 上创建日志流,以便手动调整租户在各服务节点上的日志流个数。
注意事项
执行创建日志流操作前,需要注意以下事项:
当前仅支持创建普通的用户日志流,不支持创建广播日志流。
创建日志流操作仅支持在主租户上完成。且待创建日志流的租户的
STATUS和SWITCHOVER_STATUS需要为NORMAL。创建日志流时,要求目标
UNIT_GROUP的状态必须为ACTIVE,且目标UNIT_GROUP_ID不能为 0。为待创建的日志流指定
PRIMARY_ZONE时,需要保证指定的 Zone 在租户的ZONE_LIST中。对于日志流而言,设置日志流的PRIMARY_ZONE与设置租户的PRIMARY_ZONE略有不同,日志流仅允许设置一个 Zone,例如z1或z2,不能像租户一样设置z1,z2、z1; z2或RANDOM。负载均衡相关的配置项建议为关闭状态,即值为
False,否则:当租户级配置项 enable_rebalance 为开启状态,即值为
True时,创建的日志流会被系统从目标UNIT_GROUP中迁移到其他UNIT_GROUP中。当租户级配置项 enable_transfer 为开启状态,即值为
True时,创建的日志流可能会被删除。
步骤一:创建前检查
管理员用户登录到集群的
sys租户或用户租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A查询租户的状态、
PRIMARY_ZONE和 Locality 相关信息。创建日志流时,要求租户的
STATUS和SWITCHOVER_STATUS均为NORMAL。同时,如果需要指定日志流的PRIMARY_ZONE,需要保证指定的 Zone 在租户的ZONE_LIST中,而租户的ZONE_LIST可以参考租户 Locality 中有哪些 Zone。系统租户
obclient> SELECT TENANT_ID, TENANT_NAME, STATUS, SWITCHOVER_STATUS, TENANT_ROLE, PRIMARY_ZONE, LOCALITY FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = 'mq_t1';用户租户
MySQL 模式Oracle 模式MySQL 模式下,执行以下命令,查询租户状态。
obclient> SELECT TENANT_ID, TENANT_NAME, STATUS, SWITCHOVER_STATUS, TENANT_ROLE, PRIMARY_ZONE, LOCALITY FROM oceanbase.DBA_OB_TENANTS;Oracle 模式下,执行以下命令,查询租户状态。
obclient> SELECT TENANT_ID, TENANT_NAME, STATUS, SWITCHOVER_STATUS, TENANT_ROLE, PRIMARY_ZONE, LOCALITY FROM SYS.DBA_OB_TENANTS;
查询结果的示例如下:
+-----------+-------------+--------+-------------------+-------------+--------------+-------------------------------------+ | TENANT_ID | TENANT_NAME | STATUS | SWITCHOVER_STATUS | TENANT_ROLE | PRIMARY_ZONE | LOCALITY | +-----------+-------------+--------+-------------------+-------------+--------------+-------------------------------------+ | 1002 | mq_t1 | NORMAL | NORMAL | PRIMARY | RANDOM | FULL{1}@z1, FULL{1}@z2, FULL{1}@z3 | +-----------+-------------+--------+-------------------+-------------+--------------+-------------------------------------+ 1 row in set查询租户的 Unit 信息,确认目标
UNIT_GROUP的状态为ACTIVE。在系统租户下执行以下命令,查询租户的 Unit 信息。
obclient> SELECT UNIT_GROUP_ID, UNIT_ID, ZONE, SVR_IP, SVR_PORT FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID=1002 AND STATUS = 'ACTIVE' ORDER BY UNIT_GROUP_ID;查询结果如下:
+---------------+---------+------+----------------+----------+ | UNIT_GROUP_ID | UNIT_ID | ZONE | SVR_IP | SVR_PORT | +---------------+---------+------+----------------+----------+ | 1001 | 1001 | z1 | xxx.xx.xxx.198 | 2882 | | 1001 | 1002 | z2 | xxx.xx.xxx.196 | 2882 | | 1001 | 1003 | z3 | xxx.xx.xxx.204 | 2882 | | 1002 | 1004 | z1 | xxx.xx.xxx.194 | 2882 | | 1002 | 1005 | z2 | xxx.xx.xxx.192 | 2882 | | 1002 | 1006 | z3 | xxx.xx.xxx.197 | 2882 | +---------------+---------+------+----------------+----------+ 6 rows in set确认配置项 enable_rebalance 和 enable_transfer 是否处于关闭状态,即值为
False。用户租户下,执行以下命令,查询配置项的值。
obclient> SHOW PARAMETERS LIKE '%enable_rebalance%';obclient> SHOW PARAMETERS LIKE '%enable_transfer%';如果值为
True,则可以执行以下命令,分别将值修改为False。obclient> ALTER SYSTEM SET enable_rebalance = False;obclient> ALTER SYSTEM SET enable_transfer = False;
步骤二:创建日志流
确保各项检查符合要求后,根据业务情况,选择合适的操作,为租户创建日志流。
系统租户为用户租户创建日志流
使用
root用户登录到集群的sys租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A创建日志流。
系统租户下,创建用户租户日志流的 SQL 语句如下:
ALTER SYSTEM CREATE LS UNIT_GROUP [=] unit_group_id [,PRIMARY_ZONE [=] 'zone_name'] TENANT [=] 'tenant_name';语句相关说明如下:
unit_group_id:指定待创建日志流的目标UNIT_GROUP的 ID。unit_group_id可在系统租户下,通过查询oceanbase.DBA_OB_UNITS视图获取。zone_name:目标 Zone 的名称。如果不指定PRIMARY_ZONE,则由系统根据租户下同一个UNIT_GROUP内的PRIMARY_ZONE保持均衡的规则来分配。tenant_name:待创建日志流的目标租户的名称。
示例如下:
在 ID 为 1001 的
UNIT_GROUP上创建一个日志流obclient> ALTER SYSTEM CREATE LS UNIT_GROUP 1001 TENANT = mq_t1;在 ID 为 1001 的
UNIT_GROUP上创建一个日志流,并且设置该日志流的PRIMARY_ZONE为z1。obclient> ALTER SYSTEM CREATE LS UNIT_GROUP 1001, PRIMARY_ZONE 'z1' TENANT = mq_t1;
确认创建的日志流。
获取新创建的日志流的
LS_ID。obclient> SELECT * FROM oceanbase.CDB_OB_TENANT_EVENT_HISTORY WHERE EVENT='CREATE LS' AND TENANT_ID=1002 ORDER BY TIMESTAMP DESC LIMIT 1\G查询结果的示例如下:
*************************** 1. row *************************** TENANT_ID: 1002 TIMESTAMP: 2024-12-09 11:31:14.284278 MODULE: LS COMMAND EVENT: CREATE LS NAME1: ARGS VALUE1: {op:1, op str:"CREATE LS", tenant_id:1002, ls_id:{id:-1}, unit_group_id:1001, ls_primary_zone:"z1"} NAME2: LS_ID VALUE2: 1003 NAME3: LS_GROUP_ID VALUE3: 1002 NAME4: UNIT_GROUP_ID VALUE4: 1001 NAME5: PRIMARY_ZONE VALUE5: z1 NAME6: NULL VALUE6: EXTRA_INFO: NULL SVR_IP: 6.xx.xxx.xxx SVR_PORT: 13324 TRACE_ID: Y3xxxxxxxxxxx-xxxxxxxxxxxxxxx-x-x COST_TIME: 19407 RET_CODE: 0 ERROR_MSG: NULL 1 row in set根据查询结果可知,新创建的日志流的
LS_ID为 1003。确认新创建的日志流的详细信息。
obclient> SELECT LS_ID, STATUS, PRIMARY_ZONE, UNIT_GROUP_ID, LS_GROUP_ID FROM oceanbase.CDB_OB_LS WHERE TENANT_ID=1002 AND LS_ID = 1003 AND UNIT_GROUP_ID=1001;查询结果的示例如下:
+-------+--------+--------------+---------------+-------------+ | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | +-------+--------+--------------+---------------+-------------+ | 1003 | NORMAL | z1;z2,z3 | 1001 | 1001 | +-------+--------+--------------+---------------+-------------+ 1 row in set根据查询结果可知,新创建的日志流的状态为
NORMAL,主 Zone 为z1,所属UNIT_GROUP的 ID 为 1001,与预期结果一致,日志流创建成功。
用户租户创建本租户的日志流
MySQL 模式租户或 Oracle 模式租户的租户管理员连接数据库。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mq_t1#obdemo -p***** -A创建日志流。
用户租户创建日志流的 SQL 语句如下:
ALTER SYSTEM CREATE LS UNIT_GROUP [=] unit_group_id [,PRIMARY_ZONE [=] 'zone_name'];语句相关说明如下:
unit_group_id:指定待创建日志流的目标UNIT_GROUP的 ID。unit_group_id可在系统租户下,通过查询oceanbase.DBA_OB_UNITS视图获取。zone_name:目标 Zone 的名称。如果不指定PRIMARY_ZONE,则由系统根据租户下同一个UNIT_GROUP内的PRIMARY_ZONE保持均衡的规则来分配。
示例如下:
在 ID 为 1001 的
UNIT_GROUP上创建一个日志流obclient> ALTER SYSTEM CREATE LS UNIT_GROUP 1001;在 ID 为 1001 的
UNIT_GROUP上创建一个日志流,并且设置该日志流的PRIMARY_ZONE为z1。obclient> ALTER SYSTEM CREATE LS UNIT_GROUP 1001, PRIMARY_ZONE 'z1';
确认创建的日志流。
获取新创建的日志流的
LS_ID。obclient> SELECT * FROM oceanbase.DBA_OB_TENANT_EVENT_HISTORY WHERE EVENT='CREATE LS' ORDER BY TIMESTAMP DESC LIMIT 1\G查询结果的示例如下:
*************************** 1. row *************************** TENANT_ID: 1002 TIMESTAMP: 2024-12-09 11:31:14.284278 MODULE: LS COMMAND EVENT: CREATE LS NAME1: ARGS VALUE1: {op:1, op str:"CREATE LS", tenant_id:1002, ls_id:{id:-1}, unit_group_id:1001, ls_primary_zone:"z1"} NAME2: LS_ID VALUE2: 1003 NAME3: LS_GROUP_ID VALUE3: 1002 NAME4: UNIT_GROUP_ID VALUE4: 1001 NAME5: PRIMARY_ZONE VALUE5: z1 NAME6: NULL VALUE6: EXTRA_INFO: NULL SVR_IP: 6.xx.xxx.xxx SVR_PORT: 13324 TRACE_ID: Y3xxxxxxxxxxx-xxxxxxxxxxxxxxx-x-x COST_TIME: 19407 RET_CODE: 0 ERROR_MSG: NULL 1 row in set根据查询结果可知,新创建的日志流的
LS_ID为 1003。确认新创建的日志流的详细信息。
obclient> SELECT LS_ID, STATUS, PRIMARY_ZONE, UNIT_GROUP_ID, LS_GROUP_ID FROM oceanbase.DBA_OB_LS WHERE LS_ID = 1003 AND UNIT_GROUP_ID=1001;查询结果的示例如下:
+-------+--------+--------------+---------------+-------------+ | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | +-------+--------+--------------+---------------+-------------+ | 1003 | NORMAL | z1;z2,z3 | 1001 | 1001 | +-------+--------+--------------+---------------+-------------+ 1 row in set根据查询结果可知,新创建的日志流的状态为
NORMAL,主 Zone 为z1,所属UNIT_GROUP的 ID 为 1001,与预期结果一致,日志流创建成功。