文档章节

21.36 mongodb分片介绍

脑洞老湿_
 脑洞老湿_
发布于 2017/10/20 10:05
字数 1564
阅读 24
收藏 2

21.36 mongodb分片介绍

  • 分片就是将数据库进行拆分,将大型集合分隔到不同服务器上。比如,本来100G的数据,可以分割成10份存储到10台服务器上,这样每台机器只有10G的数据。
  • 通过一个mongos的进程(路由)实现分片后的数据存储与访问,也就是说mongos是整个分片架构的核心,对客户端而言是不知道是否有分片的,客户端只需要把读写操作转达给mongos即可。
  • 虽然分片会把数据分隔到很多台服务器上,但是每一个节点都是需要有一个备用角色的,这样能保证数据的高可用。
  • 当系统需要更多空间或者资源的时候,分片可以让我们按需方便扩展,只需要把mongodb服务的机器加入到分片集群中即可

MongoDB分片架构图:
mark
MongoDB分片相关概念:

  • mongos: 数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。
  • config server: 配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,防止数据丢失!
  • shard: 存储了一个集合部分数据的MongoDB实例,每个分片是单独的mongodb服务或者副本集,在生产环境中,所有的分片都应该是副本集。

21.37 mongodb分片搭建(上)

这一小节搭建了config servers
分片搭建 -服务器规划:

  • 三台机器 A B C
  • A搭建:mongos、config server、副本集1主节点、副本集2仲裁、副本集3从节点
  • B搭建:mongos、config server、副本集1从节点、副本集2主节点、副本集3仲裁
  • C搭建:mongos、config server、副本集1仲裁、副本集2从节点、副本集3主节点
  • 端口分配:mongos 20000、config 21000、副本集1 27001、副本集2 27002、副本集3 27003
  • 三台机器全部关闭firewalld服务和selinux,或者增加对应端口的规则

分片搭建 – 创建目录:

  • 分别在三台机器上创建各个角色所需要的目录
  • mkdir -p /data/mongodb/mongos/log
  • mkdir -p /data/mongodb/config/{data,log}
  • mkdir -p /data/mongodb/shard1/{data,log}
  • mkdir -p /data/mongodb/shard2/{data,log}
  • mkdir -p /data/mongodb/shard3/{data,log}

分片搭建–config server配置:

  • mongodb3.4版本以后需要对config server创建副本集
  • 添加配置文件(三台机器都操作)
  • mkdir /etc/mongod/
  • vim /etc/mongod/config.conf //加入如下内容
    pidfilepath = /var/run/mongodb/configsrv.pid
    dbpath = /data/mongodb/config/data
    logpath = /data/mongodb/config/log/congigsrv.log
    logappend = true
    bind_ip = 0.0.0.0
    port = 21000
    fork = true
    configsvr = true #declare this is a config db of a cluster;
    replSet=configs #副本集名称
    maxConns=20000 #设置最大连接数
  • 启动三台机器的config server
  • mongod -f /etc/mongod/config.conf //三台机器都要操作
  • 登录任意一台机器的21000端口,初始化副本集
    mongo --port 21000
    use admin
    config = { _id: "configs", members: [ {_id : 0, host : "192.168.133.130:21000"},{_id : 1, host : "192.168.133.132:21000"},{_id : 2, host : "192.168.133.133:21000"}] }
    rs.initiate(config)
    { "ok" : 1 }
