MongoDB搭建ReplSet复制集群

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/

原文地址:https://www.cnblogs.com/ExMan/p/9571727.html

时间: 2024-11-13 10:37:08

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

mongodb之replSet复制集

### mongodb的复制集 ### 注意点 - 服务器节点之前时间要同步 - 开启防火墙的一定要允许通过 - 开启selinux的也要进行设置 - 建立双击互信模式最好不过 ### 主服务器配置文件 - 添加一行 replSet = zhuima 定义一个副本集 [[email protected] ~]# sed -e '/^#/d;/^$/d' /etc/mongodb.conf bind_ip = 192.168.58.10 port = 27017 fork = true pidfi

mongodb之replSet复制集 + auth

### 开启auth认证的mongodb的复制集 ### 注意点 - 服务器节点之前时间要同步 - 开启防火墙的一定要允许通过 - 开启selinux的也要进行设置 - 建立双击互信模式最好不过 ### 提前要做的事情 生产高端大气上档次的keyFile文件 [[email protected] journal]# openssl rand -base64 753 3LC/EZGPOLXdVBQInqeKVglqNNWo2Et93ib51BQJZRAUB2gRUovi4b6ZkAeNAQxc v

一步一步教你搭建基于docker的MongoDB复制集群环境

一步一步教你搭建基于docker的MongoDB复制集群环境 1.安装docker 2.创建MongoDB的Image 3.搭建MongoDB的集群 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中. 1.ubuntu14.04安装docker 参考文档 http://docs.docker.com/installation/ubuntulinux/ 参考文档 http://docs.docker.com/mac/started/ pc@pc-Th

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

一 安装 1.1 下载MongoDB 我个人不太喜欢用wget url, 之前出现过wget下载的包有问题的情况 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.7.tgz 1.2 上传服务器并解压 tar -zxvf mongodb-linux-x86_64-3.4.7.tgz 1.3 移动到/data/program/software/mongodb mv mongodb-linux-x86_64-3.4.7/ /data/

mongoDB主从和副本集群配置

mongoDB主从和副本集群配置 Mongodb是时下流行的NoSql数据库(MongoDB是一个基于分布式文件存储的数据库),它的存储方式是文档式存储,并不是Key-Value形式.   优势: 快速!(当然,这和具体的应用方式有关,通常来说,它比一般的关系型数据库快5位左右.) 很高的可扩展性–轻轻松松就可实现PB级的存储(但是可能我们并不需要PB级的存储,10TB可能就够了) 他有一个很好的 replication 模式 (replica sets) 有很完善的Java API 他的存储格

MongoDB Sharding Cluster分片集群

MongoDB Sharding Cluster 第1章 分片技术简述: sharding是MongoDB用来将大型集合分割高不同服务器上所采用的方法,尽管分片起源于关系型数据库分区,但MongoDB分片完全又是另一回事 和mysql分区方案相比,MongoDB的最大区别在于它几乎能自动完成所有事情,只要告诉MongoDB要分配数据,它就能自动维护数据在不同的服务器之间的均衡 1.1 分片的目的: ?  垂直扩展:增加更多的cpu和存储资源来扩展容量,也属于硬件扩展 ?  水平扩展:将数据集分布

MongoDB分片存储的集群架构实现

MongoDB分片存储的集群架构实现 如果需要存储大量数据,或者系统的读写吞吐量很大的时候,单个server就很难满足需求了.这个时候我们可以使用MongoDB的分片机制来解决这些问题. 分片的基本概念 分片(sharding)是一种水平扩展(horizontal scaling)的方式,把一个大的数据集分散到多个片服务器上,所有的片服务器将组成一个逻辑上的数据库来存储这个大的数据集.分片对用户(应用层)是透明的,用户不会知道数据很被存放到哪个片服务器上. 这种方式有两个好处: 分片之后,每个片

ZooKeeper环境搭建(单机/集群)(转)

前提: 配置文件主要是在$ZOOKEEPER_HOME/conf/zoo.cfg,刚解压时为zoo_sample.cfg,重命名zoo.cfg即可. 配置文件常用项参考:http://www.cnblogs.com/EasonJim/p/7483880.html 环境搭建: 一.ZooKeeper的搭建方式 ZooKeeper安装方式有三种,单机模式和集群模式以及伪集群模式. 单机模式:ZooKeeper只运行在一台服务器上,适合测试环境: 伪集群模式:就是在一台物理机上运行多个ZooKeepe

haproxy+keepalived搭建nginx+lamp集群

haproxy+keepalived搭建nginx+lamp集群 实验拓扑: 实验环境: 主机 Ip地址 软件 haproxy主调度器 192.168.100.154 keepalived-1.2.13.tar.gz haproxy-1.4.24.tar.gz haproxy从调度器 192.168.100.155 keepalived-1.2.13.tar.gz haproxy-1.4.24.tar.gz Nginx1 192.168.100.152 nginx-1.6.2.tar.gz Ng