windows下mongodb集群搭建
本文介绍在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集群搭建的更多相关文章
- windows下Nacos集群搭建与nginx集成
前言: nacos集群至少需要三个(一般为奇数个)nacos实 例,其前面顶nginx,外界入口从nginx入 一.windows下Nacos集群搭建 将Nacos的解压包复制分成3份,分别是: na ...
- Windows下Redis集群搭建
1.第一步先安装Redis 参照<Windows下Redis安装及使用.docx> 在Redis目录E:/Redis下新建Logs文件夹,并且创建3个端口下的配置文件,记得修改里面的接口 ...
- linux下Mongodb集群搭建:分片+副本集
三台服务器 192.168.1.40/41/42 安装包 mongodb-linux-x86_64-amazon2-4.0.1.tgz 服务规划 服务器40 服务器41 服务器42 mongo ...
- MongoDB集群搭建-副本集
MongoDB集群搭建-副本集 概念性的知识,可以参考本人博客地址: 一.Master-Slave方案: 主从: 二.Replica Set方案: 副本集: 步骤:(只要按步骤操作,100%成功) 1 ...
- Linux环境下Hadoop集群搭建
Linux环境下Hadoop集群搭建 前言: 最近来到了武汉大学,在这里开始了我的研究生生涯.昨天通过学长们的耐心培训,了解了Hadoop,Hdfs,Hive,Hbase,MangoDB等等相关的知识 ...
- Mongodb集群搭建之 Replica Set
Mongodb集群搭建之 Replica Set Replica Set 中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了, ...
- mongodb集群搭建过程记录
mongodb集群搭建花费比较长的时间,在此记录下过程,方便以后使用 一 软件环境 系统:ubuntu 18.04,mongodb 社区版4.2 https://docs.mongodb.com/ma ...
- Mongodb 集群搭建以及常见错误
Mongodb 集群搭建以及常见错误 1 关于Replica Sets +Sharding(主从复制加分片)搭建,不这详细去说,网上有很多,大部分的例子就三台服务器之间做主从复制,分2个shard,架 ...
- 最新Windows下Redis集群
实现简单的Windows下Redis集群配置,以下是配置过程中出现的几个问题: [1]逐个启动7001 7002 7003 7004 7005 7006节点时,出现createing server T ...
随机推荐
- python36--将数据保存为excel
#!/usr/bin/env python # -*- coding: utf-8 -*- import xlwt import os class ExcelHelper(object): @stat ...
- SQL Server--疑难杂症之坑爹的Windows故障转移群集
--============================================================== 估计是春节前最后一次写博客,也估计是本年值班最后一次踩雷,感叹下成也S ...
- Python 数据结构与算法—— 快排
1. 先从待排序的数组中找出一个数作为基准数(取第一个数即可),然后将原来的数组划分成两部分:小于基准数的左子数组和大于等于基准数的右子数组.然后对这两个子数组再递归重复上述过程,直到两个子数组的所有 ...
- C#基础之访问修饰符
C#访问修饰符,无时无刻都在使用,这里记录一下,如果写错的地方,欢迎指正. public :公有的,任何代码均可以访问,应用于所有类或成员: internal:内部的,只能在当前程序集中使用,应用于所 ...
- dev gridview自动列宽和单元、行、checkbox选中和多选
#region 自动列宽 for (int I = 0; I < gridView1.Columns.Count; I++) { this.gridView1.BestFitColumns(); ...
- CefSharp.v49.0.1浏览器控件完全WPF版,实现禁止弹出新窗口,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接
需求场景:在查询页面,填写查询条件,查询条件包括上传的图片,根据图片的特征查询,这就需要在提交的时候,使用POST提交,因为GET提交无法提交图片数据,提交查询条件之后,在新的窗口展示查询结果.(当然 ...
- ABP框架入门踩坑-配置数据库表前缀
配置数据库表前缀 ABP踩坑记录-目录 本篇其实和ABP关系并不大,主要是EF Core的一些应用-.-. 起因 支持数据库表前缀应该是很多应用中比较常见的功能,而在ABP中并没直接提供这一功能,所以 ...
- JVM调优推荐
此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.JVM的调优主要是内存的调优,主要调两个方面: 各个代的大小 垃圾收集器选择 2.各个代的大小 常用的 ...
- mysql添加外键的4种方式
今天开始复习,在过后的几天里开始在博客上记录一下平时疏忽的知识点,温故而知新 屁话不多--直接上货 创建主表: 班级 CREATE TABLE class(cid INT PRIMARY KEY AU ...
- 解决 canvas 绘图在高清屏中的模糊问题
解决 canvas 绘图在高清屏中的模糊问题 为什么模糊 CSS 像素是一个抽象单位(1 px),浏览器根据某种规则将 css 像素转化为屏幕需要的实际像素值. 在高清屏之前,屏幕上显示一个像素点需要 ...