博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mongodb的集群
阅读量:2068 次
发布时间:2019-04-29

本文共 4178 字,大约阅读时间需要 13 分钟。

序言

       Mongodb的集群环境,的工作原理简单梳理下.当然也是站在别人的肩膀上(多人的肩膀上).做一个我认为比较好的梳理.

       原理是个很重要的东西,可以帮助你解决 你不知道你不知道的问题. 同时也帮助你去理解.cuiyaonan2000@163.com

参考文章:

Master-Slaver(主重模式)

  • 主(Master): 可读可写,当数据有修改的时候,会将oplog同步到所有连接的salve上去。

  • 从(Slave): 只读不可写,自动从Master同步数据。

     对于Mongodb来说,并不推荐使用Master-Slave架构,因为Master-Slave其中Master宕机后不能自动恢复. (只能人工介入,指定新的主节点,从节点不会自动升级为主节点。同时,在这段时间内,该集群架构只能处于只读状态。)

       Master-Slave不支持链式结构,Slave只能直接连接Master。

       Redis的Master-Slave支持链式结构,Slave可以连接Slave,成为Slave的Slave。

       从节点要知道主节点的地址,主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。(主节点记录数据的操作命令,然后从节点在执行一遍~)

Replica Set(副本集)

在这里插入图片描述

  • 主节点(Primary--图中的M):接收所有的写请求,然后把修改同步到所有从节点。一个Replica Set只能有一个Primary节点,当Primar挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。默认读请求也是发到Primary节点处理的,需要转发到Secondary需要客户端修改一下连接配置。

  • 副本节点(Secondary--图中的S):与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做

  • 仲裁者(Arbiter--图中的A): 不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上。

       主节点负责数据的写入和更新,并在更新数据的同时,将操作信息写入名为 oplog 的日志文件当中。从节点会定时轮询读取 oplog 日志,根据日志内容同步更新自身的数据,保持与主节点一致。

       副本集中的各节点会通过心跳信息来检测各自的健康状况(副本节点中有相互的心跳机制,同时跟主节点也有心跳),当主节点出现故障时,多个从节点会触发一次新的选举操作,并选举其中一个作为新的主节点。为了保证选举票数不同,副本集的节点数保持为奇数。MongoDB 的副本集是自带故障转移功能的主从复制。

Sharding(分片--水平切割,目前垂直切割的工具还没见到过)

        副本集可以解决主节点发生故障导致数据丢失或不可用的问题,但遇到需要存储海量数据的情况时,副本集机制就束手无策了。副本集中的一台机器可能不足以存储数据,或者说集群不足以提供可接受的读写吞吐量。这就需要用到 MongoDB 的分片(Sharding)技术,这也是 MongoDB 的另外一种集群部署模式。(副本集是对一个主节点的操作,所以高并发,大数据量的写就会让一台机器受不了,就算能读写分离,但是也不行)

       MongoDB 的分片集群,需要三个重要的组件,A:Shard Server(分片服务器)、B:Config Server(配置服务器)C:Route Server(路由服务器)。

  • Shard Server:    每个 Shard Server 都是一个 mongod 数据库实例,用于存储实际的数据块。整个数据库集合分成多个块存储在不同的 Shard Server 中。在实际生产中,一个 Shard Server 可由几台机器组成一个副本集来承担,防止因主节点单点故障导致整个系统崩溃。(实际存储,且可以使用副本集来增强高可用性)
  • Config Server:   这是独立的一个 mongod 进程,保存集群和分片的元数据,在集群启动最开始时建立,保存各个分片包含数据的信息。(相当于注册中心,记录各个分片的位置)
  • Route Server:  这是独立的一个 mongos 进程,Route Server 在集群中可作为路由使用,客户端由此接入,让整个集群看起来像是一个单一的数据库,提供客户端应用程序和分片集群之间的接口。Route Server 本身不保存数据,启动时从 Config Server 加载集群信息到缓存中,并将客户端的请求路由给每个 Shard Server,在各 Shard Server 返回结果后进行聚合并返回客户端。(最后这句话有没有想分布式事务的二次提交的功能.~~~~)

片键的概念:程序需要从集合里面选一个键,用该键的值作为数据拆分的依据。这个键称为片键(shard key).随着添加或者删除片,MongoDB会重新平衡数据,使每片的流量都比较均衡,数据量也在合理范围内。

Centos7---单机版Mongodb安装

安装配置Mongodb

