本文介绍在windows环境下如何搭建一个高可用性的mongodb集群。系统环境为win7,mongodb版本为3.6.3。

本文采用的是分片+副本集的方式搭建集群,将分别介绍如何使用副本集和分片来提高可用性。

一、副本集

mongodb的副本集是维护同一个数据集合的多个mongod进程的集合,提供了数据的冗余,提高了可用性,在某些情况下也可以提高读容量。

mongodb官网相关文档:https://docs.mongodb.com/manual/replication/

1.1副本集结构

副本集有三种角色,分别为主节点、副本节点和仲裁节点(可选)。

主节点具有完全的读写操作,并且只有主节点可以进行写操作。

副本节点同步主节点的oplog,保持数据一致。

仲裁节点不保存数据副本,只在选举主节点的投票中有投票权。

1.2部署副本集

这里介绍如何在测试或开发环境中部署副本集。

如果需要限制ip访问,可以使用bind_ip或在mongod.cfg文件中配置。

mongod --bind_ip localhost,198.51.100.1

1.2.1创建必要文件夹

首先创建必要的文件夹,比如db文件夹,log文件夹。这里可以通过命令创建,也可以直接通过文件管理来创建。

1.2.2启动mongod实例

分别对应的副本集节点启动mongod实例,例如:

mongod --replSet rs0 --port 27017 --dbpath /data/db --logpath /data/log/mongod.log --smallfiles --oplogSize 128

replSet指定了副本集的名字,port指定了实例运行的端口,dbpath指定了数据库存储位置,logpath指定了日志存储位置。

smallfiles和oplogSize的设定可以防止在测试或开发环境中占用太多资源。

1.2.3初始化副本集

通过mongo shell或者驱动程序连接到某一个mongod实例。

运行初始化副本集命令:

var rsconf = {
_id: "rs0",
members: [
{
_id: 0,
host: "<hostname>:27017"
},
{
_id: 1,
host: "<hostname>:27018"
},
{
_id: 2,
host: "<hostname>:27019"
}
]
} rs.initiate(rsconf)

可以通过rs.conf(),rs.status()查看副本集状态。

二、分片

分片将数据进行水平分割,提供了一种处理大数据量数据集合和高吞吐量的方式。

2.1分片群集结构

分片群集由三部分构成:

1.shard,存储了分片数据,可部署成一个副本集。

2.mongos,路由器,连接客户端和分片群集,使分片操作对客户端透明。可部署成一个副本集。

3.config server,配置服务器,存储元数据和配置数据。3.4以后必须部署成副本集。

2.2部署分片

2.2.1部署配置服务器副本集

和配置普通副本集唯一不同的是,部署配置服务器副本集需要指定角色为configsvr。

mongod --configsvr --port 27017 --replSet myconfig --dbpath /data/config --logpath /data/log/mongod.log --smallfiles --oplogSize 128

2.2.2部署分片服务器副本集

和配置普通副本集唯一不同的是,部署配置服务器副本集需要指定角色为shardsvr。

mongod --shardsvr --port 28017 --replSet myshard  --dbpath \data\db --logpath \data\log\mongod.log --smallfiles --oplogSize 128

2.2.3部署路由副本集

和配置普通副本集不同的是启动的为mongos实例。

mongos --configdb myconfig/localhost:27017,localhost:27018,localhost:27019 --port 30000 --replSet mymongos --logpath /data/log/mongod.log

2.2.4添加分片

首先通过mongo shell或者驱动连接到mongos实例。

可以修改chunk大小:

use config
db.settings.save( { _id:"chunksize", value: 1 } )

将分片添加到mongos:

sh.addShard( "myshard/localhost:28017,localhost:28018")

2.2.5设置分片

设置数据库分片:

sh.enableSharding("test")

设置集合分片:

分类分片,根据分片键的值范围进行分片:

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

哈希分片,根据分片键的哈希值进行分片:

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

三、测试

操作mongos插入数据,查看自动分区结果。

var list = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n",
"o","p","q","r","s","t","u","v","w","x","y","z"];
for (var i = 0; i < 100000; i++){
var index = i % 26;
var user = {"username": list[index], "saysomething": "hello"};
db.getCollection("users").insert(user);
}

分片结果:

随着数据插入量的增多,达到块所能存储的最大值后,会形成更多的块:

在数据较少时,各分片之间的数据量差距可能较大。这种差距随着数据量的增大会逐渐缩小,趋近于平衡。

