MongoDB DBA 实践6-----MongoDB的分片集群部署
一、分片
MongoDB使用分片技术来支持大数据集和高吞吐量操作。
1、分片目的
对于单台数据库服务器,庞大的数据量及高吞吐量的应用程序对它而言无疑是个巨大的挑战。频繁的CRUD操作能够耗尽服务器的CPU资源,快速的数据增长也会让硬盘存储无能为力,最终内存无法满足数据需要导致大量的I/O,主机负载严重。为了解决这种问题,mongodb系统主要采用分片技术。
2、MongoDB中的分片集群
分片:一种数据库体系结构,按键范围对数据进行分区,并在两个或多个数据库实例之间分配数据。分片可实现水平缩放。
分片群集:节点集合包括一个分片的MongoDB部署。分片群集由配置服务器,分片和一个或多个mongos
路由进程组成。
MongoDB通过配置分片集群来支持分片,一个分片集群包括以下几个组件:分片,查询路由,配置服务器
- 分片:用来存储数据,一个生产环境的分片集群,通常每个分片是一个副本集。
- 前端路由:指客户端应用访问每个分片的端口。
- 配置服务器:配置服务器存储群集的元数据和配置设置。从MongoDB 3.4开始,配置服务器必须部署为副本集(CSRS)。
3、数据划分
MongoDB的数据划分,是以集合级别为标准。分片通过shard key来划分集合数据。
- shard key:为了对集合分片,你需要指定一个shard key。shard key既可以是集合的每个文档的索引字段也可以是集合中每个文档都有的组合索引字段。MongoDB将shard keys值按照块(chunks)划分,并且均匀的将这些chunks分配到各个分片上。MongoDB主要使用基于范围划分和基于散列划分来划分chunks的。
- 基于范围划分:MongoDB通过shard key值将数据集划分到不同的范围就称为基于范围划分。对于数值型的shard key:你可以虚构一条从负无穷到正无穷的直线(理解为x轴),每个shard key 值都落在这条直线的某个点上,然后MongoDB把这条线划分为许多更小的没有重复的范围成为块(chunks),一个chunk就是就某些最小值到最大值的范围。
- 基于散列划分:MongoDB计算每个字段的hash值,然后用这些hash值建立chunks。
二、分片集群的实现
分片结构端口如下:
- 按照实践4的步骤创建shard1、shard2两个分片,并在配置文件mongodb.cfg中加入
sharding:
clusterRole: shardsvr
创建配置服务器副本集(按照实践4)
- 配置三个configure服务器实例,并且启动。和实践4不同的是mongod.cfg中
sharding:
clusterRole: configsvr
其中端口27022的服务器配置具体mongod.cfg如下:
# mongod.conf # for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data.
storage:
dbPath: C:\cluster\configure\db
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger: # where to write logging data.
systemLog:
destination: file
logAppend: true
path: C:\cluster\configure\log\mongod.log # network interfaces
net:
port:
bindIp: 0.0.0.0 #processManagement: #security: #operationProfiling:# replication:
replSetName: config
sharding:
clusterRole: configsvr ## Enterprise-Only Options: #auditLog: #snmp:
- 配置服务器副本集
cfg = { _id:"config", members:[
{_id:0,host:"192.168.111.131:27022"},
{_id:1,host:"192.168.111.135:27022"},
{_id:2,host:"192.168.111.138:27022"}
]
}
rs.initiate(cfg)
3. 分别配置路由服务器实例,并且启动。
# mongod.conf # for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data.
systemLog:
destination: file
logAppend: true
path: C:\cluster\mongos\log\mongod.log # network interfaces
net:
port:
bindIp: 0.0.0.0 #processManagement: #security: #operationProfiling:# #replication:
sharding:
configDB:
config/192.168.111.131:,192.168.111.135:,192.168.111.138: ## Enterprise-Only Options: #auditLog: #snmp:
注意:加粗部分为上一步配置好的configure服务器。
4.使用mongos启动路由服务器实例,连接端口
5.使用如下指令添加复制集shard1和shard2的主副节点作为分片添加到集群中。
sh.addShard("shard1/192.168.111.131:27020,192.168.111.135:27020,192.168.111.138:27020")
sh.addShard("shard2/192.168.111.131:27021,192.168.111.135:27021,192.168.111.138:27021")
注意:添加的ip或主机名要明确是rs.status()上的name
6.使用命令sh.status()检查配置正确与否。
MongoDB DBA 实践6-----MongoDB的分片集群部署的更多相关文章
- MongoDB DBA 实践8-----Linux系统Mongodb分片集群部署
在Linux系统中,主要是使用命令行进行mongodb的分片集群部署 一.先决条件 mongodb安装成功,明确路径, MongoDB的几个路径: /var/lib/mongodb /var/log/ ...
- mongoDB研究笔记:分片集群部署
前面几篇文章的分析复制集解决了数据库的备份与自动故障转移,但是围绕数据库的业务中当前还有两个方面的问题变得越来越重要.一是海量数据如何存储?二是如何高效的读写海量数据?尽管复制集也可以实现读写分析,如 ...
- MongoDB在windows平台分片集群部署
本文转载自:https://www.cnblogs.com/hx764208769/p/4260177.html 前言-为什么我要使用mongodb 最近我公司要开发一个日志系统,这个日志系统包括很多 ...
- MongoDB部署实战(一)MongoDB在windows平台分片集群部署
前言-为什么我要使用mongodb 最近我公司要开发一个日志系统,这个日志系统包括很多类型,错误的,操作的,...用MongoDB存储日志,大量的日志产生,大量读写吞吐量很大的时候,单个Server很 ...
- MongoDB分片集群部署方案
前言 副本集部署是对数据的冗余和增加读请求的处理能力,却不能提高写请求的处理能力:关键问题是随着数据增加,单机硬件配置会成为性能的瓶颈.而分片集群可以很好的解决这一问题,通过水平扩展来提升性能.分片部 ...
- mongo分片集群部署
测试环境192.168.56.101-213 前期准备: openssl rand -base64 756 > /home/software/mongodb/mongodbkey chmod ...
- 【mongoDB运维篇④】Shard 分片集群
简述 为何要分片 减少单机请求数,降低单机负载,提高总负载 减少单机的存储空间,提高总存空间. 常见的mongodb sharding 服务器架构 要构建一个 MongoDB Sharding Clu ...
- monodb分片集群部署
本文档基于MongoDB版本3.6.2 下载地址: 建议使用最新版本 https://www.mongodb.com/download-center#community 安装文件 集群ip及端口设计方 ...
- 【八】MongoDB管理之分片集群实践
MongoDB中集群有三种:主从复制.副本集.分片集群.目前副本集已经替代主从复制架构,成为官方建议采用的架构,而分片集群相较于前两种,更加复杂. 下面是生产环境中常用的分片集群架构: 我们知道,分片 ...
随机推荐
- 面向对象进阶------>模块 json pickle hashlib
何为模块呢? 其实模块就是.py文件 python之所以好用就是模块多 模块分三种 : 内置模块 . 拓展模块.自定义模块. 现在我们来认识:内置模块中的 序列化模块和 hashlib 模块 1 ...
- 安装SCOM Gateway Server
安装SCOM Gateway Server 1.为SCOM Gateway Server申请证书,导入CA证书链2.将安装介质Support Tools下AMD64下的 Microsoft.Enter ...
- 海量数据处理面试题(1) 找出两文件种包含的相同的url
问题:给定a.b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a.b文件共同的url? 分析:50亿个url,每个url64字节,就是320G,显然是无法一次读入内存 ...
- css动画 文字闪烁效果
/*定义页面基础CSS*/ body{ font-family: 'microsoft yahei',Arial,sans-serif; color: #EFEFEF; background: #22 ...
- Spring Boot 的配置文件
Profile 配置 Profile 是 Spring 用来针对不同的环境对不同的配置提供支持的,全局的 Profile 配置使用 application-{profile}.properties ( ...
- Python2.7 - IMOOC - 3
第三章 Python变量和数据类型 3-4.变量 变量名必须是大小写英文.数字和下划线(_)的组合,且不能用数字开头. 同一个变量可以反复赋值,而且可以是不同类型的变量,例如: a = 123 # a ...
- Java自带线程池和队列详解
Java线程池使用说明 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后 ...
- SoapUI这么好,舍得不用吗?
之前尝试去学习哈SoapUI, 安装都报错,直接拖黑不用,对java开发的产品本身不感冒 后来工作上,和老外沟通,发现他们不会用xmlspy,只会SoapUI,心里都想,不学习看来不方便,然后都安装了 ...
- POJ2187 Beauty Contest(旋转卡壳)
嘟嘟嘟 旋转卡壳模板题. 首先求出凸包. 然后\(O(n ^ 2)\)的算法很好想,但那就不叫旋转卡壳了. 考虑优化:直观的想是在枚举点的时候,对于第二层循环用二分或者三分优化,但实际上两点距离是不满 ...
- 1、RabbitMQ入门
RabbitMQ 可以参考官网进行学习! 开发语言:Erlang – 面向并发的编程语言. AMQP:是消息队列的一个协议. mysql 是 java 写的吗?不是 那么 java 能不能访问?可以, ...