一,副本集与分片存储概述
设定副本是一组mongodb保持相同数据集的过程。副本集提供冗余和高可用性,通过在不同数据库服务器上提供多个数据副本,达到一定程度的容错能力,以防止丢失单个数据库服务器。与MySQL的副本集相比,MongoDB的中的副本集配置十分便捷,且支持副本集中主服务器的自动选择。当主服务器宕机后,所有副本集会通过投票自动选择出一个新的主服务器,用户无需关心副本集中的主从服务器情况,只需对这个副本集进行操作即可。分片是一种跨多台机器分发数据的方法,MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署,MongoDB的分片群集包括以下组件:( 源自MongoDB的官网)
- 分片:每个分片包含分片数据的子集每个分片都可以部署为副本集。
- mongos:充当查询路由器,提供客户端应用程序和分片集群之间的接口。
- 配置服务器:存储群集的元数据和配置设置。从MongoDB 3.4开始,配置服务器必须部署为副本集(CSRS)。
二,基本结构(源自MongoDB的官网)
副本集结构(图一)
分片集群结构(图二)
三,详细步骤
分片结构端口如下:
Shard Server 1:27020
Shard Server 2:27021
Shard Server 3:27022
Shard Server 4:27023
Config Server :27100
Route Process:40000
1.创建分片文件夹及日志文件:
- C:\ Program Files \ MongoDB目录下创建shard文件夹
- C:\ Program Files \ MongoDB \ shard目录下创建文件夹conf1(配置服务器副本集),conf2,log(日志文件),s0(副本集),s1,s2,s3
- C:\ Program Files \ MongoDB \ shard \ log目录下创建日志文件conf1.log,cong2.log,route.log,s0.log,s1.log,s2.log,s3.log(日志文件创建方法:打开记事本另存为 - >保存类型“所有文件” - >文件名“conf1.log”)
2.创建分片副本集rs0(切记以下每个步骤运行的命令行程序在创建分片的整个过程都不能关闭):
(1)创建复制集:
图三
图四
(2)配置副本集rs0(不要关闭图三四,打开命令行):首先键入cd C:\ Program File \ MongoDB \ Server \ 4.0 \ bin,然后依次执行以下几步:
> mongo localhost:27020
> rs.initiate({_id: 'rs0', members: [{_id: 0, host: 'localhost:27020'}, {_id: 1, host: 'localhost:27021'}]})
> rs.isMaster()
> rs.add('localhost:27020')
> rs.add('localhost:27021')
3.创建分片副本集rs1:
(1)创建复制集:
图五
图六
(2)配置副本集rs1(不要关闭图五六,打开命令行):首先键入cd C:\ Program File \ MongoDB \ Server \ 4.0 \ bin,然后依次执行以下几步:
> mongo localhost:27022
> rs.initiate({_id: 'rs0', members: [{_id: 0, host: 'localhost:27022'}, {_id: 1, host: 'localhost:27023'}]})
> rs.isMaster()
> rs.add('localhost:27022')
> rs.add('localhost:27023')
4.创建配置副本集的的conf
(1)创建复制集:
图七
图八
(2)配置副本集conf(不要关闭图七八,打开命令行):首先键入cd C:\ Program File \ MongoDB \ Server \ 4.0 \ bin,然后依次执行以下几步:
> mongo localhost:27100
> rs.initiate({_id: 'conf', members: [{_id: 0, host: 'localhost:27100'}, {_id: 1, host: 'localhost:27101'}]})
> rs.isMaster()
> rs.add('localhost:27100')
> rs.add('localhost:27101')
5.创建路线
(1)创建路由服务器
(2)设置分片
键入cd C:\ Program File \ MongoDB \ Server \ 4.0 \ bin,然后依次执行以下几步:
> mongo localhost:40000
> use admin
> db.runCommand({ addshard: 'rs0/localhost:27020,localhost:27021'})
> db.runCommand({ addshard: 'rs1/localhost:27030,localhost:27031'})
> db.runCommand({ enablesharding: 'test'})
> db.runCommand({ shardcollection: 'test.user', key: {name: 1}})
四,环境配置总结
或许以上每个步骤都有坑,在此之前小白根据网上各种配置方案都没配置成功(也许是小白理解能力...),不过还好最后通过结合文档对分片结构建立的理解,实现了环境搭建,现在看来最重要的还是要自己多思考,理清思路,不要盲从网上的教程,尤其注重内容的时效性,第一时间最好查看官方文档(虽然写得也不是很清楚,但至少版本与时俱进,配置思路清晰),这样大概会少走许多弯路吧...