MongoDB的复制集是一个主从复制模式 又具有故障转移的集群,任何成员都有可能是master
当master挂掉用会很快的重新选举一个节点来充当master。

复制集中的组成主要成员

  • Primary
    数据读写 master节点
  • Secondary
    备份Primary的数据 默认设置下 不可读 不可写
  • arbiter
    投票节点 此节点不会存数据 只参与投票 ,当primary节点出现异常挂掉之后 arbiter节点负责从secondary 节点中选举一个节点升级为Primary节点

其中可以设置Secondary节点可读,让Primary节点负责写,这些就实现了一个高效简单的读写分离    。

环境搭建

以3个实例来演示一下复制集群的搭建过程 分别为:127.0.0.1:12345,127.0.0.1:12346,127.0.0.1:12347。
需要预先创建好各目录的文件夹 不然启动的时候会报错,这里还有一个坑是 pidfilepath配置项必须是绝对路径,
否则也会报错,replSet在同一个复制集中也需要具有一致的名称。

注意在旧版本中是使用的是master slave模式 目前使用的是3.4官方不支持使用这种方式,
官方希望使用replset代替master slave。所以当你配置master或者slave的时候就会报错。

127.0.0.1:12345配置


port=12345
fork=true
dbpath=data/12345
logpath=log/12345/mongod.log
httpinterface=true
rest=true
logappend=true
pidfilepath=/home/collect/mongodb-linux-x86_64-rhel70-3.4.1/log/12345/12345.pid
replSet=mydbCenter
oplogSize=512
 
127.0.0.1:12346配置

port=12346
fork=true
dbpath=data/12346
logpath=log/12346/mongod.log
httpinterface=true
rest=true
logappend=true
pidfilepath=/home/collect/mongodb-linux-x86_64-rhel70-3.4.1/log/12346/12346.pid
replSet=mydbCenter
oplogSize=512
127.0.0.1:12347配置
 

port=12347
fork=true
dbpath=data/12347
logpath=log/12347/mongod.log
httpinterface=true
rest=true
logappend=true
pidfilepath=/home/collect/mongodb-linux-x86_64-rhel70-3.4.1/log/12347/12347.pid
replSet=mydbCenter
oplogSize=512

分别启动好3个实例之后,随便进入一个实例

初始化复制集群

首先创建1个配置对象 在js中就是一个简单的对象 、json串

 
  1.  
    var rs_conf={
  2.  
    "_id" : "mydbCenter",
  3.  
    "members" : [
  4.  
    {
  5.  
    "_id" : 0,
  6.  
    "host" : "127.0.0.1:12345"
  7.  
    },
  8.  
    {
  9.  
    "_id" : 1,
  10.  
    "host" : "127.0.0.1:12346"
  11.  
    },
  12.  
    {
  13.  
    "_id" : 2,
  14.  
    "host" : "127.0.0.1:12347"
  15.  
    }
  16.  
    ]
  17.  
    }
把配置应用到集群
 
rs.initiate(rs_conf)

这里有一个限制就是需要集群的节点中不能有数据 需要先清空一下 不然initiate的时候会出错。
配置成功后使用rs.status()命令查看各节点状态,一些正常 就能看到各节点的状态信息

rs.status()

搭建好复制集群之后命令行的标识符会变为相应的成员类型如

  1.  
    mydbCenter:PRIMARY>
  2.  
    mydbCenter:SECONDARY>

这也是检验集群是否搭建的成功的一个小标识。

接着可以尝试一下在Primary中写入一条数据。这条数据会立即同步到各个Secondary节点中。
当然前面也说过默认情况的Secondary不可读 会报下面的错误。

  1.  
    {
  2.  
    "ok" : 0,
  3.  
    "errmsg" : "not master and slaveOk=false",
  4.  
    "code" : 13435,
  5.  
    "codeName" : "NotMasterNoSlaveOk"
  6.  
    }

所以需要在Secondary中执行

db.getMongo().setSlaveOk()

在网络上看到有很多帖子说只要在Primary节点中执行 db.getMongo().setSlaveOk()
就能在Secondary节点中读取数据,但是在3.4版本试了一下是不行的。需要在Secondary中执行一下
db.getMongo().setSlaveOk()让Secondary可读。

添加节点

如果现在已经有搭建好一个复制集群了 老板想多加一台备份机器进去 怎么办?
只需要启动好新机器的实例后 在Primary中调用rs.add() 方法即可

rs.add({"host" : "127.0.0.1:12348"})

添加投票节点调用rs.addArb()方法。

转载至:笑松小站 http://blog.seoui.com/2017/01/11/mongodb-rs/