[root@Dasoncheng ~]# mkdir -p /data/mongodb/mongos/log
[root@Dasoncheng ~]# mkdir -p /data/mongodb/config/{data,log}
[root@Dasoncheng ~]# mkdir -p /data/mongodb/shard1/{data,log}
[root@Dasoncheng ~]# mkdir -p /data/mongodb/shard2/{data,log}
[root@Dasoncheng ~]# mkdir -p /data/mongodb/shard3/{data,log}
##分别在三台机器上创建各个角色所需要的目录;
[root@Dasoncheng ~]# mkdir /etc/mongod/
[root@Dasoncheng ~]# vim /etc/mongod/config.conf   
##创建config-servers的配置文件夹 及配置文件;下面是编辑内容
[root@Dasoncheng ~]# cat /etc/mongod/config.conf 
pidfilepath = /var/run/mongodb/configsrv.pid
dbpath = /data/mongodb/config/data
logpath = /data/mongodb/config/log/congigsrv.log
logappend = true
bind_ip = 192.168.60.11
port = 21000
fork = true
configsvr = true #declare this is a config db of a cluster;
replSet=configs #副本集名称
maxConns=20000 #设置最大连接数
[root@Dasoncheng ~]# mongod -f /etc/mongod/config.conf  
##启动config-server,三台机器都启动
about to fork child process, waiting until server is ready for connections.
forked process: 2749
child process started successfully, parent exiting
[root@Dasoncheng ~]# ps aux |grep mongod
mongod     2292  1.7  9.4 1524868 94180 ?       Sl   08:03   1:54 /usr/bin/mongod -f /etc/mongod.conf
root       2749  5.3  4.2 1082412 42464 ?       Sl   09:52   0:00 mongod -f /etc/mongod/config.conf
root       2783  0.0  0.0 112664   964 pts/1    S+   09:53   0:00 grep --color=auto mongod
[root@Dasoncheng ~]# netstat -lntp |grep mongod
tcp        0      0 192.168.60.11:21000     0.0.0.0:*               LISTEN      2749/mongod         
tcp        0      0 192.168.60.11:27017     0.0.0.0:*               LISTEN      2292/mongod         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      2292/mongod 
[root@Dasoncheng ~]# mongo --host 192.168.60.11 --port 21000   ##登录注意;
MongoDB shell version v3.4.9
connecting to: mongodb://192.168.60.11:21000/
MongoDB server version: 3.4.9
> use admin
switched to db admin
> config = { _id: "configs", members: [ {_id : 0, host : "192.168.60.11:21000"},{_id : 1, host : "192.168.60.12:21000"},{_id : 2, host : "192.168.60.13:21000"}] }
{
	"_id" : "configs",
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.60.11:21000"
		},
		{
			"_id" : 1,
			"host" : "192.168.60.12:21000"
		},
		{
			"_id" : 2,
			"host" : "192.168.60.13:21000"
		}
	]
}
> rs.initiate(config)
{ "ok" : 1 }
configs:SECONDARY> rs.status()
{
	"set" : "configs",
	"date" : ISODate("2017-10-20T01:56:12.059Z"),
	"myState" : 1,
	"term" : NumberLong(1),
	"configsvr" : true,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1508464564, 21),
			"t" : NumberLong(1)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1508464564, 21),
			"t" : NumberLong(1)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1508464564, 21),
			"t" : NumberLong(1)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1508464564, 21),
			"t" : NumberLong(1)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.60.11:21000",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 198,
			"optime" : {
				"ts" : Timestamp(1508464564, 21),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2017-10-20T01:56:04Z"),
			"infoMessage" : "could not find member to sync from",
			"electionTime" : Timestamp(1508464562, 1),
			"electionDate" : ISODate("2017-10-20T01:56:02Z"),
			"configVersion" : 1,
			"self" : true
		},
		{
			"_id" : 1,
			"name" : "192.168.60.12:21000",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 20,
			"optime" : {
				"ts" : Timestamp(1508464564, 21),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1508464564, 21),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2017-10-20T01:56:04Z"),
			"optimeDurableDate" : ISODate("2017-10-20T01:56:04Z"),
			"lastHeartbeat" : ISODate("2017-10-20T01:56:10.920Z"),
			"lastHeartbeatRecv" : ISODate("2017-10-20T01:56:08.588Z"),
			"pingMs" : NumberLong(0),
			"syncingTo" : "192.168.60.11:21000",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "192.168.60.13:21000",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 20,
			"optime" : {
				"ts" : Timestamp(1508464564, 21),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1508464564, 21),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2017-10-20T01:56:04Z"),
			"optimeDurableDate" : ISODate("2017-10-20T01:56:04Z"),
			"lastHeartbeat" : ISODate("2017-10-20T01:56:10.920Z"),
			"lastHeartbeatRecv" : ISODate("2017-10-20T01:56:11.495Z"),
			"pingMs" : NumberLong(0),
			"syncingTo" : "192.168.60.11:21000",
			"configVersion" : 1
		}
	],
	"ok" : 1
}

