文档章节

mongodb副本集和分片

 追逐技术的IT人
发布于 2017/03/29 20:30
字数 1382
阅读 25
收藏 3

1.mongodb副本集概念

mongodb的复制至少需要两个节点。其中一个是主节点,负责数据库写操作,其余的都是从节点,负责复制主节点上的数据以及可以进行读操作。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

mongodb在副本集中可以有arbiter节点,arbiter节点主要负责选举主节点,本身不存储数据

mongodb副本集如果正常工作至少需要n/2+1个节点存活,n/2是向下取整数

1.1.mongodb副本集搭建

现在搭建含有3个mongodb节点的副本集,一个主节点、一个从节点、一个arbiter节点,主要参数如下:

--dbpath   数据文件路径

--logpath  日志文件路径

--port        端口号,默认是27017.我这里使用的也是这个端口号.

--replSet   复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字

--maxConns   最大连接数

--fork       后台运行

--logappend   日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。

1.1.1 启动mongodb节点1

mongod.exe --port 27017 --dbpath D:\work\mongodb\1 --replSet test --logpath D:\work\mongodb\1\log1\log.txt --logappend

1.1.2 启动mongodb节点2

mongod.exe --port 27018 --dbpath D:\work\mongodb\2 --replSet test --logpath D:\work\mongodb\2\log2\log.txt --logappend

1.1.3 启动mongodb节点3

mongod.exe --port 27019 --dbpath D:\work\mongodb\3 --replSet test --logpath D:\work\mongodb\3\log3\log.txt --logappend

1.1.4 集群节点配置

step1:mongo.exe 连接到mongod服务器

step2:假设hosts中配置了当前的ip指向的host为zhq.test.com

rs.initiate()

rs.add("zhq.test.com:27018")

rs.addArb("zhq.test.com:27019")

rs.status()就可以查看副本集状态

2.mongodb分片的概念

当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量,或许一个主节点不能提供足够的写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据,使用分片的结构如下:

Shard:用于存储真实的分片数据,每个分片可以使用一个副本集来作为一个集群冗余存储数据

Config Server: mongod实例,存储了整个集群的元数据

Router:路由服务,应用服务器通过接入路由服务就可以使用mongodb的分片功能

2.1 建立两个mongodb复制集

按照那个步骤我们建立test和test1复制集,不同的是需要添加--shardsvr参数:

2.1.1 启动test和test1集群的mongodb节点1

mongod.exe --port 27017 --dbpath D:\work\mongodb\1 --replSet test --logpath D:\work\mongodb\1\log1\log.txt --logappend --shardsvr

mongod.exe --port 27020 --dbpath D:\work\mongodb\4 --replSet test1 --logpath D:\work\mongodb\4\log4\log.txt --logappend --shardsvr

2.1.2 启动test和test1集群的mongodb节点2

mongod.exe --port 27018 --dbpath D:\work\mongodb\2 --replSet test --logpath D:\work\mongodb\2\log2\log.txt --logappend --shardsvr

mongod.exe --port 27021 --dbpath D:\work\mongodb\5 --replSet test1 --logpath D:\work\mongodb\5\log5\log.txt --logappend --shardsvr

2.1.3 启动test和test1集群的mongodb节点3

mongod.exe --port 27019 --dbpath D:\work\mongodb\3 --replSet test --logpath D:\work\mongodb\3\log3\log.txt --logappend --shardsvr

mongod.exe --port 27022 --dbpath D:\work\mongodb\6 --replSet test1 --logpath D:\work\mongodb\6\log6\log.txt --logappend --shardsvr

2.1.4 集群节点配置

step1:mongo.exe --port 27020连接到mongod服务器

step2:假设hosts中配置了当前的ip指向的host为zhq.test.com

rs.initiate()

rs.add("zhq.test.com:27021")

rs.addArb("zhq.test.com:27022")

rs.status()就可以查看副本集状态

2.2 建立两个mongodb config server组成的集群(这个是按照mongodb3.2版本来的,mongodb3.0以下版本只需要启动两个mongod节点,不需要建立集群)

mongod.exe --port 27023 --dbpath D:\work\mongodb\config1 --logpath D:\work\mongodb\config1\config.log --logappend --replSet config --configsvr

mongod.exe --port 27024 --dbpath D:\work\mongodb\config2 --logpath D:\work\mongodb\config2\config.log --logappend --replSet config --configsvr

mongo.exe --port 27023连接到mongod服务器

假设hosts中配置了当前的ip指向的host为zhq.test.com

rs.initiate()

rs.add("zhq.test.com:27024")

rs.status()就可以查看副本集状态

2.3 建立两个mongos节点

mongos.exe --port 27025 --configdb config/zhq.test.com:27024,zhq.test.com:27023 --fork --logpath D:\work\mongodb\route1\route.log

mongos.exe --port 27026 --configdb config/zhq.test.com:27024,zhq.test.com:27023 --fork --logpath D:\work\mongodb\route2\route.log

2.4 连接一个mongos节点并配置分片(只需要连接一个mongos添加这些配置即可,其他的mongos的配置会通过config server自动同步过去)

mongo.exe --port 27025

db.runCommand({addshard:"test/zhq.test.com:27017,zhq.test.com:27018,zhq.test.com:27019"})//添加分片1集群

db.runCommand({addshard:"test1/zhq.test.com:27020,zhq.test.com:27021,zhq.test.com:27022"})//添加分片2集群

db.runCommand({ enablesharding:"test" }) //设置分片的数据库

db.runCommand({ shardcollection: "test.log", key: { title:1}})//设置使用表log的字段title进行分片

sh.status({verbose:true})可以查看当前分片的状态

2.5 如何选择分片字段

a.每条记录必须要包含分片的字段,分片字段设置之后,mongodb会自动为该字段建立索引

a.分片字段需要拥有很多不同的值。 便于数据的切分和迁移

b.分片字段要和应用程序相结合,便于应用程序查询的时候尽量查询到一个分片上去,不需要多个分片组合结果

c.分片字段的值要尽量的分散、随机,这样在插入数据的时候可以插入到不同的分片中去,避免造成一个分片压力过大

 

© 著作权归作者所有

粉丝 4
博文 23
码字总数 33703
作品 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
76
0
21.36 mongodb分片介绍

21.36 mongodb分片介绍 分片就是将数据库进行拆分,将大型集合分隔到不同服务器上。比如,本来100G的数据,可以分割成10份存储到10台服务器上,这样每台机器只有10G的数据。 通过一个mongos的...

脑洞老湿_
2017/10/20
24
0
MongoDB集群部署 - 带访问控制的分片副本集

1. 前言   Ceilometer将meter、event等数据保存在MongoDB中,之前将MongoDB部署在控制节点上,使用三副本模式,时间长了发现meter数据爆炸式增长,区区2T的磁盘捉襟见肘,而想删除旧数据,...

Sai18
2018/08/16
0
0
【0716】NoSQL——mogodb

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

alexis7gunner
07/21
0
0
mongodb 集群搭建 分片+副本集

mkdir -p /home/mongodb/conf mkdir -p /home/mongodb/mongos/log mkdir -p /home/mongodb/config/data mkdir -p /home/mongodb/config/log mkdir -p /home/mongodb/shard1/data mkdir -p /h......

674591788
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
9
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部