• MongoDB分片


      这几天在学习MongDB的分片技术,网上搜了好多资料,那些资料都比较老了,新版的MongDB已经不支持以前的那种分片方法了,最后都是失败告终。我用的版本是MongDB3.4,后面直接去官网看了一下,这也是自己第一次看全英文看文档,毕竟一直看中文的资料的,过程有点小痛苦,但是最后做出来,还是爽歪歪的哈。废话不多说,下面进行总结一下。官网的资料地址:https://docs.mongodb.com/manual/tutorial/deploy-shard-cluster/

      下面看一下MongoDB的分片技术框架图:如下

      

      mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

      shard,数据储存的地方。俗话说三个臭皮匠顶个诸葛亮,这个时候团队的力量就凸显出来了。在互联网也是这样,一台普通的机器做不了的多台机器来做,如下图:

      

      config server,顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。

      replica set,上图4个分片如果没有 replica set 是个不完整架构,假设其中的一个分片挂掉那四分之一的数据就丢失了,所以在高可用性的分片架构还需要对于每一个分片构建 replica set 副本集保证分片的可靠性。

      下面总结一下如何进行环境的搭建,由于我是在一台机器上搭建的,所以所有端口都需要不一样。(相应的数据,日志文件夹需要提前先建立好)

      (1)一个config server服务器(172.31.18.239:27000)(正常情况下也需要多个副本,防止一个宕机后,无法对外提供服务)

      启动cmd控制台输入:mongod --configsvr --replSet rs0 --dbpath=D:mongoDBconfigdata --logpath=D:mongoDBconfigloglog.txt --port 27000

      启动客户端连接config server服务器:输入rs.initiate({_id:"rs0",configsvr:true,members:[{_id:0,host:"172.31.18.239:27000"}]})

      (2)创建分片服务器,这里需要2个分片(172.31.18.239:27020)(172.31.18.239:27022)同时,需要两个分片的副本集(172.31.18.239:27021)(172.31.18.239:27023)。

       启动cmd控制台输入:mongod --shardsvr --replSet s1 --dbpath=D:mongoDBsharedshared0data

                --logpath=D:mongoDBsharedshared0loglog.txt --port 27020

      启动cmd控制台输入:mongod --shardsvr --replSet s1 --dbpath=D:mongoDBsharedshared1data

                --logpath=D:mongoDBsharedshared1loglog.txt --port 27021

      启动客户端连接其中一个服务器,这里我连接了端口号为27020的服务器:

      输入:rs.initiate({_id:"s1",members:[{_id:0,host:"172.31.18.239:27020"},{_id:1,host:172.31.18.239:27021"}]})

      同理,按照以上方式启动另外一个分片(172.31.18.239:27022)以及副本集172.31.18.239:27023。

      (3)启动mongos服务器(默认端口27017)

      启动cmd控制台输入:mongos --configdb s0/172.31.18.239:27000 

      启动客户端连接mongos服务器输入:mongo 

      (4)将分片加入集群中(Add Shards to the Cluster)

      在mongo客户端中输入:sh.addShard( "s1/172.31.18.239:27020");sh.addShard( "s2/172.31.18.239:27022");

      (5)指定数据库开启分片功能(Enable Sharding for a Database)

      在mongo客户端中输入:sh.enableSharding("test")

      (6)指定数据库中某个集合开启分片功能(Shard a Collection using Hashed Sharding)

      在mongo客户端中输入:sh.shardCollection("test.persons", { name : 1 } )(需要指定集合中的某个键)

      到此,分片的功能已经实现了。可以使用命令db.printShardingStatus()查看分片的情况。

      

      在客户端输入:for(var i=0;i<100;i++){db.persons.insert({name:"a"+i})}; for(var i=0;i<10000;i++){db.persons.insert({name:"jack"+i})}

        查看两台分片的数据:如下:

      

  • 相关阅读:
    (转)spring学习之@ModelAttribute运用详解
    (转)Spring3MVC 在JSP中使用@ModelAttribute
    (转)如何在maven的pom.xml中添加本地jar包
    (转)linux中项目部署和日志查看
    (转)Schema
    (转)xml
    (转)Dom4J解析
    判断一个请求是否为Ajax请求
    spring mvc中拦截器配置mvc:interceptors
    Freemarker自定义方法
  • 原文地址:https://www.cnblogs.com/gdpuzxs/p/6836212.html
Copyright © 2020-2023  润新知