MongoDB搭建ReplSet复制集群的更多相关文章

  1. MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)

      一.mongodb主从复制配置 主从复制是mongodb最常用的复制方式,也是一个简单的数据库同步备份的集群技术,这种方式很灵活.可用于备份,故障恢复,读扩展等. 最基本的设置方式就是建立一个主节 ...

  2. MongoDB——基本使用及集群搭建

    文章目录 什么是MongoDb? 基本概念 与关系型数据库的比较 Mongo的高效性 文件存储 基本使用 启动/连接服务 基础操作命令 高可用集群搭建 概念 环境准备 实践 应用场景 总结 什么是Mo ...

  3. 架构(三)MongoDB安装配置以及集群搭建

    一 安装 1.1 下载MongoDB 我个人不太喜欢用wget url, 之前出现过wget下载的包有问题的情况 https://fastdl.mongodb.org/linux/mongodb-li ...

  4. 学习MongoDB(二) Replica Set集群配置

    1.官方网址:https://docs.mongodb.org/manual/tutorial/deploy-replica-set-for-testing/ 2.Replica Set介绍: htt ...

  5. Linux下搭建Lotus Domino集群

    Linux下搭建Lotus Domino 集群 本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334 ...

  6. hadoop(二)搭建伪分布式集群

    前言 前面只是大概介绍了一下Hadoop,现在就开始搭建集群了.我们下尝试一下搭建一个最简单的集群.之后为什么要这样搭建会慢慢的分享,先要看一下效果吧! 一.Hadoop的三种运行模式(启动模式) 1 ...

  7. 虚拟机搭建Zookeeper服务器集群完整笔记

    虚拟机搭建Zookeeper服务器集群完整笔记 本笔记主要记录自己搭建Zookeeper服务器的全过程,默认已经安装部署好Centos7. 一.虚拟机下Centos无法联网解决方案 1.首先调整虚拟机 ...

  8. Storm环境搭建(分布式集群)

    作为流计算的开篇,笔者首先给出storm的安装和部署,storm的第二篇,笔者将详细的介绍storm的工作原理.下边直接上干货,跟笔者的步伐一块儿安装storm. 原文链接:Storm环境搭建(分布式 ...

  9. 基于keepalived搭建MySQL热机集群

    背景 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,M ...

随机推荐

  1. MBR结构解析与fdisk的bash实现

    一.MBR结构解析 首先我们先介绍一些MBR的基本知识基础,再晾图片分析. MBR主要分为三大块各自是: 1.载入引导程序(446K) 2.分区表(64k) 3.标志结束位(2k) 载入引导程序:内容 ...

  2. sql_视图和函数

    创建视图: create view xxx as select * from userinfo; 删除视图: drop view xxx 修改视图: alter view xxx as selete ...

  3. Java序列化算法

    Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.java序列化API提供一种处理对象序列化的标准机 ...

  4. sparkSQL1.1入门之十:总结

    回想一下,在前面几章中,就sparkSQL1.1.0基本概念.执行架构.基本操作和有用工具做了基本介绍. 基本概念: SchemaRDD Rule Tree LogicPlan Parser Anal ...

  5. Laravel建站01--开发环境部署

    内容导航 安装git 安装composer 安装Laravel 既然是开发环境,就需要源代码管理.这里使用git来管理. 一:部署开发环境之前安装git 在 Linux 上安装git 如果你想在 Li ...

  6. ruby on rails模拟HTTP请求错误发生:end of file reached

    在文章 Ruby On Rails中REST API使用演示样例--基于云平台+云服务打造自己的在线翻译工具 中,利用ruby的Net::HTTP发起http请求訪问IBM Bluemix上的sour ...

  7. angularJS 常用插件指令

    长时间没有登入博客园了,今天突然想了想,当初开这个的目的,其实就是为了记录你当下的一个状态和累计一些问题,所以记录这些还是很有意义,毕竟不是什么牛,靠脸又吃不饱的这个年代,需要留下一些东西给自己看也好 ...

  8. caffe学习--caffe入门classification00学习--ipython

    首先,数据文件和模型文件都已经下载并处理好,不提. cd   "caffe-root-dir " ----------------------------------分割线---- ...

  9. properties配置文件读取

    1.配置文件test.properties: test_123=admin 注:value 可用单引号,双引号,不用引号修饰 2.工具类PropertiesUtil: package com..... ...

  10. 【重磅干货】看了此文,Oracle SQL优化文章不必再看!

    目录 SQL优化的本质 SQL优化Road Map 2.1 制定SQL优化目标 2.2 检查执行计划 2.3 检查统计信息 2.4 检查高效访问结构 2.5 检查影响优化器的参数 2.6 SQL语句编 ...