-
Notifications
You must be signed in to change notification settings - Fork 526
/
mds.conf
258 lines (239 loc) · 9.19 KB
/
mds.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
#
# mds服务端口
#
mds.listen.addr=127.0.0.1:6666 #__CURVEADM_TEMPLATE__ ${service_addr}:${service_port} __CURVEADM_TEMPLATE__
mds.dummy.listen.port=6667 # __CURVEADM_TEMPLATE__ ${service_dummy_port} __CURVEADM_TEMPLATE__
global.subnet=127.0.0.0/24
global.port=6666 # __CURVEADM_TEMPLATE__ ${service_port} __CURVEADM_TEMPLATE__
#
# etcd相关配置
#
# etcd地址
mds.etcd.endpoint=127.0.0.1:2379 # __CURVEADM_TEMPLATE__ ${cluster_etcd_addr} __CURVEADM_TEMPLATE__
# client建立连接的超时时间
mds.etcd.dailtimeoutMs=5000
# client进行put/get/txn等操作的超时时间
mds.etcd.operation.timeoutMs=5000
# client操作失败可以重试的次数
mds.etcd.retry.times=3
# wait dlock timeout
mds.etcd.dlock.timeoutMs=10000
# dlock lease timeout
mds.etcd.dlock.ttlSec=10
# etcd auth options
etcd.auth.enable=false
etcd.auth.username=
etcd.auth.password=
#
# segment分配量统计相关配置
#
# 将内存中的数据持久化到etcd的间隔, 单位ms
mds.segment.alloc.periodic.persistInterMs=10000
# 出错情况下的重试间隔,单位ms
mds.segment.alloc.retryInterMs=1000
mds.segment.discard.scanIntevalMs=5000
# leader竞选时会创建session, 单位是秒(go端代码的接口这个值的单位就是s)
# 该值和etcd集群election timeout相关.
# etcd的server端限制了该值最小为1.5 * election timeout
# 建议设置etcd集群election timeout为1s
mds.leader.sessionInterSec=5
# leader竞选的超时时间,如果为0竞选不成功会一直block, 如果大于0,在electionTimeoutMs时间
# 内未当选leader会返回错误
mds.leader.electionTimeoutMs=0
#
# scheduler相关配置
#
# copysetScheduler开关
mds.enable.copyset.scheduler=true
# leaderScheduler开关
mds.enable.leader.scheduler=true
# recoverScheduler开关
mds.enable.recover.scheduler=true
# replicaScheduler开关
mds.enable.replica.scheduler=true
# Scan scheduler switch
mds.enable.scan.scheduler=true
# copysetScheduler 轮次间隔,单位是s
mds.copyset.scheduler.intervalSec=5
# replicaScheduler 轮次间隔,单位是s
mds.replica.scheduler.intervalSec=5
# leaderScheduler 轮次间隔,单位是s
mds.leader.scheduler.intervalSec=30
# recoverScheduler 轮次间隔,单位是s
mds.recover.scheduler.intervalSec=5
# Scan scheduler run interval (seconds)
mds.scan.scheduler.intervalSec=60
# 每块磁盘上operator的并发度
mds.schduler.operator.concurrent=1
# leader变更超时时间, 超时后mds从内存移除该operator
mds.schduler.transfer.limitSec=60
# 减一个副本超时时间, 超时后mds从内存移除该operator
mds.scheduler.remove.limitSec=300
# 增加一个副本超时时间, 超时后mds从内存移除该operator
mds.scheduler.add.limitSec=1800
# change一个副本超时时间, 超时后mds从内存移除该operator
mds.scheduler.change.limitSec=1800
# Scan operator timeout (seconds)
mds.scheduler.scan.limitSec=180
# copyset数量极差不能超过均值的百分比
mds.scheduler.copysetNumRangePercent=0.05
# chunkserver上copyset的scatte-rwidth不能超过最小值的百分比
mds.schduler.scatterWidthRangePerent=0.2
# 一个server上超过一定数量的chunkserver offline, 不做恢复
mds.chunkserver.failure.tolerance=3
# chunkserver启动coolingTimeSec_后才可以作为target leader, 单位是s
# TODO(lixiaocui): 续得一定程度上与快照的时间间隔方面做到相关
mds.scheduler.chunkserver.cooling.timeSec=1800
# ScanScheduler: scan start hour in one day ([0-23])
mds.scheduler.scan.startHour=0
# ScanScheduler: scan end hour in one day ([0-23])
mds.scheduler.scan.endHour=6
# ScanScheduler: scan interval for the same copyset (seconds)
mds.scheduler.scan.intervalSec=86400
# ScanScheduler: maximum number of scan copysets at the same time for every logical pool
mds.scheduler.scan.concurrent.per.pool=10
# ScanScheduler: maximum number of scan copysets at the same time for every chunkserver
mds.scheduler.scan.concurrent.per.chunkserver=1
#
# 心跳相关配置,单位为ms
#
# chunkserver和mds的心跳间隔
mds.heartbeat.intervalMs=10000
# chunkserver和mds间心跳miss的时间
mds.heartbeat.misstimeoutMs=30000
# mds在心跳miss后offlinetimeout被标记为offline
mds.heartbeat.offlinetimeoutMs=1800000
# mds启动后延迟一定时间开始指导chunkserver删除物理数据
# 需要延迟删除的原因在代码中备注
mds.heartbeat.clean_follower_afterMs=1200000
#
# namespace cache相关
#
# namestorage的缓存大小,为0表示不缓存
# 按照每个文件最小10GB的空间预算。算上超售(2倍)
# 文件数量 = 5PB/10GB ~= 524288 个文件
# sizeof(namespace对象) * 524288 ~= 89Byte *524288 ~= 44MB 空间
# 16MB chunk大小, 1个segment 1GB
# sizeof(segment 对象) * 2621440 ~=(32 + (1024/16)*12)* 2621440 ~= 1.95 GB
# 数据量:3GB左右
# 记录数量:524288+2621440 ~= 300w左右
mds.cache.count=100000
#
# mds file record settings
#
# mds file记录过期时间,单位us
mds.file.expiredTimeUs=5000000
# mds后台扫描线程扫描file记录间隔时间,单位us
mds.file.scanIntevalTimeUs=500000
#
# auth settings
#
# root用户密码
mds.auth.rootUserName=root
mds.auth.rootPassword=root_password
#
# file lock setting
#
# mds的文件锁桶大小
mds.filelock.bucketNum=8
#
# topology config
#
# Toplogy 定期刷新入数据库的时间间隔
mds.topology.TopologyUpdateToRepoSec=60
# 请求chunkserver上创建全部copyset的超时时间
mds.topology.CreateCopysetRpcTimeoutMs=10000
# 请求chunkserver上创建copyset重试次数
mds.topology.CreateCopysetRpcRetryTimes=20
# 请求chunkserver上创建copyset重试间隔
mds.topology.CreateCopysetRpcRetrySleepTimeMs=1000
# Topology模块刷新metric时间间隔
mds.topology.UpdateMetricIntervalSec=10
#和mds.chunkserver.failure.tolerance设置有关,一个zone 标准配置20台节点,如果允许3台节点failover,
#那么剩余17台机器需要承载原先20台机器的空间,17/20=0.85,即使用量超过这个值即不再往这个池分配,
#具体分为来两种情况, 当不使用chunkfilepool,物理池限制使用百分比,当使用 chunkfilepool 进行chunkfilepool分配时需预留failover空间,
mds.topology.PoolUsagePercentLimit=85
# 多pool选pool策略 0:Random, 1:Weight
mds.topology.choosePoolPolicy=0
# enable LogicalPool ALLOW/DENY status
mds.topology.enableLogicalPoolStatus=false
#
# copyset config
# 默认值,为0时不启用
#
# 生成copyset重试次数
mds.copyset.copysetRetryTimes=10
# 所有chunkserver的scatterWidth需满足的最大方差
mds.copyset.scatterWidthVariance=0
# 所有chunkserver的scatterWidth需满足的最大标准差
mds.copyset.scatterWidthStandardDevation=0
# 所有chunkserver的scatterWidth需满足的最大极差
mds.copyset.scatterWidthRange=0
# 所有chunkserver的scatterWidth偏离均值的百分比
# scatterwidth偏移百分比设置过大,导致部分机器scatterwidth过小,影响机器恢复时间,恢复
# 时间会导致集群的可靠性降低;其次,会导致部分机器scatterwith过大,某些chunkserver上的
# copyset散落在各机器上,其他机器一旦写入,这些scatter-with较大的机器成为热点
# scatterwidth偏移百分比设置过小,导致scatterwidth平均程度要求更大,copyset算法要求越高,
# 导致算法可能算不出理想结果,建议设置值为20
mds.copyset.scatterWidthFloatingPercentage=20
#
# curvefs config
#
# curvefs的默认chunk size大小,16MB = 16*1024*1024 = 16777216
mds.curvefs.defaultChunkSize=16777216
# curvefs的默认segment size大小,1GB = 1*1024*1024*1024 = 1073741824
mds.curvefs.defaultSegmentSize=1073741824
# curvefs的默认最小文件大小,10GB = 10*1024*1024*1024 = 10737418240
mds.curvefs.minFileLength=10737418240
# curvefs的默认最大文件大小,20TB = 20*1024*1024*1024*1024 = 21990232555520
mds.curvefs.maxFileLength=21990232555520
# smallest read/write unit for volume, support |512| and |4096|
mds.curvefs.blockSize=4096
#
# chunkseverclient config
#
# rpc 超时时间
mds.chunkserverclient.rpcTimeoutMs=500
# rpc 重试次数
mds.chunkserverclient.rpcRetryTimes=5
# rpc 重试时间间隔
mds.chunkserverclient.rpcRetryIntervalMs=500
# 从copyset的每个chunkserver getleader的重试的最大轮次
mds.chunkserverclient.updateLeaderRetryTimes=5
# 从copyset的每个chunkserver getleader的每一轮的间隔,需大于raft选主的时间
mds.chunkserverclient.updateLeaderRetryIntervalMs=5000
#
# snapshotclone config
#
# snapshot clone server 地址
mds.snapshotcloneclient.addr=127.0.0.1:5555 # __CURVEADM_TEMPLATE__ ${cluster_snapshotclone_proxy_addr} __CURVEADM_TEMPLATE__
#
# common options
#
# 日志存放文件夹
mds.common.logDir=./ # __CURVEADM_TEMPLATE__ ${prefix}/logs __CURVEADM_TEMPLATE__
# 单元测试情况下
# mds.common.logDir=./runlog/
#
#### throttle options ####
#
# iops
mds.throttle.iopsMin=2000
mds.throttle.iopsMax=26000
mds.throttle.iopsPerGB=30
# bps
mds.throttle.bpsMinInMB=120
mds.throttle.bpsMaxInMB=260
mds.throttle.bpsPerGBInMB=0.3
#
## poolset rules
#
# for backward compatibility, rules are applied for select poolset when creating file
#
# for example
# mds.poolset.rules=/dir1/:poolset1;/dir2/:poolset2;/dir1/sub/:sub
#
# when creating file reqeust doesn't have poolset, above rules are used to select poolset
# - if filename is /dir1/file, then poolset1 is select
# - if filename is /dir1/sub/file, then sub is select
mds.poolset.rules=