MongoDB分片集群配置实例

环境:

windows操作系统

mongodb 3.4社区版

目标:

配置包含两个分片一个配置服务器的分片集群。其中每一个分片和一个配置服务器都被配置为一个单独的副本集。如下图所示:

注:每一个分片都应该被配置在一个单独的服务器设备上。方便起见,本文在同一台机器通过不同端口模拟不同服务器上的组件,实现分片集群的配置。(生产环境的配置与此相同,只需使用自己的主机名、端口、路径等即可)。

下图为本文配置的分片集群架构,其中的任意节点(副本集节点和分片节点)都是可扩展的。

1、分别为config server、shard-1、shard-2创建数据目录

每一个分片成员配置为一个副本集,因此每个组件下都包含自己的复制集数据目录。

config server、shard-1、shard-2的复制集分别为rs1 、rs2、 rs3 。

每个复制集各包含三个节点 rsx-0(主节点)、rsx-1、rsx-2 。

其中config server 复制集数据目录如下:shard-1、shard-2分片的复制集目录与此类似、以此类推。

每个成员的端口分配及启动配置如下:

2、创建config server 复制集

mongod --configsvr --replSet <setname> --dbpath <path>--configsvr 声明该实例是分片集群的配置服务数据库--replSet   指定复制集名称--dbpath    指定数据存放目录

分别使用以下命令,启动并初始化config server副本集的三个成员:

mongod --configsvr --port 27020 --dbpath E:\devInstall\MongoDB\shard\consrv\rs1-0 --replSet rs1 --smallfiles --oplogSize 128

mongod --configsvr --port 27021 --dbpath E:\devInstall\MongoDB\shard\consrv\rs1-1 --replSet rs1 --smallfiles --oplogSize 128

mongod --configsvr --port 27022 --dbpath E:\devInstall\MongoDB\shard\consrv\rs1-2 --replSet rs1 --smallfiles --oplogSize 128

初始化成功之后,使用mongo shell 连接到3个配置服务器之一:

mongo --host <hostname> --port <port>

连接成功之后,设置复制集及其节点:

rs.initiate(
  {
    _id: "<replSetName>",
    configsvr: true,
    members: [
      { _id : 0, host : "127.0.0.1:27020" },
      { _id : 1, host : "127.0.0.1:27021" },
      { _id : 2, host : "127.0.0.1:27022" }
    ]
  }
)

复制集设置成功之后,使用rs.conf()即可查看相关状态:

2、创建shard 复制集(以shard-1为例)

mongod --shardsvr --replSet <replSetname>--shardsvr  声明此实例为集群的分片数据库实例--replSet   指定复制集名称

分别使用以下命令,启动并初始化shard-1复制集的三个成员:

shard-1:

mongod --shardsvr --port 27023 --dbpath E:\devInstall\MongoDB\shard\shard-1\rs2-0 --replSet rs2 --smallfiles --oplogSize 128

mongod --shardsvr --port 27024 --dbpath E:\devInstall\MongoDB\shard\shard-1\rs2-1 --replSet rs2 --smallfiles --oplogSize 128

mongod --shardsvr --port 27025 --dbpath E:\devInstall\MongoDB\shard\shard-1\rs2-2 --replSet rs2 --smallfiles --oplogSize 128

初始化成功之后,,使用mongo shell 连接到3个分片服务器之一:

mongo --host <hostname> --port <port>

连接成功之后,设置复制集及其节点:

rs.initiate(
  {
    _id : <replicaSetName>,
    members: [
      { _id : 0, host : "127.0.0.1:27023" },
      { _id : 1, host : "127.0.0.1:27024"},
      { _id : 2, host : "127.0.0.1:27025" }
    ]
  }
)

设置成功后,使用rs.status()查看复制集及各个节点状态:

shard-2复制集配置同上。

3、mongos配置启动连接到当前分片集群的mongos(路由)。需要使用 --configdb 选项来指定config server复制集。格式:<configReplSetName>/cfg1.example.net:27017,cfg2.example.net:27017,...在此,我们使用config server 复制集的第一个节点在27030端口上启动mongos路由服务:
mongos --configdb "rs1/127.0.0.1:27020" --port 27030

使用mongo shell连接到mongos实例:使用db.isMster()判断是否到mongos实例,如果存在 "msg":"isdbgrid",表明成功连接。   

4、将分片添加到集群中依然在连接到mongos的mongo shell窗口。使用sh.addShard("<replSetName>/s1-mongo1.example.net:27017")方法添加shard-1和shard-2两个分片到集群中。

5、使用哈希分片对collection进行分区
   开启数据库分片功能:
        sh.enableSharding("<database>")

指定数据库表中的字段key为分片键,并对其使用哈希分片策略。
         sh.shardCollection("<database>.<collection>", { <key> : "hashed" } )  

到此即结束了分片集群的设置。

