分区管理

设置集群分区可以防止单个分区故障而引发整个集群不可用。每台节点启动的时候设置 cell 将自动加入该分区。

查看分区信息

./udbto-cli zone list

ZONE        STATUS    
default     available

修改分区

不小心错误设置了volume分区,希望改变分区

./udbto-cli volume update {volume name}  --zone-name={zone name}

Volume configuration changes:
  Name                : udbtovol
  Description         :  
  ZoneName            : default -> default
  Capacity            : 50 GB
  ReplicaNum         : 3 
  Allow follower read : Disabled
  Allow CrossZone : Disabled
  EbsBlkSize          : 0 byte
  CacheCap            : 0 GB
  EnableQuota : Disabled
  DeleteLockTime            : 0 h
  LeaderRetryTimeout            : 0 s
  Transaction Mask    : rename 
  Transaction Timeout : 1 minutes
  Tx Conflict Retry Num : 121
  Tx Conflict Retry Interval : 500 ms
  Tx Operation limit : 0
  CacheAction         : 0 
  CacheRule        : 0 
  CacheThreshold      : 0 byte
  CacheTTL            : 0 day
  CacheHighWater      : 0 
  CacheLowWater       : 0 
  CacheLRUInterval    : 0 min
  Vol readonly when full : Disabled
  TrashInterval            : 0 min
  AccessTimeValidInterval            : 86400 s
  EnablePersistAccessTime        : false 
  EnableAutoDpMetaRepair : false
  volStorageClass : ReplicaSSD
  ForbidWriteOpOfProtoVer0 : true
  remoteCacheEnable          : false
  remoteCachePath            : 
  remoteCacheAutoPrepare     : false
  remoteCacheTTL             : 432000
  remoteCacheReadTimeout     : 5
  remoteCacheMaxFileSizeGB   : 128
  remoteCacheOnlyForNotSSD   : false
  remoteCacheMultiRead       : false
  flashNodeTimeoutCount      : 5
  remoteCacheSameZoneTimeout : 400
  remoteCacheSameRegionTimeout : 2

Confirm (yes/no)[yes]: yes
Volume configuration has been update successfully.

默认分区

集群中大部分参数都是有默认值的,默认分区名字为default。需要注意的是一个分区内必须同时有足够的datanode和metanode,否则在该分区创建volume,要么数据分片初始化失败,要么元数据分片初始化失败。

NodeSet含义

每个zone会有若干nodeset,每个nodeset的默认容量为18个节点。

因为UDB-TO实现了multi-raft,每个node启动了一个raft server进程, 每个raft server管理该节点上的m个raft实例,如果这些raft实例的其他复制组成员分布在n个node上,raft实例之间会发送raft心跳,那么心跳会在n个节点之间传递,随着集群规模的扩大,n也会变得比较大。

通过nodeset限制,心跳在nodeset内部相对独立,避免了集群维度的心跳风暴,我们是使用了multi raft和nodeset机制一起来避免产生raft心跳风暴问题。

dp/mp在NodeSet分布

dp/mp在ns中均匀分布,每创建一个dp/mp,都会从上一个dp/mp所在的ns开始轮询,查找可用的ns进行创建。

NodeSet数量规划

对于3副本的dp/mp,只有当一个ns中存在至少3个可用节点时,dp/mp才会选择该ns。count(ns)>= 18*n + 3