复制集(replica set)
复制集是一组mongodb的进程维护同样的数据集,提供冗余与高可用性。最小的复制集由3台服务器(或者3个实例)组成,最多1个primary和2个secondary实例,其中只有primary允许读写,secondary只读。secondary和primary的数据完全一致,它们之间通过primary实例的oplog异步(asynchronous)方式同步数据。

oplog(operations log)是专门的capped collection,保存所有数据库相关修改的回滚记录,secondary成员通过异步的方式拷贝和执行这些操作。
当primary不可用时,复制集发起投票(elections),选择1台secondary做为primary,请注意priority这个参数,priority为0的secondary不能成为primary,不能触发投票。 Oplog Size
在Unix和Windows系统中, 如果存储引擎使用的是WiredTiger,将占用剩余使用空间的5%。

# 生产环境部署
kvm-70-101 10.0.70.101 # primary
kvm-70-102 10.0.70.102 # secondary
kvm-70-103 10.0.70.103 # secondary
# 生成key
openssl rand -base64 756 > mongodb_product_key
# 拷贝到所有成员服务器,并对文件授权
chmod 400 mongodb_product_key
chown mongod mongodb_product_key
# 变更/etc/mongod.conf,对复制集命名
security:
keyFile: /etc/mongodb_product_key replication:
replSetName: myapp
# primary初始化
rs.initiate( {
_id : 'myapp',
members: [ { _id : 0, host : 'kvm-70-101:27017' }, { _id : 1, host : 'kvm-70-102:27017' }, { _id : 2, host : 'kvm-70-103:27017' } ]
}) {
"info" : "try querying local.system.replset to see current configuration",
"ok" : 0,
"errmsg" : "already initialized",
"code" : 23,
"codeName" : "AlreadyInitialized"
}
# 建立超级用户admin
use admin
db.createUser(
{
user: 'admin',
pwd: '@admin',
roles: [ { role: 'root', db: 'admin' } ]
}
); # 建立app数据库的管理员app
use app
db.createUser(
{
user: 'app',
pwd: '@app',
roles: [ { role: 'dbOwner', db: 'app' } ]
}
); # 认证登录
db.auth('admin', '@admin') # 如果另外增加secondary,使用以下命令
rs.add('kvm-70-104:27017')
rs.add('kvm-70-104:27017') # 查看配置
rs.conf()
{
"_id" : "myapp",
"version" : 3,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "kvm-70-101:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "kvm-70-102:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : kvm-70-103:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : 2000,
"getLastErrorModes" : { },
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("59248e52d45510744805fb78")
}
} # 查看状态
rs.status()
{
"set" : "myapp",
"date" : ISODate("2017-05-23T20:37:08.946Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1495571827, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1495571827, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1495571827, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "kvm-70-101:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 4968,
"optime" : {
"ts" : Timestamp(1495571827, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-05-23T20:37:07Z"),
"electionTime" : Timestamp(1495567955, 2),
"electionDate" : ISODate("2017-05-23T19:32:35Z"),
"configVersion" : 3,
"self" : true
},
{
"_id" : 1,
"name" : "kvm-70-102:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 77,
"optime" : {
"ts" : Timestamp(1495571827, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1495571827, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-05-23T20:37:07Z"),
"optimeDurableDate" : ISODate("2017-05-23T20:37:07Z"),
"lastHeartbeat" : ISODate("2017-05-23T20:37:07.702Z"),
"lastHeartbeatRecv" : ISODate("2017-05-23T20:37:06.951Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.0.70.103:27017",
"configVersion" : 3
},
{
"_id" : 2,
"name" : "kvm-70-103:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 77,
"optime" : {
"ts" : Timestamp(1495571827, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1495571827, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-05-23T20:37:07Z"),
"optimeDurableDate" : ISODate("2017-05-23T20:37:07Z"),
"lastHeartbeat" : ISODate("2017-05-23T20:37:07.708Z"),
"lastHeartbeatRecv" : ISODate("2017-05-23T20:37:07.733Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.0.70.101:27017",
"configVersion" : 3
}
],
"ok" : 1
}
# secondary验证
# 授权从机允许读
rs.slaveOk() use app
db.auth('app', '@app')
db.test.insert({'hello': 'world'}) # 查看建立的数据库及用户
rs0:SECONDARY> db.test.find().pretty();
{ "_id" : ObjectId("5ad6c7e574a09792011db5ee"), "hello" : "world" } # 进行一次新的投票
rs.stepDown()

mongodb 3.4 学习 (三)复制集的更多相关文章

  1. MongoDB DBA 实践4-----创建复制集

    一.复制 复制允许多个数据库服务器共享相同数据的功能,从而确保冗余并促进负载平衡 1.数据冗余及可用性 复制技术提供数据冗余及可用性,在不同的数据库服务器上使用多个数据副本,复制技术防止单个数据库服务 ...

  2. MongoDB for OPS 02:复制集 RS 配置

    写在前面的话 对于生产环境而言,除非是非常不重要的业务,且该业务允许我们出现一定时间的停机,我们一般才会使用单节点,且该单节点必须要有完善的备份手段. RS 复制集 我们这里采取一主两从的方式搭建复制 ...

  3. MongoDB基础之九 replication复制集

    准备工作:创建目录 mkdir -p /home/m17 //home/m18 /home/m19 /home/mlog 1:启动3个实例,且声明实例属于某复制集 # ./bin/mongod --d ...

  4. kafka学习(三)-kafka集群搭建

    kafka集群搭建 下面简单的介绍一下kafka的集群搭建,单个kafka的安装更简单,下面以集群搭建为例子. 我们设置并部署有三个节点的 kafka 集合体,必须在每个节点上遵循下面的步骤来启动 k ...

  5. MongoDB 2.6复制集单节点部署(三)

    MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 2.6版本进行复制集实验(但MongoDB配置文件 ...

  6. MongoDB学习4:MongoDB复制集机制和原理,搭建复制集

    1.复制集的作用   1.1 MongoDB复制集的主要意义在于实现服务高可用   1.2 它的实现依赖于两个方面的功能:    · 数据写入时将数据迅速复制到另一个独立节点上    · 在接收写入的 ...

  7. MongoDB复制集

    1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 1.1.1 复制集的目的 ...

  8. mongodb基础学习8-复制集

    今天来简单学习一下复制集(replication),什么是复制集呢,类似于mysql的主从复制吧 简单来说就是有多个mongodb的实例,多个实例有相同的内容,其中一台用于读写,其它用于备份,当用于读 ...

  9. MongoDB 复制集节点增加移除及节点属性配置

    复制集(replica Set)或者副本集是MongoDB的核心高可用特性之一,它基于主节点的oplog日志持续传送到辅助节点,并重放得以实现主从节点一致.再结合心跳机制,当感知到主节点不可访问或宕机 ...

随机推荐

  1. 洛谷 P4568 [JLOI2011]飞行路线

    题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...

  2. 第三次 Scrum Meeting

    第三次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/7 20:00 60min 新主楼G411 附Github仓库:WEDO 例会照片 工作情况总结(4.5-4. ...

  3. selenium 安装与环境配置

    selenium的安装 环境配置:python2.7+selenium2+Firefox46以下版本 本次安装环境:python2.7.13+selenium2.53.6+Firefox46 官网下载 ...

  4. oracle 基础知识(十一)----表空间结构

    一,逻辑结构图 二.tablespace 01,Oracle表空间 它是一个逻辑的概念,它在物理上是不存在的. 02,oracle 存储结构 03.表空间特性 一个数据库可以包含多个表空间,一个表空间 ...

  5. C# MODBUS 通信

    背景 电厂有多组监控设备,需要在指定的设备上显示某些数据(其他设备对接过来的).通信协议是modbus主从结构. 源码: http://download.csdn.net/download/wolf1 ...

  6. JavaScript 浮点数及运算精度调整总结

    JavaScript 浮点数及运算精度调整总结 JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题不是J ...

  7. Kibana修改Time日志格式

    选择左侧management 打开Advanced Settings 编辑:dateFormat,默认格式是:MMMM Do YYYY, HH:mm:ss.SSS,修改为:YYYY-MM-DD HH: ...

  8. 把数据库内容显示在listview上

    数据库操作很简单,但用户想看见的是数据库里的内容,那么让数据库内容显示在屏幕上呢,下面做个简单演示,百变不离其中,先看步骤: 把数据库的数据显示至屏幕1. 任意插入一些数据 定义Javabean:Pe ...

  9. Best HTTP

    http://blog.csdn.net/u012322710/article/details/52860747 Best HTTP (Pro)  这是一款很多公司都在用的网页插件,感觉确实不错,分P ...

  10. Root用户让其他用户运行某程序

    这里以启动tomcat为例 1.安装tomcat不介绍了,自己百度 2.测试能否使用,略 3.创建tomcat用户 useradd tomcat -s /sbin/nologin 创建tomcat,禁 ...