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=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
|
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串
- var rs_conf={
- "_id" : "mydbCenter",
- "members" : [
- {
- "_id" : 0,
- "host" : "127.0.0.1:12345"
- },
- {
- "_id" : 1,
- "host" : "127.0.0.1:12346"
- },
- {
- "_id" : 2,
- "host" : "127.0.0.1:12347"
- }
- ]
- }
rs.initiate(rs_conf)
这里有一个限制就是需要集群的节点中不能有数据 需要先清空一下 不然initiate
的时候会出错。
配置成功后使用rs.status()
命令查看各节点状态,一些正常 就能看到各节点的状态信息
rs.status()
搭建好复制集群之后命令行的标识符会变为相应的成员类型如
- mydbCenter:PRIMARY>
- mydbCenter:SECONDARY>
这也是检验集群是否搭建的成功的一个小标识。
接着可以尝试一下在Primary中写入一条数据。这条数据会立即同步到各个Secondary节点中。
当然前面也说过默认情况的Secondary不可读 会报下面的错误。
- {
- "ok" : 0,
- "errmsg" : "not master and slaveOk=false",
- "code" : 13435,
- "codeName" : "NotMasterNoSlaveOk"
- }
所以需要在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()
方法。
MongoDB搭建ReplSet复制集群的更多相关文章
- MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)
一.mongodb主从复制配置 主从复制是mongodb最常用的复制方式,也是一个简单的数据库同步备份的集群技术,这种方式很灵活.可用于备份,故障恢复,读扩展等. 最基本的设置方式就是建立一个主节 ...
- MongoDB——基本使用及集群搭建
文章目录 什么是MongoDb? 基本概念 与关系型数据库的比较 Mongo的高效性 文件存储 基本使用 启动/连接服务 基础操作命令 高可用集群搭建 概念 环境准备 实践 应用场景 总结 什么是Mo ...
- 架构(三)MongoDB安装配置以及集群搭建
一 安装 1.1 下载MongoDB 我个人不太喜欢用wget url, 之前出现过wget下载的包有问题的情况 https://fastdl.mongodb.org/linux/mongodb-li ...
- 学习MongoDB(二) Replica Set集群配置
1.官方网址:https://docs.mongodb.org/manual/tutorial/deploy-replica-set-for-testing/ 2.Replica Set介绍: htt ...
- Linux下搭建Lotus Domino集群
Linux下搭建Lotus Domino 集群 本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334 ...
- hadoop(二)搭建伪分布式集群
前言 前面只是大概介绍了一下Hadoop,现在就开始搭建集群了.我们下尝试一下搭建一个最简单的集群.之后为什么要这样搭建会慢慢的分享,先要看一下效果吧! 一.Hadoop的三种运行模式(启动模式) 1 ...
- 虚拟机搭建Zookeeper服务器集群完整笔记
虚拟机搭建Zookeeper服务器集群完整笔记 本笔记主要记录自己搭建Zookeeper服务器的全过程,默认已经安装部署好Centos7. 一.虚拟机下Centos无法联网解决方案 1.首先调整虚拟机 ...
- Storm环境搭建(分布式集群)
作为流计算的开篇,笔者首先给出storm的安装和部署,storm的第二篇,笔者将详细的介绍storm的工作原理.下边直接上干货,跟笔者的步伐一块儿安装storm. 原文链接:Storm环境搭建(分布式 ...
- 基于keepalived搭建MySQL热机集群
背景 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,M ...
随机推荐
- elasticsearch 查询模板
简单版示例: 2.x版本(相比于1.x版本,使用bool替代filtered,使用must替代query) { "query": { "bool": { &qu ...
- Python下opencv使用笔记(七)(图像梯度与边缘检測)
梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(无论是横向的.纵向的.斜方向的等等),所须要的无非也是一个核模板.模板的不同结果也不同.所以能够看到,全部的这些个算子函数,归结究竟都能够用 ...
- Flash中如何使用滤镜
使用滤镜 应用或删除滤镜 复制和粘贴滤镜 为对象应用预设滤镜 启用或禁用应用于对象的滤镜 启用或禁用应用于对象的所有滤镜 创建预设滤镜库 对象每添加一个新的滤镜,在属性检查器中,就会将其添加到该对象所 ...
- 两种IO模式:Proactor与Reactor模式
在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作. 在比较这两个模式之前,我们首先的搞明白 ...
- 【每日Scrum】第七天(4.28)Sprint2总结性会议
本次会议主要是演示了一下本组项目的各项功能,每个人负责那一块儿功能由本人来负责说明和演示,确定alpha版本的发布时间,并且分派了各组员的文档负责情况,上图是会议记录,下面我详细介绍一下我组分派情况: ...
- web前端面试系列 一 js闭包
一.什么是闭包? JavaScript高级程序设计第三版: 闭包是指有权访问另一个函数作用域中的变量的函数. 在js中定义在函数内部的子函数能够访问外部函数定义的变量,因此js内部函数就是一个闭包. ...
- IDEA搭建Android wear开发环境,Android wear,I'm comming!
随着google公布了android wear这个东西.然后又有了三星的gear,LG的G watch以及moto 360,苹果由公布了apple watch.未来可能在智能手表行业又有一场战争. 当 ...
- Lombok简介
Lombok简介 和其他语言相比,Java经常因为不必要的冗长被批评.Lombok提供了一系列注解用以在后台生成模板代码,将其从你的类中删除,从而有助于保持你的代码整洁.较少的模板意味着更简洁的代码, ...
- g++ 6.4编译opencv-2.4.10报错记录
fetch公司的项目进行编译,此项目依赖opencv库.由于本人一直比较偏爱fedora,但也因此给我带来了许多"乐趣"(麻烦).fedora一直走得比较前沿,g++ 6.3了 ...
- php中屏蔽date的错误
php中添加 date_default_timezone_set('asia/shanghai'); 可以屏蔽 <?php echo date('Y-m-d',$row3['time']); ...