例:开启shard数据的分片功能。指定student表的stuNum为哈希索引分片键。向student表插入7条数据记录。如下:

通过mongo 进入1分片shard-1,发现student表中包含5条数据。

通过mongo 进入2分片shard-2,发现student表中包含2条数据。

此分片集群中的student表中有7条数据。有5条在shard-1服务器上,2条在shard-2服务器上。(mongodb 通过计算stuNum字段的哈希值决定将其存储在哪一个分片上)使用mongos的用户不关心数据存储在哪里,用户只知道这个集群的数据库中有7条student数据记录。
时间: 2024-12-03 17:34:52

MongoDB分片集群配置实例的相关文章

mongodb分片集群配置

mkdir /usr/local/mongodb/etc mkdir /usr/local/mongodb/data mkdir /usr/local/mongodb/logs mkdir /usr/local/mongodb/pid 1.安装软件 tar zxvf mongodb-linux-x86_64-rhel62-3.0.2.tgz && mv mongodb-linux-x86_64-rhel62-3.0.2/* /usr/local/mongodb/ 2.创建mongodb数据

Bugsnag的MongoDB分片集群使用经验

Bugsnag是一家为移动应用开发者提供实时的Bug追踪及检测服务的创业公司,Bugsnag已经使用MongoDB存储超过TB级的文档数据.从Bugsnag的第一个版本开始他们就使用MongoDB存储业务数据.近日,Bugsnag的工程师Simon Maynard在博客上分享了他们的MongoDB分片集群经验,并开源了几个他们常使用的脚本. 带标签的分片(Tag Aware Sharding) 带标签的分片是MongoDB 2.2版本中引入的新特性,此特性支持人为控制数据的分片方式,从而使数据存

MongoDB 分片集群实战

背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁盘,此种方法虽然成本很高,但是实现比较简单,维护起来也比较方便. 水平扩展:通过使用更多配置一般的服务器来共同承担工作负载,此种方法很灵活,可以根据工作负载的大小动态增减服务器的数量,但是实现比较复杂,得有专门的人员来运维. Databases for MongoDB 试用 IBM Cloud 上提

使用HAProxy作为MongoDB分片集群mongos负载均衡

MongoDB分片集群的入口mongos自身没有failover机制.官方建议是将mongos和应用服务器部署在一起,多个应用服务器就要部署多个mongos实例,这样很是不方便.还可以使用LVS或者HAProxy来实现多个mongos的failover机制,但是一定要注意使用client affinity即客户端关联特性. global     chroot      /data/app_platform/haproxy/share/      log         127.0.0.1 loc

mongoDB(三) mongoDB分片集群

mongoDB分片集群 介绍 解决数据分片,防止数据丢失生产环境需要擦用分片+副本集的部署方式 组成部分 route: 提供入口,不存储数据 configserver: 存储元数据信息,建议使用副本集 shardserver: 数据存储服务,存储真正数据, 也许要使用副本集 依赖关系 当数据插入时,需要从configsrv知道数据要插入哪个shardsrv分片 当用户获取数据时,需要从configsrv知道数据存储在哪个shardsrv分片 集群搭建 使用同一份mongodb二进制文件 修改对应

mongodb分片集群突然停电造成一些错误,分片无法启动

今天突然停电使mongodb分片集群造成这种错误,暂时不知道怎么解决,如果 有人知道请回复我 ,现在把记录下来,等后期处理. Fri Aug  8 10:49:52.165 [initandlisten] connection accepted from 172.16.0.115:59542 #2 (2 connections now open)Fri Aug  8 10:49:52.954 [initandlisten] connection accepted from 172.16.0.10

MongoDB的分片集群配置

1.分片 概念:在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据也足以提供可接受的读写吞吐量.这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据. 1.分片简介 分片是指将数据拆分,将其分散存在不同机器上的过程.有时也叫分区.将数据分散在不同的机器上,不需要功能 强大的大型计算机就可以存储更多的数据,处理更大的负载. 使用几乎所有数据库软件都能进行手动分片,应用

[ MongoDB ] 分片集群及测试

分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量.这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据. 为什么使用分片? 1. 复制所有的写入操作到主节点    2. 延迟的敏感数据会在主节点查询    3. 单个副本集限制在12个节点    4. 当请求量巨大时会出现内存不足.    5. 本地磁盘不足    6. 垂

使用YCSB测试mongodb分片集群性能

1. 测试工具 本次测试选取YCSB(Yahoo! Cloud System Benchmark)作为测试客户端工具.YCSB是Yahoo开源的一个nosql测试工具,用来测试比较各种nosql的性能,项目地址:https://github.com/brianfrankcooper/YCSB.项目的mongodb目录下有详细的安装和测试方法. YCSB支持常见的nosql数据库读写,如插入,修改,删除,读取等.它可以使用多线程来提高客户端的性能.可以方便的自定义各种场景,如95%插入5%读,或者