首批通过分布式安全可靠测评,为关键业务系统打造
修改日志流的法定成员数
更新时间:2026-01-26 18:01:48
由于一些异常原因,某些日志流的法定成员数(paxos_replica_num)与租户 Locality 中全功能副本的个数不一致,可以通过 ALTER SYSTEM MODIFY 命令,手动调整日志流的法定成员数。
使用限制
系统租户(sys 租户)可以修改所有租户的日志流的法定成员数,用户租户只能修改本租户的日志流的法定成员数。
租户的同一个日志流,除了副本迁移任务可以并行执行多个以外,其他容灾任务(包括添加副本、删除副本、转换副本类型、修改日志流的法定成员数等)每次只能执行一个。
sys 租户可以通过视图
CDB_OB_LS_REPLICA_TASKS确认是否有正在运行的容灾任务;用户租户可以通过视图DBA_OB_LS_REPLICA_TASKS确认是否有正在运行的容灾任务。当前仅支持手动调小
paxos_replica_num,不支持手动调大paxos_replica_num。
前提条件
修改日志流 Leader 的法定成员数前,请确认当前用户拥有
ALTER SYSTEM权限,否则无法执行ALTER SYSTEM MODIFY命令。在查询视图前,请确认当前用户拥有以下视图的
SELECT权限,否则无法查询相关信息。DBA_OB_TENANTSDBA_OB_LS/CDB_OB_LSDBA_OB_LS_LOCATIONS/CDB_OB_LS_LOCATIONS
操作步骤
假设当前有一个 tenant1 租户,其 1002 号日志流有 4 个 F 副本,而 paxos_replica_num 值为 5(大于 4),此时可以通过命令手动将 paxos_replica_num 的值调整为 4,使其与租户 Locality 中全功能副本的个数一致。
用户登录到集群对应的租户。
连接示例如下:
obclient -h172.30.xxx.xxx -P2883 -uroot@tenant1#obdemo -pxxxx -A有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)。
获取待操作租户对应的租户 ID。
系统租户
obclient [oceanbase]> SELECT TENANT_NAME,TENANT_ID FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='tenant1';用户租户
MySQL 模式Oracle 模式MySQL 模式下执行以下语句:
obclient [oceanbase]> SELECT TENANT_NAME,TENANT_ID,LOCALITY FROM oceanbase.DBA_OB_TENANTS;Oracle 模式下执行以下语句:
obclient [SYS]> SELECT TENANT_NAME,TENANT_ID,LOCALITY FROM SYS.DBA_OB_TENANTS;查询结果的示例如下:
+-------------+-----------+ | TENANT_NAME | TENANT_ID | +-------------+-----------+ | tenant1 | 1002 | +-------------+-----------+ 1 row in set根据查询结果,该租户对应的租户 ID 为
1002。有关视图
DBA_OB_TENANTS中各字段的详细说明,请参见 DBA_OB_TENANTS。
获取待操作租户的所有日志流信息。
系统租户
obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS WHERE TENANT_ID=1002;有关视图
CDB_OB_LS中各字段的详细说明,请参见 CDB_OB_LS。用户租户
MySQL 模式Oracle 模式MySQL 模式下执行以下语句:
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS;Oracle 模式下执行以下语句:
obclient [SYS]> SELECT * FROM SYS.DBA_OB_LS;查询结果的示例如下:
+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+ | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | CREATE_SCN | DROP_SCN | SYNC_SCN | READABLE_SCN | FLAG | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+ | 1 | NORMAL | z1;z2 | 0 | 0 | NULL | NULL | 1712455113896017202 | 1712455113896017202 | | | 1001 | NORMAL | z1;z2 | 1001 | 1001 | 1712125812893680165 | NULL | 1712455113896017202 | 1712455113896017202 | | | 1002 | NORMAL | z1;z2 | 1002 | 1002 | 1712125812908098857 | NULL | 1712455114041323052 | 1712455113540551113 | | | 1003 | NORMAL | z1;z2 | 0 | 0 | 1712125828880850585 | NULL | 1712455113896017202 | 1712455113896017202 | DUPLICATE | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+ 4 rows in set根据查询结果可知,tenant1 租户有一个 1 号日志流、一个 1001 号日志流、一个 1002 号日志流以及一个 1003 号广播日志流。
有关视图
DBA_OB_LS中各字段的详细说明,请参见 DBA_OB_LS。
分别查看租户各日志流的分布情况。
例如,查看 1002 号日志流的副本分布及该日志流的
paxos_replica_num。系统租户
obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE LS_ID=1002 AND TENANT_ID=1002;有关视图
CDB_OB_LS_LOCATIONS中各字段的详细说明,请参见 CDB_OB_LS_LOCATIONS。用户租户
MySQL 模式Oracle 模式MySQL 模式下执行以下语句:
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS_LOCATIONS WHERE LS_ID=1002;Oracle 模式下执行以下语句:
obclient [SYS]> SELECT * FROM SYS.DBA_OB_LS_LOCATIONS WHERE LS_ID=1002;查询结果的示例如下:
+----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ | CREATE_TIME | MODIFY_TIME | LS_ID | SVR_IP | SVR_PORT | SQL_PORT | ZONE | ROLE | MEMBER_LIST | PAXOS_REPLICA_NUMBER | REPLICA_TYPE | LEARNER_LIST | REBUILD | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ | 2024-01-31 16:50:06.856652 | 2024-01-31 16:52:54.618093 | 1002 | 100.xx.xxx.012 | 5070 | 5105 | z1 | LEADER | 100.xx.xxx.012:5070:1,100.xx.xxx.001:5071:1706691024376341,100.xx.xxx.003:5073:1706691171162545,100.xx.xxx.004:5074:1706691096303187 | 5 | FULL | | FALSE | | 2024-01-31 16:50:24.450775 | 2024-01-31 16:52:54.760939 | 1002 | 100.xx.xxx.001 | 5071 | 5106 | z1 | FOLLOWER | NULL | NULL | FULL | | FALSE | | 2024-01-31 16:52:51.216095 | 2024-01-31 16:52:57.135393 | 1002 | 100.xx.xxx.003 | 5073 | 5108 | z2 | FOLLOWER | NULL | NULL | FULL | | FALSE | | 2024-01-31 16:51:36.356401 | 2024-01-31 16:52:54.686229 | 1002 | 100.xx.xxx.004 | 5074 | 5109 | z3 | FOLLOWER | NULL | NULL | FULL | | FALSE | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ 4 rows in set根据结果可知,租户的 1002 号日志流有 4 个 F 类型的副本,而日志流的
PAXOS_REPLICA_NUMBER为5,需要将该日志流的PAXOS_REPLICA_NUMBER调整为4。
执行修改
paxos_replica_num的命令。语句如下:
ALTER SYSTEM MODIFY LS [=] ls_id PAXOS_REPLICA_NUM [=] paxos_replica_num [TENANT [=] 'tenant_name'];语句使用说明:
ls_id:指定待修改的日志流 ID。paxos_replica_num:指定修改后日志流的法定成员数,即租户 Locality 中全功能型(F)副本的数量。指定该参数的值时,需要注意以下事项:
需要保证调整后,
paxos_replica_num及 Leader 副本中MEMBER_LIST的成员个数均满足多数派。paxos_replica_num的值需要大于等于当前 Leader 副本中MEMBER_LIST的成员个数。sys 租户可以通过查询视图CDB_OB_LS_LOCATIONS确认;用户租户可以通过查询视图DBA_OB_LS_LOCATIONS确认。paxos_replica_num只能调小,不能调大,且值的变化不能超过 1。例如,本示例中,只能将paxos_replica_num修改为4。
如果指定的值有以上任一条件不满足,则系统会报错。
tenant_name:指定待操作的租户。系统租户可以指定其他租户,用户租户只能指定本租户。如果不显式指定待操作的租户,则默认租户名为当前租户。本语句不支持使用all、all_user、all_meta等指定所有租户、用户租户以及所有 Meta 租户。
示例如下:
obclient> ALTER SYSTEM MODIFY LS = 1002 paxos_replica_num = 4;执行成功后,再次查看该日志流的副本分布。
系统租户
obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE LS_ID=1002 AND TENANT_ID=1002;用户租户
MySQL 模式Oracle 模式MySQL 模式下执行以下语句:
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS_LOCATIONS WHERE LS_ID=1002;Oracle 模式下执行以下语句:
obclient [SYS]> SELECT * FROM SYS.DBA_OB_LS_LOCATIONS WHERE LS_ID=1002;查询结果的示例如下:
+----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ | CREATE_TIME | MODIFY_TIME | LS_ID | SVR_IP | SVR_PORT | SQL_PORT | ZONE | ROLE | MEMBER_LIST | PAXOS_REPLICA_NUMBER | REPLICA_TYPE | LEARNER_LIST | REBUILD | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ | 2024-01-31 16:50:06.856652 | 2024-01-31 17:17:23.032797 | 1002 | 100.xx.xxx.012 | 5070 | 5105 | z1 | LEADER | 100.xx.xxx.012:5070:1,100.xx.xxx.001:5071:1706691024376341,100.xx.xxx.003:5073:1706691171162545,100.xx.xxx.004:5074:1706691096303187 | 4 | FULL | | FALSE | | 2024-01-31 16:50:24.450775 | 2024-01-31 17:17:22.976381 | 1002 | 100.xx.xxx.001 | 5071 | 5106 | z1 | FOLLOWER | NULL | NULL | FULL | | FALSE | | 2024-01-31 16:52:51.216095 | 2024-01-31 17:17:23.113112 | 1002 | 100.xx.xxx.003 | 5073 | 5108 | z2 | FOLLOWER | NULL | NULL | FULL | | FALSE | | 2024-01-31 16:51:36.356401 | 2024-01-31 17:17:23.715470 | 1002 | 100.xx.xxx.004 | 5074 | 5109 | z3 | FOLLOWER | NULL | NULL | FULL | | FALSE | +----------------------------+----------------------------+-------+----------------+----------+----------+------+----------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+ 4 rows in set从查询结果可知,租户 1002 号日志流的
PAXOS_REPLICA_NUMBER变成了4。