分区管理
设置集群分区可以防止单个分区故障而引发整个集群不可用。每台节点启动的时候设置 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