这个租户的unit_num为1,为何会相同的服务器上有两个日志流?


这个租户的unit_num为1,为何会相同的服务器上有两个日志流?

1 个赞

LS_ID为1的日志流为广播日志,其他日志流为业务日志流

4 个赞

我看cdb_ob_ls_locations表中字段信息几乎都一样?还有哪些表可以区分出你说的广播和业务日志流?

Mark,问题比较有意思,之前没关注过,一起研究下,顺便看下有没有结论

1 个赞

观测了下,LS_ID=1的不是广播日志流,应该是自带的系统库的日志流,每个租户都自带oceanbase、mysql等系统库

obclient [oceanbase]> select TENANT_ID,DATABASE_NAME,LS_ID,count(*) from oceanbase.CDB_OB_TABLE_LOCATIONS where LS_ID=1 and TENANT_ID>1000 group by TENANT_ID,DATABASE_NAME,LS_ID;
+-----------+---------------+-------+----------+
| TENANT_ID | DATABASE_NAME | LS_ID | count(*) |
+-----------+---------------+-------+----------+
|      1005 | oceanbase     |     1 |     1648 |
|      1006 | oceanbase     |     1 |     1182 |
|      1007 | oceanbase     |     1 |     2472 |
|      1008 | oceanbase     |     1 |     1749 |
|      1005 | mysql         |     1 |        8 |
|      1006 | mysql         |     1 |        8 |
|      1007 | mysql         |     1 |       12 |
+-----------+---------------+-------+----------+
7 rows in set (0.125 sec)
1 个赞

感觉不好理解,为何一台服务器有两个日志流? 哪种情况会出现3个甚至更多日志流?

只考虑Leader日志流的话,我理解有这些情况,假设是2-2-2架构的集群,PRIMARY_ZONE是RANDOM模式

  1. LS_ID=1的日志流是系统元数据的日志流,必须有的
  2. 只要这个节点包含Leader副本,就会有日志流LEADER,2-2-2的架构是6台服务器,就会有6个日志流,分别从LS_ID 1001-1006。
  3. 用到复制表的情况下,会额外生成一个广播复制流

所以我理解的日志流的数量计算公式是:LS_ID=1日志流 + PRIMARY_ZONE * UNIT_NUM + 广播复制流

  • 假设是2-2-2架构的集群,PRIMARY_ZONE是RANDOM模式
    • 1(LS_ID=1) + 3(zone)*2(unit_num) + 1(广播流) = 8
  • 假设是2-2-2架构的集群,PRIMARY_ZONE是zone1模式
    • 1 + 1*2 + 1 = 4
  • 假设是2-2-2架构的集群,PRIMARY_ZONE是zone1,zone2模式
    • 1 + 2*2 + 1 = 6
  • 假设是1-1-1架构的集群,PRIMARY_ZONE是RANDOM模式
    • 1 + 3*1 + 1 = 5
  • 假设是1-1-1架构的集群,PRIMARY_ZONE是zone1
    • 1 + 1*1 + 1 = 3
  • 假设是1-1-1架构的集群,PRIMARY_ZONE是zone1,zone2
    • 1 + 2*1 + 1 = 4
1 个赞

日志流是按租户来算的,对吧?应该不是按数据库来算的,假设2-2-2的集群架构,如果有两个业务租户,是不是日志流的个数会发生变化?

是的。4.x是按租户算的

1 个赞