© 著作权归作者所有

脑洞老湿_
粉丝 3
博文 152
码字总数 124412
作品 0
荆州
私信 提问
mongodb安装、连接,mongodb用户管理、创建集合、数据管理、备份恢复,副本集介绍、搭建、测试,分片介绍、搭建、测试,php的mongodb扩展、mongo扩展

21.26 mongodb介绍 21.27 mongodb安装 21.28 连接mongodb 21.29 mongodb用户管理 21.30 mongodb创建集合、数据管理 21.31 php的mongodb扩展 21.32 php的mongo扩展 21.33 mongodb副本集介绍 ...

tobej
07/16
74
0
【0716】NoSQL——mogodb

21.26 mongodb介绍 介绍: 官网www.mongodb.com, 当前最新版3.4 C++ 编写,基于分布式的,属于 NoSQL 的一种 在 NoSQL 中是最像关系型数据库的 MongoDB 将数据存储为一个文档,数据结构由键...

alexis7gunner
07/21
0
0
84.mongodb分片介绍 搭建 测试 及mongodb备份与恢复

21.36 mongodb分片介绍 21.37/21.38/21.39 mongodb分片搭建 21.40 mongodb分片测试 21.41 mongodb备份恢复 21.36 mongodb分片介绍 分片是由一个一个的副本集组成的 1.分片就是将数据库进行拆...

axin-linux
04/01
14
0
mongodb 简单部署方案及实例

第一节 准备工作 一 安装mongodb 我这里选用rehl 5.6作为其运行载体。 1. 下载mongodb的linux版本(注意32位和64位的区别),下载地址:http://www.mongodb.org/downloads # wget http://fast...

猪猪
2012/04/12
20.8K
4
MongoDB 4.0 RC 版本强势登陆

MongoDB 因其灵活的文档模型、可扩展分布式设计广受开发者喜爱,在此基础上,MongoDB 4.0 推出了更强大的功能支持,目前4.0第一个RC版本已经发布,本文将介绍 MongoDB 4.0 核心的一些新特性。...

张友东
2018/05/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

无回路有向图的拓扑排序

因公司业务需要,在表单中每个字段都会配置自动计算,但自动计算公式中会引用到其他字段中的值。所以希望可以根据计算公式,优先计算引用的公式。所以最终使用了无回路有向图的扩扑排序来实现...

兜兜毛毛
38分钟前
3
0
如何抢占云栖大会C位?史上最强强强攻略来了

点击观看视频: APSARA云栖大会开发者情怀 原文链接 本文为云栖社区原创内容,未经允许不得转载。

阿里云官方博客
51分钟前
5
0
Kubernetes 从懵圈到熟练:集群服务的三个要点和一种实现

作者 | 声东 阿里云售后技术专家<br /> 文章来源:Docker,点击查看原文。 <br />以我的经验来讲,理解 Kubernetes 集群服务的概念,是比较不容易的一件事情。尤其是当我们基于似是而非的理解...

阿里巴巴云原生
54分钟前
7
0
PHP7.3的新特性

2018年12月6日,PHP7.3正式版发布,在PHP7.2基础上进行了大量错误修复和安全优化,性能提升10%! 从目前的更新说明来看,PHP 7.3 并不是一个主打新特性的版本,包含更多的是 bug 修复。PHP 7...

迅睿CMS-PHP开源CMS程序
59分钟前
7
0
Tomcat 应用中并行流带来的类加载问题

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/f-X3n9cvDyU5f5NYH6mhxQ 作者:肖铭轩、王道环 随着 Java8 的不断流行,越来越多的开发人员使用并行流(parallel)...

vivo互联网技术
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部