广告
返回顶部
首页 > 资讯 > 数据库 >MongoDB学习笔记:分片
  • 616
分享到

MongoDB学习笔记:分片

MongoDB学习笔记:分片 2021-03-30 19:03:19 616人浏览 绘本
摘要

本文更新于2022-01-08,使用mongoDB 4.4.5。 目录单台服务器下创建分片多台服务器下创建分片重新启动并连接到分片 单台服务器下创建分片 确保/data/db目录存在且当前系统用户有读写权限。例如(需根据实际情况设置权

MongoDB学习笔记:分片

本文更新于2022-01-08,使用mongoDB 4.4.5。

目录
  • 单台服务器下创建分片
  • 多台服务器下创建分片
    • 重新启动并连接到分片

单台服务器下创建分片

  1. 确保/data/db目录存在且当前系统用户有读写权限。例如(需根据实际情况设置权限):

    su root
    mkdir -p /data/db
    chmod 0777 /data /data/db
    
  2. 启动shell但不连接到任何monGod。

    mongo --nodb
    
  3. 创建分片集群(笔者的分片集群有3个分片,块大小为1MB)。会先删除原有数据库目录,再创建数据库目录和文件,启动mongos进程、配置副本集若干mongod进程(默认3个进程)、若干分片副本集的若干mongod进程(笔者指定为3个分片副本集,每个副本集默认1个进程),同时会不断输出所有节点的日志

    var sharding = new ShardingTest({shards: 3, chunksize: 1});
    
  4. 启动shell连接到mongos(笔者使是localhost::20006),可执行查询操作。

    mongo mongodb://localhost:20006
    

    shell提示是“mongos”。

  5. 对数据库(笔者使用test数据库)启用分片。

    sh.enableSharding("test");
    
  6. 为片键(笔者使用users集合的username字段)建立索引

    db.users.createIndex({username: 1});
    
  7. 根据片键(笔者使用username字段)对集合(笔者使用的users集合为数据库test的集合)分片。之后的查询就可以使用分片。

    sh.shardCollection("test.users", {username: 1});
    
  8. 在第一个shell中停止分片集群。会停止mongos进程、配置副本集所有mongod进程、所有分片副本集所有mongod进程。

    sharding.stop();
    

多台服务器下创建分片

此种方法也可在单台服务器下创建分片(笔者就以此方式使用)。

  1. 启动配置服务器

    1. 确保数据目录(笔者的副本集有3个节点,使用/data/db/config0、/data/db/config1、/data/db/config2)存在且当前系统用户有读写权限。例如(需根据实际情况设置权限):

      su root
      mkdir -p /data/db/config0
      mkdir -p /data/db/config1
      mkdir -p /data/db/config2
      chmod 0777 /data /data/db /data/db/config0 /data/db/config1 /data/db/config2
      
    2. 使用不同的shell启动副本集节点(笔者的副本集名字为config),必需指定绑定的IP(笔者使用0.0.0.0),如果在单台服务器下需指定不同的数据目录(如笔者在上一步所述)和端口(笔者使用40000、40001、40002)。会创建数据库文件。

      mongod --configsvr --replSet config --dbpath /data/db/config0 --port 40000 --bind_ip 0.0.0.0
      mongod --configsvr --replSet config --dbpath /data/db/config1 --port 40001 --bind_ip 0.0.0.0
      mongod --configsvr --replSet config --dbpath /data/db/config2 --port 40002 --bind_ip 0.0.0.0
      
    3. 启动shell连接到任意一个节点(笔者使用端口40000的节点)。

      mongo mongodb://localhost:40000
      
    4. 初始化副本集,会从备份节点中选举出主节点(笔者的副本集名字为config,各节点为localhost:40000、localhost:40001、localhost:40002)。如果副本集曾经初始化,则不用执行此步骤。

      rs.initiate({
      	_id: "config",
      	members: [
      		{
      			"_id": 0,
      			"host": "localhost:40000"
      		},
      		{
      			"_id": 1,
      			"host": "localhost:40001"
      		},
      		{
      			"_id": 2,
      			"host": "localhost:40002"
      		}
      	]
      });
      
  2. 启动mongos

    需指定配置服务器(笔者使用的副本集名字为config,各节点为localhost:40000、localhost:40001、localhost:40002。另外,笔者的mongos使用端口60000)。

    mongos --configdb config/localhost:40000,localhost:40001,localhost:40002 --port 60000
    
  3. 启动若干个副本集

    1. 确保数据目录(笔者使用3个副本集,每个副本集有1个节点,使用/data/db/shard0-0、/data/db/shard1-0、/data/db/shard2-0)存在且当前系统用户有读写权限。例如(需根据实际情况设置权限):

      su root
      mkdir -p /data/db/shard0-0
      mkdir -p /data/db/shard1-0
      mkdir -p /data/db/shard2-0
      chmod 0777 /data /data/db /data/db/shard0-0 /data/db/shard1-0 /data/db/shard2-0
      
    2. 使用不同的shell启动副本集节点(笔者的副本集名字为shard0、shard1、shard2),必需指定绑定的IP(笔者使用0.0.0.0),如果在单台服务器下需指定不同的数据目录(如笔者在上一步所述)和端口(笔者使用50000、50001、50002)。会创建数据库文件。

      mongod --shardsvr --replSet shard0 --dbpath /data/db/shard0-0 --port 50000 --bind_ip 0.0.0.0
      mongod --shardsvr --replSet shard1 --dbpath /data/db/shard1-0 --port 50001 --bind_ip 0.0.0.0
      mongod --shardsvr --replSet shard2 --dbpath /data/db/shard2-0 --port 50002 --bind_ip 0.0.0.0
      
    3. 初始化所有副本集(笔者只列出名字为shard0的副本集的步骤。名字为shard1和shard2的副本集,同理)。如果副本集曾经初始化,则不用执行此步骤。

      1. 启动shell连接到副本集节点(笔者示例使用名字为shard0的副本集,其节点的端口为50000。端口为50001和50002的节点,同理)。

        mongo mongodb://localhost:50000
        
      2. 初始化副本集,会从备份节点中选举出主节点(笔者示例使用名字为shard0的副本集,其节点为localhost:50000。名字为shard1的副本集的节点为localhost:50001,名字为shard2的副本集的节点为localhost:50002,同理)。

        rs.initiate({
        	_id: "shard0",
        	members: [
        		{
        			"_id": 0,
        			"host": "localhost:50000"
        		}
        	]
        });
        
  4. 将所有副本集转换为分片

    1. 启动shell连接到mongos(笔者为localhost:60000)。

      mongo mongodb://localhost:60000
      
    2. 将所有副本集(即笔者使用的shard0/localhost:50000、shard1/localhost:50001、shard2/localhost:50002)添加为分片。

      sh.addShard("shard0/localhost:50000");
      sh.addShard("shard1/localhost:50001");
      sh.addShard("shard2/localhost:50002");
      
  5. 数据分片

    1. 启动shell连接到mongos(笔者为localhost:60000)。

      mongo mongodb://localhost:60000
      
    2. 对数据库(笔者使用test数据库)启用分片。

      sh.enableSharding("test");
      
    3. 为片键(笔者使用users集合的username字段)建立索引。

      db.users.createIndex({username: 1});
      
    4. 根据片键(笔者使用username字段)对集合(笔者使用的users集合为数据库test的集合)分片。之后的查询就可以使用分片。

      sh.shardCollection("test.users", {username: 1});
      

重新启动并连接到分片

对于使用上述方式创建的分片,如需重新启动并连接到分片,只需启动不同的shell执行其中若干个步骤,如下:

mongod --configsvr --replSet config --dbpath /data/db/config0 --port 40000 --bind_ip 0.0.0.0
mongod --configsvr --replSet config --dbpath /data/db/config1 --port 40001 --bind_ip 0.0.0.0
mongod --configsvr --replSet config --dbpath /data/db/config2 --port 40002 --bind_ip 0.0.0.0
mongos --configdb config/localhost:40000,localhost:40001,localhost:40002 --port 60000
mongod --shardsvr --replSet shard0 --dbpath /data/db/shard0-0 --port 50000 --bind_ip 0.0.0.0
mongod --shardsvr --replSet shard1 --dbpath /data/db/shard1-0 --port 50001 --bind_ip 0.0.0.0
mongod --shardsvr --replSet shard2 --dbpath /data/db/shard2-0 --port 50002 --bind_ip 0.0.0.0
mongo mongodb://localhost:60000
您可能感兴趣的文档:

--结束END--

本文标题: MongoDB学习笔记:分片

本文链接: https://www.lsjlt.com/news/9096.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MongoDB学习笔记:分片
    本文更新于2022-01-08,使用MongoDB 4.4.5。 目录单台服务器下创建分片多台服务器下创建分片重新启动并连接到分片 单台服务器下创建分片 确保/data/db目录存在且当前系统用户有读写权限。例如(需根据实际情况设置权...
    99+
    2021-03-30
    MongoDB学习笔记:分片
  • MongoDB学习笔记:总览
    【MongoDB学习笔记1】基于CentOS 6.5安装MongoDBhttp://281816327.blog.51cto.com/907015/1598270 【MongoDB学习笔记2】Mo...
    99+
    2022-10-18
  • MongoDB学习笔记:概述
    本文更新于2022-01-23,使用MongoDB 4.4.5。 目录与关系数据库比较组成数据库集合文档数据类型填充因子写入安全自然排序固定集合循环游标索引典型场景GridFS聚合MapReduce副本集同步心跳驱动程序分片连接身份验证系...
    99+
    2016-10-31
    MongoDB学习笔记:概述
  • MongoDB学习笔记:JavaScript shell
    本文更新于2022-01-22,使用MongoDB 4.4.5。 目录辅助扩展edithelpitshow collectionsshow databasesshow dbsshow tablesshow usersuseBulkWrit...
    99+
    2021-02-08
    MongoDB学习笔记:JavaScript shell
  • 【MongoDB学习笔记20】MongoDB的索引
    MongoDB的索引和关系型数据库的索引概念和功能是相同的:(1)不使用索引的搜索可以称为全表扫面,也就是说,服务器必须找完整个表才能查询整个结果;(2)建立索引后搜索,查询在索引中搜索,在索引的条目中找到...
    99+
    2022-10-18
  • MongoDB学习笔记:副本集
    本文更新于2022-01-08,使用MongoDB 4.4.5。 目录单台服务器下创建副本集多台服务器下创建副本集重新启动并连接到副本集维护副本集节点 单台服务器下创建副本集 确保/data/db目录存在且当前系统用户有读写权限。例如...
    99+
    2019-12-08
    MongoDB学习笔记:副本集
  • 【MongoDB学习笔记27】MongoDB的TTL索引
    TTL索引(time-to-live index)允许为每一个文档设置一个超时时间,文档超过这个时间就会被删除。在ensureIndex中指定expireAfterSecs选项就可以创建一个TTL索引:&g...
    99+
    2022-10-18
  • 【MongoDB学习笔记3】处理Mong
    安装MongoDB后第一次启用shell登录mongo会出现一下的错误:warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused用...
    99+
    2023-01-31
    学习笔记 MongoDB Mong
  • NodeJS学习笔记之MongoDB模块
    一,开篇分析 这篇属于扩展知识篇,因为在下面的文章中会用到数据库操作,所以今天就来说说它(Mongodb模块)。 (1),简介 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WE...
    99+
    2022-06-04
    学习笔记 模块 NodeJS
  • 【MongoDB学习笔记21】MongoDB的复合索引
    索引的值是按照一定顺序排列的,因此使用索引键对文档进行搜索排序比较快;但是只有首先使用索引进行排序时,索引才有用;例如下面的排序里,“username”上的索引就没有起作用:> db.use...
    99+
    2022-10-18
  • 【MongoDB学习笔记22】MongoDB的索引管理
    使用ensureIndex函数创建集合的索引。对集合而言,每个索引只需要创建一次,重复创建没有任何作用;> show collections    s...
    99+
    2022-10-18
  • 【MongoDB学习笔记30】MongoDB的聚合框架
    使用聚合框架可以对集合中的文档进行变换和组合。用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理。这些构件包括:筛选(filtering)投射(projecting)分组(groupin...
    99+
    2022-10-18
  • 【MongoDB学习笔记26】MongoDB的固定集合
    MongoDB中的普通集合是动态的,可以自动增长容纳更多的数据;相对而言,有另一种集合称之为固定集合。(1)固定集合需要实现显式创建,集合大小固定;(2)一旦固定集合中空间用完,插入的新文档将覆盖最老的那个...
    99+
    2022-10-18
  • 【MongoDB学习笔记25】MongoDB的索引类型
    创建索引可以指定一些选项,使用不同的选项建立的索引会有不同的行为。 一、唯一索引唯一索引可以确保每一个文档的指定键都有唯一的值。例如,想确定文档中的username键不重复,创建一个唯一索引:&g...
    99+
    2022-10-18
  • MongoDB学习笔记:命令行工具
    本文更新于2022-01-22,使用MongoDB 4.4.5。 目录bsondumpmongomongodmongodumpmongofilesmongorestoremongosmongostatmongotop bsondump B...
    99+
    2015-07-06
    MongoDB学习笔记:命令行工具
  • 【MongoDB学习笔记1】基于CentOS 6.5安装MongoDB
    1.添加MongoDB安装源vim /etc/yum.repos.d/mongodb-enterprise.repo将下列配置项写入文件[mongodb-enterprise] name=Mong...
    99+
    2022-10-18
  • 【MongoDB学习笔记28】MongoDB的GridFS存储机制
    GridFS作为MongoDB的存储机制,用来存放二进制大文件;GridFS有以下优点:(1)使用GridFS简化存储栈,在MongoDB中替代独立的存储工具;(2)GridFS会自动平衡已有的复制和自动分...
    99+
    2022-10-18
  • 【MongoDB学习笔记3】处理MongoDB连接错误
    安装MongoDB后第一次启用shell登录mongo会出现一下的错误:warning: Failed to connect to 127.0.0.1:27...
    99+
    2022-10-18
  • 【MongoDB学习笔记24】MongoDB的explain和hint函数
    一、explain函数explain函数可以提供大量查询相关的信息,如果是慢查询,它最重要的诊断工具。例如:在有索引的字段上查询:> db.post.find({"loc.city":"ny...
    99+
    2022-10-18
  • 【MongoDB学习笔记14】MongoDB的查询:find基础
    MongoDB中使用find来进行查询,返回一个集合中的文档的子集;返回文档集合blog中的所有文档:> db.post.find()    { "_...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作