文档章节

MongoDB 集群(三)

lyg945
 lyg945
发布于 2016/11/21 22:38
字数 972
阅读 112
收藏 2

MongoDB 副本集(replica Set)

Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。

仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。

在MongoDB副本集中,主节点负责处理客户端的读写请求,备份节点则负责映射主节点的数据。

备份节点的工作原理过程可以大致描述为,备份节点定期轮询主节点上的数据操作,然后对自己的数据副本进行这些操作,从而保证跟主节点的数据同步。

至于主节点上的所有 数据库状态改变 的操作,都会存放在一张特定的系统表中。备份节点则是根据这些数据进行自己的数据更新。

oplog

上面提到的 数据库状态改变 的操作,称为oplog(operation log,主节点操作记录)。oplog存储在local数据库的" oplog.rs"表中。副本集中备份节点异步的从主节点同步oplog,然后重新执行它记录的操作,以此达到了数据同步的作用。

node1 mongodb.config配置

  • dbpath=/usr/data/mongodb/relpset/node1/data/db
  • logpath=/usr/data/mongodb/relpset/node1/log/mongodb.log
  • logappend=true
  • fork=true
  • bind_ip=192.168.1.1
  • port=27021
  • replSet=myset

node2 mongodb.config配置

  • dbpath=/usr/data/mongodb/relpset/node2/data/db
  • logpath=/usr/data/mongodb/relpset/node2/log/mongodb.log
  • logappend=true
  • fork=true
  • bind_ip=192.168.1.1
  • port=27022
  • replSet=myset

node3 mongodb.config配置

  • dbpath=/usr/data/mongodb/relpset/node3/data/db
  • logpath=/usr/data/mongodb/relpset/node3/log/mongodb.log
  • logappend=true
  • fork=true
  • bind_ip=192.168.1.1
  • port=27023
  • replSet=myset

启动node1、node2、node3

连接node1  mongo --host 192.168.1.1 -port 27021

> rs.status()
{
    "info" : "run rs.initiate(...) if not yet done for the set",
    "ok" : 0,
    "errmsg" : "no replset config has been received",
    "code" : 94
}

初始化副本集配置—仲裁节点配置模式 priority权重,权重大的是主节点

> rs.initiate({"_id":"myset",members:[{"_id":1,"host":"192.168.1.1:27021",priority:4},{"_id":2,"host":"192.168.1.1:27022",priority:1},{"_id":3,"host":"192.168.1.1:27023",arbiterOnly:true}]})

{ "ok" : 1 }

myset:OTHER> rs.status()
{
    "set" : "myset",
    "date" : ISODate("2016-11-22T03:27:37.333Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 1,
            "name" : "192.168.1.1:27021",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 1574,
            "optime" : Timestamp(1479784992, 1),
            "optimeDate" : ISODate("2016-11-22T03:23:12Z"),
            "electionTime" : Timestamp(1479784996, 1),
            "electionDate" : ISODate("2016-11-22T03:23:16Z"),
            "configVersion" : 1,
            "self" : true
        },
        {
            "_id" : 2,
            "name" : "192.168.1.1:27022",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 264,
            "optime" : Timestamp(1479784992, 1),
            "optimeDate" : ISODate("2016-11-22T03:23:12Z"),
            "lastHeartbeat" : ISODate("2016-11-22T03:27:36.724Z"),
            "lastHeartbeatRecv" : ISODate("2016-11-22T03:27:36.726Z"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "could not find member to sync from",
            "configVersion" : 1
        },
        {
            "_id" : 3,
            "name" : "192.168.1.1:27023",
            "health" : 1,
            "state" : 7,
            "stateStr" : "ARBITER",
            "uptime" : 264,
            "lastHeartbeat" : ISODate("2016-11-22T03:27:36.726Z"),
            "lastHeartbeatRecv" : ISODate("2016-11-22T03:27:36.726Z"),
            "pingMs" : 0,
            "configVersion" : 1
        }
    ],
    "ok" : 1
}

连接效果如下,代表副本集创建成功

连接node1  mongo --host 192.168.1.1 -port 27021

  • myset:PRIMARY> db.zhangsan.insert({"id":i,"name":"zhangsan"+1})

连接node2  mongo --host 192.168.1.1 -port 27022

  • myset:SECONDARY> show dbs
  • 2016-11-22T11:38:38.215+0800 E QUERY    Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }
  • myset:SECONDARY> rs.slaveOk()
  • myset:SECONDARY> show dbs
  • local  1.078GB
  • test   0.078GB
  • myset:SECONDARY> show collections
  • system.indexes
  • zhangsan
  • myset:SECONDARY> db.zhangsan.find()
  • { "_id" : ObjectId("5833bd834f0add422410ee18"), "id" : 0, "name" : "zhangsan1" }