windows下mongodb集群搭建的更多相关文章

  1. windows下Nacos集群搭建与nginx集成

    前言: nacos集群至少需要三个(一般为奇数个)nacos实 例,其前面顶nginx,外界入口从nginx入 一.windows下Nacos集群搭建 将Nacos的解压包复制分成3份,分别是: na ...

  2. Windows下Redis集群搭建

    1.第一步先安装Redis 参照<Windows下Redis安装及使用.docx> 在Redis目录E:/Redis下新建Logs文件夹,并且创建3个端口下的配置文件,记得修改里面的接口 ...

  3. linux下Mongodb集群搭建:分片+副本集

    三台服务器 192.168.1.40/41/42 安装包 mongodb-linux-x86_64-amazon2-4.0.1.tgz 服务规划  服务器40  服务器41  服务器42  mongo ...

  4. MongoDB集群搭建-副本集

    MongoDB集群搭建-副本集 概念性的知识,可以参考本人博客地址: 一.Master-Slave方案: 主从: 二.Replica Set方案: 副本集: 步骤:(只要按步骤操作,100%成功) 1 ...

  5. Linux环境下Hadoop集群搭建

    Linux环境下Hadoop集群搭建 前言: 最近来到了武汉大学,在这里开始了我的研究生生涯.昨天通过学长们的耐心培训,了解了Hadoop,Hdfs,Hive,Hbase,MangoDB等等相关的知识 ...

  6. Mongodb集群搭建之 Replica Set

    Mongodb集群搭建之 Replica Set Replica Set 中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了, ...

  7. mongodb集群搭建过程记录

    mongodb集群搭建花费比较长的时间,在此记录下过程,方便以后使用 一 软件环境 系统:ubuntu 18.04,mongodb 社区版4.2 https://docs.mongodb.com/ma ...

  8. Mongodb 集群搭建以及常见错误

    Mongodb 集群搭建以及常见错误 1 关于Replica Sets +Sharding(主从复制加分片)搭建,不这详细去说,网上有很多,大部分的例子就三台服务器之间做主从复制,分2个shard,架 ...

  9. 最新Windows下Redis集群

    实现简单的Windows下Redis集群配置,以下是配置过程中出现的几个问题: [1]逐个启动7001 7002 7003 7004 7005 7006节点时,出现createing server T ...

随机推荐

  1. Mac怎么安装并配置Homebrew?

    1.在打开的命令行工具中输入如下语句: 复制内容到剪贴板 ruby -e "$(curl --insecure -fsSL https://raw.githubusercontent.com ...

  2. 【转】dlgdata.cpp line 40 断言失败

    原文网址:http://blog.csdn.net/onlyou930/article/details/6384075 在VS2010 运行一个C++ 程序,出现下图错误: 一看到这个,我头都大了.关 ...

  3. 安装使用Entity Framework Power Tool Bate4 (Code First)从已建好的数据自动生成项目中的对应Model(新手贴,望各位大侠给予指点)

    从开始学习使用MVC以后,同时也开始接触EF,很多原理都不是太懂,只知道安装了EF以后,点击哪里可以生成数据库对应的Model,不用再自己手写Model.这里记录的就是如何从已建立好的数据库生成项目代 ...

  4. WTS 2.1.18124.1 彻底抛弃了 15063(Win 10 创意者更新)

    现在新建的WTS模板,默认最低版本是16299了,目标版本是17134 17134到来之前,就感觉到会这样,不过终究还是来了. 不支持15063的原因是导航菜单Windows.UI.Xaml.Cont ...

  5. MariaDB 视图与触发器(11)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  6. spring mvc开发过程中的乱码问题

    在保证jsp,xml,数据库,编辑器编码一致的情况下. 1,用户输入中文,后台接收到也是中文,但是保存到数据库时乱码, 解决方法: 链接数据库的url="jdbc:mysql://local ...

  7. iOS开发之Todo List for Swift项目

    一直从事Windows Phone开发,但对iOS开发一直有所好奇,于是在MBP到手之际,顺手安装了Xcode.移动互联网开发的相似性,使得我能快速地了解和认识了iOS的开发框架体系,在看完了Appl ...

  8. Jmeter保存时,完美解决提示的“拒绝访问”

    使用Jmeter时,想保存测试计划,提示"拒绝访问“,这是为啥? 因为给Jmeter的权限不够,也就是说,在打开它的时候,直接双击打开,没有选择”以管理员身份运行“,就会导致”拒绝访问“ ! ...

  9. redis安装(linux)

    redis安装 1. 安装tcl # cd /usr/local # wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz # t ...

  10. Linux下ps -ef 和 ps aux的区别

    Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux.这两个到底有什么区别呢?两者没太大差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格, ...