十年河东,十年河西,莫欺少年穷
学无止境,精益求精
本文参考至:https://zhuanlan.zhihu.com/p/84406822 感谢知乎作者的无私奉献。
视频讲解:https://www.bilibili.com/video/av52570271/
分片理论:https://www.cnblogs.com/ddbear/p/7746076.html
mongodb相关指令:https://www.cnblogs.com/chenmh/p/8434419.html
本篇博客旨在提供更详细的搭建说明;
1 Mongodb集群介绍
在官方文档的介绍中,MongoDB集群有三种形式:Replica Set(副本集),Sharding(分片集群),Master-Slaver(主从)。那么该如何选择某种集群应用
呢?其实可以从官方的文档介绍中可以得出结论,副本集和主从的模式仅是读写分离与容灾的体现,对于真正到达海量数据时,我们需要的是能将数据按照一定规
则分配至不同服务器进行存储和查询等,这就是分片集群要做的事情,聪明的你肯定已经猜到了,这种模式也囊括了副本集和主从,既然要做集群,那么我们就搭
最顶级的分片集群,本文主要介绍分片集群的搭建,以及分片集群模式下的安全认证处理配置。
2 分片集群的组件介绍
分片集群中主要有三个组件:
- Routers(前端路由器),mongos充当查询路由器,提供客户端应用程序和分片集群之间的接口。客户端通过驱动选择连接某一个mongs作为集群入口,执行
数据查询和写入。没错,它也是多个,当然官方要求至少一个,但为了防止单点故障,我们选择3台。 - Config Servers (配置服务器),config servers配置服务器存储群集的元数据和配置设置。从MongoDB 3.4开始,必须将配置服务器部署为副本集。它主要记录了
shard的配置信息,元信息,如数据存储目录,日志目录,端口号,chunk信息,是否开启了journal等信息,为了保证它的高可用,官方要求必须是副本集,如果
配置器一旦整体无法使用,则集群无法使用,所以,它也是3台。 - Shard (副本集。实际储存数据的载体服务,一个shard角色应该是一个ReaplicaSet组,本
此我们采用3个Shard,每个shard一个副本集,副本集中会有主节点,从节点,仲裁节点。
组件交互图:
3 集群搭建 环境准备
mongo1(127.0.0.1) mongo2(127.0.0.1) mongo3(127.0.0.1)
config1(端口:27018) config2(端口:27028) config3(端口:27038)
mongos1(端口:27019) mongos2(端口:27029) mongos3(端口:27039)
Shard1(端口:27001) Shard1(端口:27021) Shard1(端口:27031)
Shard2(端口:27002) Shard2(端口:27022) Shard2(端口:27032)
Shard3(端口:27003) Shard3(端口:27023) Shard3(端口:27033)
实际当中,个人觉得mong1,mongo2 ,mongo3应当是在三台不同的服务器,mongos应当与config部署在不同的服务器,各shard组副本集应当部署在不同的服务器,
config可以与shard片部署在同一服务器,也就是说要达到性能最优,至少应当有6台服务器,mongos用3台,config和3组Shard用3台。本文中就以本地Windows7环境为例,
用不同的端口作为伪服务器演示搭建配置过程。MongoBD zip安装包下载地址:
注意,集群下不要使用msi安装。本文采用 mongodb-win32-x86_64-2012plus-v4.2-latest.zip
解压之后重命名为mongo,内部目录如下:
在此目录下创建伪服务器目录文件夹:
mongo1(服务器1),mongo2(服务器2),mongo3(服务器3)。如图:
然后在mongo1下分别创建文件夹data(用于存储数据),log(日志文件存放),conf(配置文件存放):
在data下再创建3个文件夹:
在conf下创建三个配置文件(config.conf、mongos.conf、shard1.conf、shard2.conf、shard3.conf):
在log下创建三个日志文件,(config.log、mongos.log、shard1.log、shard2.log、shard3.log),忽略图片中的mongos.diagnostic.data文件夹,这是服务运行时产生的。
好,至此,mong1中的环境准备工作已经结束,将mong1下的所有文件夹拷贝到mongo2和mongo3下。
集群配置编辑:
首先编辑mong1的config的配置文件:config.conf
net: port: 27018 #config1的端口,mongo2下的为27028,mongo3下的为27038 bindIp: 0.0.0.0 #允许连接地址,这里统一设置为允许任何ip连接 systemLog: destination: file logAppend: true path: D:\tool\mongodbmy\mongo\mongo1\log\config.log #config的日志存储地址,mongo2,mongo3下路径调整即可 storage: dbPath: D:\tool\mongodbmy\mongo\mongo1\data\config #config的数据存储地址,mongo2、mongo3下做相应的调整 journal: enabled: true #数据故障恢复和持久化,肯定是开启 #processManagement: # fork: true #linux下打开此设置,Windows环境下后台启动需要注册服务, # pidFilePath: /mongo/config/run/mongod.pid #副本集名称设置 replication: replSetName: configs #分片集群角色,配置服务器的固定值 sharding: clusterRole: configsvr #这里是集群安全认证配置,首次配置启动集群不打开此配置,先留着,后面再说 #security: #keyFile: D:\tool\mongodbmy\mongo\mongodb-keyfile.file #authorization: enabled