在官网下载对应的Mongodb版本地址: 截图如下所示(当然是社区版本了,打包方式是tgz)

[cuiyaonan2000@mzdssop soft]# tar -zxvf mongodb-linux-x86_64-rhel70-4.4.1.tgz ## 在安装目录下创建data文件夹用于存放数据和日志[cuiyaonan2000@mzdssop soft]# mkdir mongodb_data[cuiyaonan2000@mzdssop soft]# cd mongodb_data##在mongodb_data文件夹下创建db文件夹,用于存放数据[cuiyaonan2000@mzdssop soft]# mkdir db##在mongodb_data文件夹下创建logs文件夹,用于存放日志[cuiyaonan2000@mzdssop soft]# mkdir logs##设置文件夹权限,方便操作[cuiyaonan2000@mzdssop soft]# chmod 777 logs##设置文件夹权限,方便操作[cuiyaonan2000@mzdssop soft]# chmod 777 db##在logs文件夹下创建log文件[cuiyaonan2000@mzdssop soft]# touch mongodb.log在data文件夹下创建mongodb.conf配置文件[cuiyaonan2000@mzdssop soft]# vi mongodb.conf##mongodb.conf 中增加如下内容#端口号port = 27017#数据目录dbpath = /soft/mongodb_data/db#日志目录logpath = /soft/mongodb_data/logs/mongodb.log#设置后台运行fork = true#日志输出方式----是否追加日志logappend = true#开启认证#auth = true#最大同时连接数maxConns=100 #不启用验证noauth=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,#然后重放后续的journal日志来恢复。journal=true #存储引擎,有mmapv1、wiretiger、mongorocksstorageEngine=wiredTiger #设置成全部ip可以访问,这样就可以在windows中去连虚拟机的MongoDB,#也可以设置成某个网段或者某个ip1234567891011bind_ip = 0.0.0.0  ~

设置Mongodb环境变量

[cuiyaonan2000@mzdssop soft]# vi /etc/profile##增加如下内容export MONGODB_HOME=/soft/mongodb-linux-x86_64-rhel70-4.4.1export PATH=$PATH:$MONGODB_HOME/bin[cuiyaonan2000@mzdssop soft]# source /etc/profile

 输入如下的 [cuiyaonan2000@mzdssop soft]# mongod -version 则表示成功

启动和关闭

#     -config 后面跟的是配置文件#     -dbpath 后面跟的是存放数据的目录# 启动bin/mongod -config ./data/mongodb.conf --dbpath /usr/ywq/mongodb-linux-x86_64-4.0.8/data/db# 关闭bin/mongod -shutdown -config ./data/mongodb.conf --dbpath /usr/ywq/mongodb-linux-x86_64-4.0.8/data/db

第三方工具连接

因为Mongodb的conf中设置了不需要验证,所以可以直接用Robo 3T 1.4.1进行连接

这其中可能会因为客户端版本跟服务器版本不配的报错,直接下载最新的客户端就可以了。

另外如果连接失败的话可以在Linux中增加一个用户。

#进入Mongodb的环境[cuiyaonan2000@mzdssop db]# mongo#选择数据库use admin    #创建一个用户,并分配root超级管理员角色db.createUser({user:"admin", pwd: "123456", roles: ["root"]})   #对账号授权:db.auth(“账号”,”密码”)db.auth("admin", "123456")

转载地址:http://sbcmf.baihongyu.com/

你可能感兴趣的文章
SpringMVC中乱码解决方案
查看>>
SpringMVC中时间格式转换的解决方案
查看>>
post和get请求相关知识点
查看>>
关于try finally 中的return语句的问题
查看>>
RequestBody/ResponseBody处理Json数据
查看>>
springmvc请求参数获取的几种方法
查看>>
在eclipse中创建和myeclipse一样的包结构
查看>>
Java中的IO流
查看>>
java中的关键字
查看>>
如果某个方法是静态的,它的行为就不具有多态性
查看>>
优化Hibernate所鼓励的7大措施
查看>>
Java 8系列之重新认识HashMap
查看>>
HashMap 、 ArrayList、String 重写了equals方法 而Object类(比如User)没有重写
查看>>
Servlet的生命周期
查看>>
Object中的getClass()返回的是当前运行的类
查看>>
加载驱动程序的方法
查看>>
深入理解java异常处理机制
查看>>
object类的基本方法
查看>>
回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
查看>>
Dubbo分布式服务框架入门(附工程)
查看>>