连接node3  mongo --host 192.168.1.1 -port 27023

myset:ARBITER> 

node1 可写可读  node2 不可写可读  node3 不可读不可写 

node1挂了

  1. 仲裁节点node3会把从node2切换成主
  2. node1重启之后,node3会根据权重把node1切换成主,node2为从

初始化副本集配置—无仲裁节点配置模式

  • > rs.initiate({"_id":"myset1",members:[{"_id":1,"host":"192.168.1.1:27024"},{"_id":2,"host":"192.168.1.1:27025"},{"_id":3,"host":"192.168.1.1:27026"}]})

node4主 挂了

  1. 主从会自动切换,会从node5,node6中选择一个作为主
  2. node4重启之后,node4会变成从节点

实际工作中,无仲裁节点配置用的多,有仲裁的话,仲裁挂掉,就没法切换主从了

杀掉主进程观察效果:netstat -antp | grep mon

增加节点

        rs.add(“192.168.1.1:27024”)

删除节点

        rs.remove(“192.168.1.1:27024”)

© 著作权归作者所有

lyg945

lyg945

粉丝 39
博文 28
码字总数 15849
作品 0
上海
后端工程师
私信 提问
加载中

评论(0)

MongoDB集群部署(副本集模式)

一、需求背景 1、现状描述 (1)、针对近期出现的mongodb未授权的安全问题,导致mongodb数据会被非法访问。应安全平台部的要求,需要对所有mongodb进行鉴权设置,目前活动侧总共有4台,用于某X...

workming
2018/06/29
0
0
《阿里巴巴MongoDB4.0高级实战:基于Java Spring Boot 2.0》运维、监控、聚合、集群、监控等高级面试题

《阿里巴巴MongoDB4.0高级实战》阿里巴巴技术大牛 资深专家P9叶翔、专家徐雷. NoSQL排名第一!最流行的NoSQL数据库;谷歌、阿里巴巴、蚂蚁金服、腾讯、百度等一线互联网公司必备技能。 本系列...

徐雷frank
2018/11/01
0
0
MongoDB应用实战开发教程下载

分享一套hejing老师的MongoDB应用实战开发的视频教程,本课程侧重于讲解MongoDB的常用特性及高级特性,从实际开发的角度出发对MongoDB进行全方位深入剖析,学员从中可领会到MongoDB设计的精妙...

非常好看
2014/01/08
0
0
MongoDB集群部署 - 带访问控制的分片副本集

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

Sai18
2018/08/16
0
0
使用Docker和Kubernetes将MongoDB作为微服务运行

原文:Running MongoDB as a Microservice with Docker and Kubernetes 作者:Andrew Morgan 译者:徐雷 MongoDB是NoSQL排名第一的数据库,Docker是最流行的容器引擎,Kubernetes是谷歌开源的...

徐雷frank
2019/03/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

跟踪mybatis执行一条sql的流程

一次insert操作过程 以保存一条记录到表中这个简单的操作为例,就按这个例子来跟踪mybatis是如何执行sql语句的,要保存一个user记录到表中: sqlSession.insert("x.y.insertUser", user); ...

閒散人員
13分钟前
17
0
Android | 教你如何用华为HMS MLKit机器学习服务开发一个拍照翻译小程序

引子   想必有很多小伙伴喜欢外出旅游,能去海外玩一圈那是更好不过了,旅游前大家一定会对吃、穿、住、行、游玩路线做各种攻略,然后满怀期待的出发… 想象中的旅游   出发前,想象中的...

华为开发者论坛
15分钟前
16
0
Python3 超强企业级项目调试工具,PySnooper,调试Python3 更方便

感谢作者分享-http://bjbsair.com/2020-04-07/tech-info/30786.html 图/文:迷神 不知道有多少人和我一样,曾经把Print作为Python中使用频率最高的一个函数,成为python,print的重度户。为什...

曹长卿
15分钟前
19
0
Filebeat在windows下安装使用

一、windows下安装Filebeat 官网下载安装包 解压到指定目录,打开解压后的目录,打开filebeat.yml进行配置。 1、配置为输出到ElasticSearch ①:配置 Filebeat prospectors->path 这里的路径...

瑞查德-Jack
18分钟前
22
0
SpringBoot常用注解

@SpringBootApplication,替代@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan @ImportAutoConfiguration,导入配置类,一般做测试的时候用,正常优先使用@EnableAuto......

chinahufei
19分钟前
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部