文章19 | 阅读 9906 | 点赞0
分片(sharding)是一种跨多台机器分布数据的方法, MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署。换句话说:分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。有时也用分区(partitioning)来表示这个概念。将数据分散到不同的机器上,不需要功能强大的大型计算机就可以储存更多的数据,处理更多的负载。
有两种解决系统增长的方法:垂直扩展和水平扩展
将mongod-4.4.5 复制多份并重命名。注意:每个mongod-4.4.5下面都要创建config、log和data/db目录。
mongodb-primary1-27018/config/mongod.conf
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-primary1-27018/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
#The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: "/Users/mengday/Mongo/mongodb-primary1-27018/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-primary1-27018/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27018
setParameter:
enableLocalhostAuthBypass: false
replication:
#副本集的名称
replSetName: myshardrs01
sharding:
#分片角色
clusterRole: shardsvr
mongodb-primary1-27118/config/mongod.conf
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-primary1-27118/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
#The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: "/Users/mengday/Mongo/mongodb-primary1-27118/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-primary1-27118/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27118
setParameter:
enableLocalhostAuthBypass: false
replication:
#副本集的名称
replSetName: myshardrs01
sharding:
#分片角色
clusterRole: shardsvr
mongodb-primary1-27218/config/mongod.conf
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-primary1-27218/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
#The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: "/Users/mengday/Mongo/mongodb-primary1-27218/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-primary1-27218/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27218
setParameter:
enableLocalhostAuthBypass: false
replication:
#副本集的名称
replSetName: myshardrs01
sharding:
#分片角色
clusterRole: shardsvr
cd Mongo/mongodb-primary1-27018
./bin/mongod -f ./config/mongod.conf
cd Mongo/mongodb-primary1-27118
./bin/mongod -f ./config/mongod.conf
cd Mongo/mongodb-primary1-27218
./bin/mongod -f ./config/mongod.conf
# 查看是否启动成功
ps -ef |grep mongod
mongodb-primary1-27018 ./bin/mongo --host 127.0.0.1 --port 27018
// 初始化副本集
> rs.initiate()
> rs.status()
// 主节点配置查看
> myshardrs01:PRIMARY> rs.conf()
// 添加副本节点
> myshardrs01:PRIMARY> rs.add("127.0.0.1:27118")
// 添加仲裁节点
> myshardrs01:PRIMARY> rs.addArb("127.0.0.1:27218")
// 查看副本集的配置情况
myshardrs01:PRIMARY> rs.conf()
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-primary2-27318/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
#The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: /Users/mengday/Mongo/mongodb-primary2-27318/data/db
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-primary2-27318/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27318
setParameter:
enableLocalhostAuthBypass: false
replication:
#副本集的名称
replSetName: myshardrs02
sharding:
#分片角色
clusterRole: shardsvr
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-primary2-27418/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
#The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: /Users/mengday/Mongo/mongodb-primary2-27418/data/db
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-primary2-27418/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27418
setParameter:
enableLocalhostAuthBypass: false
replication:
#副本集的名称
replSetName: myshardrs02
sharding:
#分片角色
clusterRole: shardsvr
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-primary2-27518/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
#The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: /Users/mengday/Mongo/mongodb-primary2-27518/data/db
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-primary2-27518/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27518
setParameter:
enableLocalhostAuthBypass: false
replication:
#副本集的名称
replSetName: myshardrs02
sharding:
#分片角色
clusterRole: shardsvr
cd ~/Mongo/mongodb-primary2-27318
./bin/mongod -f ./config/mongod.conf
cd ~/Mongo/mongodb-primary2-27418
./bin/mongod -f ./config/mongod.conf
cd ~/Mongo/mongodb-primary2-27518
./bin/mongod -f ./config/mongod.conf
ps -ef | grep mongod
mongodb-primary2-27318 ./bin/mongo --host 127.0.0.1 --port 27318
> rs.initiate()
> myshardrs02:SECONDARY> rs.status()
> myshardrs02:PRIMARY> rs.conf()
> myshardrs02:PRIMARY> rs.add("127.0.0.1:27418")
> myshardrs02:PRIMARY> rs.addArb("127.0.0.1:27518")
> myshardrs02:PRIMARY> rs.conf()
> myshardrs02:PRIMARY> rs.status()
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-configserver-27019/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
#The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: /Users/mengday/Mongo/mongodb-configserver-27019/data/db
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-configserver-27019/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27019
setParameter:
enableLocalhostAuthBypass: false
replication:
#副本集的名称
replSetName: myconfigrs
sharding:
#分片角色
clusterRole: configsvr
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-configserver-27119/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
#The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: /Users/mengday/Mongo/mongodb-configserver-27119/data/db
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-configserver-27119/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27119
setParameter:
enableLocalhostAuthBypass: false
replication:
#副本集的名称
replSetName: myconfigrs
sharding:
#分片角色
clusterRole: configsvr
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-configserver-27219/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
#The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: /Users/mengday/Mongo/mongodb-configserver-27219/data/db
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-configserver-27219/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27219
setParameter:
enableLocalhostAuthBypass: false
replication:
#副本集的名称
replSetName: myconfigrs
sharding:
#分片角色
clusterRole: configsvr
cd ~/Mongo/mongodb-configserver-27019
./bin/mongod -f ./config/mongod.conf
cd ~/Mongo/mongodb-configserver-27119
./bin/mongod -f ./config/mongod.conf
cd ~/Mongo/mongodb-configserver-27219
./bin/mongod -f ./config/mongod.conf
ps -ef | grep mongod
cd Mongo/mongodb-configserver-27019
./bin/mongo --host 127.0.0.1 --port 27019
> rs.initiate()
> myconfigrs:SECONDARY> rs.status()
> myconfigrs:PRIMARY> rs.conf()
// 添加两个副本节点
> myconfigrs:PRIMARY> rs.add("127.0.0.1:27119")
> rs.add("127.0.0.1:27219")
> myconfigrs:PRIMARY> rs.conf()
> myconfigrs:PRIMARY> rs.status()
mongodb-mongos-27017/config/mongos.conf
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-mongos-27017/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-mongos-27017/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27017
setParameter:
enableLocalhostAuthBypass: false
sharding:
#指定配置节点副本集
configDB: myconfigrs/127.0.0.1:27019,127.0.0.1:27119,127.0.0.1:27219
cd Mongo/mongodb-mongos-27017
# 启动mongos
./bin/mongos -f ./config/mongos.conf
// 连接
./bin/mongo --host 127.0.0.1 --port 27017
// 将第一套副本集加入进来
mongos>sh.addShard("myshardrs01/127.0.0.1:27118,127.0.0.1:27218")
// 将第二套副本集加入进来
mongos> sh.addShard("myshardrs02/127.0.0.1:27418,127.0.0.1:27518")
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("60781f0e70d3d8115984e85a")
}
shards:
{ "_id" : "myshardrs01", "host" : "myshardrs01/127.0.0.1:27118,localhost:27018", "state" : 1 }
{ "_id" : "myshardrs02", "host" : "myshardrs02/127.0.0.1:27418,localhost:27318", "state" : 1 }
active mongoses:
"4.4.5" : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
30 : Success
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
config.system.sessions
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
myshardrs01 994
myshardrs02 30
too many chunks to print, use verbose if you want to force print
// 开启数据库分片
mongos> sh.enableSharding("articledb")
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("60781f0e70d3d8115984e85a")
}
shards:
{ "_id" : "myshardrs01", "host" : "myshardrs01/127.0.0.1:27118,localhost:27018", "state" : 1 }
{ "_id" : "myshardrs02", "host" : "myshardrs02/127.0.0.1:27418,localhost:27318", "state" : 1 }
active mongoses:
"4.4.5" : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
166 : Success
databases:
{ "_id" : "articledb", "primary" : "myshardrs02", "partitioned" : true, "version" : { "uuid" : UUID("f2e6b495-cf22-4ce9-b6ad-52ed1ebd78e3"), "lastMod" : 1 } }
{ "_id" : "config", "primary" : "config", "partitioned" : true }
config.system.sessions
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
myshardrs01 858
myshardrs02 166
too many chunks to print, use verbose if you want to force print
对集合分片,你必须使用 sh.shardCollection() 方法指定集合和分片键。sh.shardCollection(namespace, key, unique)
对集合进行分片时,你需要选择一个 片键(Shard Key) , shard key 是每条记录都必须包含的,且建立了
索引的单个字段或复合字段,MongoDB按照片键将数据划分到不同的 数据块 中,并将 数据块 均衡地分布
到所有分片中.为了按照片键划分数据块,MongoDB使用 基于哈希的分片方式(随机平均分配)或者基
于范围的分片方式(数值大小分配) 。
用什么字段当片键都可以,如:nickname作为片键,但一定是必填字段。
对于 基于哈希的分片 ,MongoDB计算一个字段的哈希值,并用这个哈希值来创建数据块.
在使用基于哈希分片的系统中,拥有”相近”片键的文档 很可能不会 存储在同一个数据块中,因此数据的分
离性更好一些.使用nickname作为片键,根据其值的哈希值进行数据分片
mongos> sh.shardCollection("articledb.comment",{"nickname":"hashed"})
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("60781f0e70d3d8115984e85a")
}
shards:
{ "_id" : "myshardrs01", "host" : "myshardrs01/127.0.0.1:27118,localhost:27018", "state" : 1 }
{ "_id" : "myshardrs02", "host" : "myshardrs02/127.0.0.1:27418,localhost:27318", "state" : 1 }
active mongoses:
"4.4.5" : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: yes
Collections with active migrations:
config.system.sessions started at Thu Apr 15 2021 19:52:25 GMT+0800 (CST)
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
325 : Success
databases:
{ "_id" : "articledb", "primary" : "myshardrs02", "partitioned" : true, "version" : { "uuid" : UUID("f2e6b495-cf22-4ce9-b6ad-52ed1ebd78e3"), "lastMod" : 1 } }
articledb.comment
shard key: { "nickname" : "hashed" }
unique: false
balancing: true
chunks:
myshardrs01 2
myshardrs02 2
{ "nickname" : { "$minKey" : 1 } } -->> { "nickname" : NumberLong("-4611686018427387902") } on : myshardrs01 Timestamp(1, 0)
{ "nickname" : NumberLong("-4611686018427387902") } -->> { "nickname" : NumberLong(0) } on : myshardrs01 Timestamp(1, 1)
{ "nickname" : NumberLong(0) } -->> { "nickname" : NumberLong("4611686018427387902") } on : myshardrs02 Timestamp(1, 2)
{ "nickname" : NumberLong("4611686018427387902") } -->> { "nickname" : { "$maxKey" : 1 } } on : myshardrs02 Timestamp(1, 3)
{ "_id" : "config", "primary" : "config", "partitioned" : true }
config.system.sessions
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
myshardrs01 699
myshardrs02 325
too many chunks to print, use verbose if you want to force print
mongos>
对于 基于范围的分片 ,MongoDB按照片键的范围把数据分成不同部分.假设有一个数字的片键:想象一个
从负无穷到正无穷的直线,每一个片键的值都在直线上画了一个点.MongoDB把这条直线划分为更短的不
重叠的片段,并称之为 数据块 ,每个数据块包含了片键在一定范围内的数据.
在使用片键做范围划分的系统中,拥有”相近”片键的文档很可能存储在同一个数据块中,因此也会存储在同
一个分片中.如使用作者年龄字段作为片键,按照点赞数的值进行分片:
mongos> sh.shardCollection("articledb.author",{"age":1})
注意的是:
1)一个集合只能指定一个片键,否则报错。
2)一旦对一个集合分片,分片键和分片值就不可改变。 如:不能给集合选择不同的分片键、不能更新
分片键的值。
3)根据age索引进行分配数据。
基于范围的分片方式与基于哈希的分片方式性能对比:
基于范围的分片方式提供了更高效的范围查询,给定一个片键的范围,分发路由可以很简单地确定哪个数
据块存储了请求需要的数据,并将请求转发到相应的分片中.
不过,基于范围的分片会导致数据在不同分片上的不均衡,有时候,带来的消极作用会大于查询性能的积极
作用.比如,如果片键所在的字段是线性增长的,一定时间内的所有请求都会落到某个固定的数据块中,最终
导致分布在同一个分片中.在这种情况下,一小部分分片承载了集群大部分的数据,系统并不能很好地进行
扩展.
与此相比,基于哈希的分片方式以范围查询性能的损失为代价,保证了集群中数据的均衡.哈希值的随机性
使数据随机分布在每个数据块中,因此也随机分布在不同分片中.但是也正由于随机性,一个范围查询很难
确定应该请求哪些分片,通常为了返回需要的结果,需要请求所有分片.
如无特殊情况,一般推荐使用 Hash Sharding。
而使用 _id 作为片键是一个不错的选择,因为它是必有的,你可以使用数据文档 _id 的哈希作为片键。
这个方案能够是的读和写都能够平均分布,并且它能够保证每个文档都有不同的片键所以数据块能够很
精细。
似乎还是不够完美,因为这样的话对多个文档的查询必将命中所有的分片。虽说如此,这也是一种比较
好的方案了。理想化的 shard key 可以让 documents 均匀地在集群中分布:
// 显示集群的详细信息:
mongos> db.printShardingStatus()
// 查看均衡器是否工作(需要重新均衡时系统才会自动启动,不用管它):
mongos> sh.isBalancerRunning()
false
// 查看当前Balancer状态
mongos> sh.getBalancerState()
true
mongos> use articledb
// 注意:从路由上插入的数据,必须包含片键,否则无法插入。
mongos> for(var i=1;i<=1000;i++) {db.comment.insert({_id:i+"",nickname:"BoBo"+i})}
WriteResult({ "nInserted" : 1 })
分别登陆两个片的主节点,统计文档数量
mongos> for(var i=1;i<=20000;i++) {db.author.save({"name":"monday"+i, "age":NumberInt(i%120)})}
mongos> db.author.count()
20000
如果查看状态发现没有分片,则可能是由于以下原因造成了:
use config
db.settings.save( { _id:"chunksize", value: 1 } )
测试完改回来:
db.settings.save( { _id:"chunksize", value: 64 } )
注意:要先改小,再设置分片。为了测试,可以先删除集合,重新建立集合的分片策略,再插入数据测试即可。
mongodb-mongos-27117/config/mongos.conf
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/Users/mengday/Mongo/mongodb-mongos-27117/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/Users/mengday/Mongo/mongodb-mongos-27117/log/mongod.pid"
net:
#服务实例绑定的IP,默认是localhost,多个用逗号分隔
#bindIp: 127.0.0.1
#绑定的端口,默认是27017
port: 27117
setParameter:
enableLocalhostAuthBypass: false
sharding:
#指定配置节点副本集
configDB: myconfigrs/127.0.0.1:27019,127.0.0.1:27119,127.0.0.1:27219
cd Mongo/mongodb-mongos-27117
./bin/mongos -f ./config/mongos.conf
# 使用mongo客户端登录27117,发现,第二个路由无需配置,因为分片配置都保存到了配置服务器中
了。
./bin/mongo --host 127.0.0.1 --port 27117
mongos> sh.status()
spring: #数据源配置
data:
mongodb: #连接路由字符串
uri: mongodb://127.0.0.1:27017,127.0.0.1:27117/articledb
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://monday.blog.csdn.net/article/details/77488029
内容来源于网络,如有侵权,请联系作者删除!