MongoDB搭建分片集群
分片:将数据库集合中的数据拆分成多份,分布式的保存到多台电脑上,这样不同的电脑保存不同的数据,就大大的提升了服务器的容量
搭建大致流程
搭建配置服务器复制集
- 注意:早期版本的配置服务器只要一台即可,最新版本MongoDB要求配置服务器必须是一个复制集
- 搭建分片服务器复制集:用于保存数据的多台电脑
- 搭建路由服务器:用于建立配置服务器和分片服务器之间的关系
搭建配置服务器集群
- 下载:https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.2.6.zip
- 解压三份MongoDB安装包(三台MongoDB配置服务器),分别命名:mongodb-config-27018、mongodb-config-27019、mongodb-config-27020
- 在安装目录下新建data和log文件夹
- log目录下新建mongo.log文件
bin目录下新建mongo.config文件,配置如下内容
# 数据保存到哪 storage: dbPath: D:\Developer\MongoDB666\mongodb-config-27018\data journal: enabled: true # engine: # mmapv1: # wiredTiger: # 日志保存到哪 systemLog: destination: file logAppend: true path: D:\Developer\MongoDB666\mongodb-config-27018\log\mongod.log # 绑定的IP和端口号 net: port: 27018 bindIp: 127.0.0.1 # 复制集名称 replication: replSetName: 'it666' # 复制集的作用 sharding: clusterRole: configsvr // 配置服务器
- 以上步骤需对三份文件夹都进行配置,且需要换成不同的端口号
- 注册配置MongoDB,注册服务
分别进入bin目录,以管理员身份打开终端
mongod --config mongo.config文件路径 --serviceName "服务名称" --serviceDisplayName "显示的服务名称" --install mongod --config D:\Developer\MongoDB666\mongodb-config-27018\bin\mongo.config --serviceName "MongoDB27018" --serviceDisplayName "MongoDB27018" --install mongod --config D:\Developer\MongoDB666\mongodb-config-27019\bin\mongo.config --serviceName "MongoDB27019" --serviceDisplayName "MongoDB27019" --install mongod --config D:\Developer\MongoDB666\mongodb-config-27020\bin\mongo.config --serviceName "MongoDB27020" --serviceDisplayName "MongoDB27020" --install
- 打开任务管理器——服务——启动三台服务器
手动启动服务,测试连接
mongo --host 127.0.0.1 --port 27018 mongo --host 127.0.0.1 --port 27019 mongo --host 127.0.0.1 --port 27020
初始化复制集(任意一台服务器执行即可)
rs.initiate({ _id: 'it666', configsvr: true, // 配置服务器 members: [ {_id: 0, host: '127.0.0.1:27018'}, {_id: 1, host: '127.0.0.1:27019'}, {_id: 2, host: '127.0.0.1:27020'}] })
搭建分片服务器集群
- 解压三份MongoDB安装包(三台MongoDB分片服务器),分别命名:mongodb-shard-27021、mongodb-shard-27022、mongodb-shard-27023
- 在安装目录下新建data和log文件夹
- log目录下新建mongo.log文件
bin目录下新建mongo.config文件,配置如下内容
# 数据保存到哪 storage: dbPath: D:\Developer\MongoDB666\mongodb-shard-27021\data journal: enabled: true # engine: # mmapv1: # wiredTiger: # 日志保存到哪 systemLog: destination: file logAppend: true path: D:\Developer\MongoDB666\mongodb-shard-27021\log\mongod.log # 绑定的IP和端口号 net: port: 27021 bindIp: 127.0.0.1 # 复制集名称 replication: replSetName: 'itzb' # 复制集的作用 sharding: clusterRole: shardsvr // 分片服务器
- 以上步骤需对三份文件夹都进行配置,且需要换成不同的端口号
- 注册配置MongoDB,注册服务
分别进入bin目录,以管理员身份打开终端
mongod --config mongo.config文件路径 --serviceName "服务名称" --serviceDisplayName "显示的服务名称" --install mongod --config D:\Developer\MongoDB666\mongodb-shard-27021\bin\mongo.config --serviceName "MongoDB27021" --serviceDisplayName "MongoDB27021" --install mongod --config D:\Developer\MongoDB666\mongodb-shard-27022\bin\mongo.config --serviceName "MongoDB27022" --serviceDisplayName "MongoDB27022" --install mongod --config D:\Developer\MongoDB666\mongodb-shard-27023\bin\mongo.config --serviceName "MongoDB27023" --serviceDisplayName "MongoDB27023" --install
- 打开任务管理器——服务——启动三台服务器
手动启动服务,测试连接
mongo --host 127.0.0.1 --port 27021 mongo --host 127.0.0.1 --port 27022 mongo --host 127.0.0.1 --port 27023
初始化复制集(任意一台服务器执行即可)
rs.initiate({ _id: 'itzb', members: [ {_id: 0, host: '127.0.0.1:27021'}, {_id: 1, host: '127.0.0.1:27022'}, {_id: 2, host: '127.0.0.1:27023'}] })
搭建路由服务器
- 解压一份MongoDB安装包(一台MongoDB路由服务器),命名为:mongodb-router-27024
- 在安装目录下新建log文件夹(路由服务器不保存数据,不用创建data文件夹)
- log目录下新建mongo.log文件
bin目录下新建mongo.config文件,配置如下内容
# 日志保存到哪 systemLog: destination: file logAppend: true path: D:\Developer\MongoDB666\mongodb-router-27024\log\mongod.log # 绑定的IP和端口号 net: port: 27024 bindIp: 127.0.0.1 # 指定对应配置服务器的复制集地址 sharding: configDB: it666/127.0.0.1:27018,127.0.0.1:27019,127.0.0.1:27020 // 复制集名/服务器地址
- 注册配置MongoDB,注册服务
分别进入bin目录,以管理员身份打开终端
- 注意:以下指令是mongos开头
mongos --config mongo.config文件路径 --serviceName "服务名称" --serviceDisplayName "显示的服务名称" --install mongos --config D:\Developer\MongoDB666\mongodb-router-27024\bin\mongo.config --serviceName "MongoDB27024" --serviceDisplayName "MongoDB27024" --install
- 打开任务管理器——服务——启动路由服务器
手动启动服务,测试连接
mongo --host 127.0.0.1 --port 27024
添加分片服务器
sh.addShard( "itzb/127.0.0.1:27021") // 复制集名/服务器地址 sh.addShard( "itzb/127.0.0.1:27022") sh.addShard( "itzb/127.0.0.1:27023")
给指定数据库开启分片
- 注意:默认情况下,集合数据不会分片,均保存在主分片中
sh.enableSharding("demo") // 数据库名
给指定数据库中的集合指定分片片键
sh.shardCollection("demo.user",{'age':1}) // 以字段作为分片片键 sh.shardCollection("demo.user",{'name':hashed}) // 以字段的哈希值作为分片片键