mongodb副本集

一、节点类型
standard:常规节点,它存储一份完整的数据副本,参与选举投票,有可能成为活跃节点。
 
passive:存储了完整的数据副本,参与投票,不能成为活跃节点。
arbiter:仲裁节点,只参与投票,不接收复制的数据,也不能成为活跃节点。
二、主从复制的集群还是有两点区别的。

      <1>:  该集群没有特定的主数据库。

      <2>:  如果哪个主数据库宕机了,集群中就会推选出一个从属数据库作为主数据库顶上,这就具备了自动故障恢复功能

注:
1、不需要像mysql一样复制完整数据过去,丛库启动会制动复制主库完整数据。
2、丛库自动配置为只读。
3、mongodb第一次启动时间较长,需要注意等待。
4、管理命令多数都要在admin库中执行use admin

三、创建副本集

  

1. 环境说明: 
     ip:192.168.1.228  (初始计划设定其为master)
     ip:192.168.1.227 (初始计划设定其为slave)
     ip:192.168.1.229 (初始计划设定其为arbiter ,即仲裁服务器)
 2. 为副本集取名weijh
    配置229启动文件:   
dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.228

配置228启动文件:
dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.229

配置227启动文件:
dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.228

配置结束后,重启服务
 
3、 在浏览器打开链接
看到我们需要初始化节点
 
4、初始化节点
 
我们连接到其中一个节点上,并使用replSetInitiate命令进行初始化。此命令需要一个配置对象,指定设定的每个成员的名字。
在228节点上进行初始化(随便连接一下哪个服务器都行,不过一定要进入admin集合)
1)执行命令:
   出现错误:
2)清除数据库下所有新创建的数据库信息
3)再次执行命令
 
5、查看状态:
浏览器主节点查看:
 
09:57:02 [ReplSetHealthPollTask] replSet info 192.168.1.229:27017 is up
           09:57:02 [ReplSetHealthPollTask] replSet member 192.168.1.229:27017 STARTUP2
           09:57:02 [rs Manager] replSet info electSelf 1
           09:57:02 [rs Manager] replSet PRIMARY
           09:57:04 [initandlisten] connection accepted from 192.168.1.229:46257 #7
           09:57:04 [initandlisten] connection accepted from 192.168.1.229:46258 #8
           09:57:04 [conn8] end connection 192.168.1.229:46258
           09:57:04 [initandlisten] connection accepted from 192.168.1.229:46259 #9
           09:57:04 [conn9] end connection 192.168.1.229:46259
           09:57:04 [ReplSetHealthPollTask] replSet member 192.168.1.229:27017 RECOVERING
           09:57:04 [conn7] end connection 192.168.1.229:46257
           09:57:05 [initandlisten] connection accepted from 192.168.1.229:46260 #10
           09:57:06 [ReplSetHealthPollTask] replSet member 192.168.1.229:27017 SECONDARY
           09:57:06 [slaveTracking] building new index on { _id: 1 } for local.slaves

浏览器从节点关键信息查看:
09:57:03 [ReplSetHealthPollTask] replSet member 192.168.1.228:27017 PRIMARY
           09:57:04 [replica set sync] ******
           09:57:04 [replica set sync] replSet initial sync pending
           09:57:04 [replica set sync] replSet syncing to: 192.168.1.228:27017
           09:57:04 [replica set sync] building new index on { _id: 1 } for local.me
           09:57:04 [dur] lsn set 139505
           09:57:04 [replica set sync] done for 0 records 0.045secs
           09:57:04 [replica set sync] replSet initial sync drop all databases
           09:57:04 [replica set sync] dropAllDatabasesExceptLocal 1
           09:57:04 [replica set sync] replSet initial sync clone all databases
           09:57:04 [replica set sync] replSet initial sync cloning db: admin
           09:57:04 [replica set sync] replauthenticate: no user in local.system.users to use for authentication
replSet initial sync query minValid
           09:57:04 [replica set sync] replSet initial sync initial oplog application
           09:57:04 [replica set sync] replSet initial sync finishing up
           09:57:04 [replica set sync] replSet set minValid=52575ae3:1
           09:57:04 [replica set sync] building new index on { _id: 1 } for local.replset.minvalid
           09:57:04 [replica set sync] done for 0 records 0secs
           09:57:04 [replica set sync] replSet initial sync done
           09:57:05 [replica set sync] replSet SECONDARY

   
rs.status()
6、添加仲裁节点
   我们在admin集合中使用rs.addArb()追加即可
  
rs.addArb("192.168.1.227")
查看状态:
该仲裁节点不参与数据的复制,只是参与投票选择主节点而已
在该节点为not reachable/healthy的状态下是起不到投票主节点的作用的。删除227服务琪上的db文件,重启
查看状态:
添加仲裁节点成功
 
7、在主节点添加数据:
 
从节点查看数据信息
 
在从节点228上可以同步到主节点的数据信息,但无法查看
 
8、228主几点宕掉,查看229状态
    
可以看到229 从secondary变味primary了
 
9、启动228,但是228不再为primary了,而为secondary了
 
10、首先这是正常的,因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。对于replica set 中的secondary 节点默认是不可读的:
weijh:SECONDARY> use testCp
switched to db testCp
weijh:SECONDARY> show collections
Fri Oct 11 10:09:36 uncaught exception: error: { "$err" : "not master and slaveok=false", "code" : 13435 }
若需要SECONDARY可以执行读的操作,在SECONDARY执行slaveok方法
weijh:SECONDARY> db.getMongo()
connection to 127.0.0.1
weijh:SECONDARY> db.getMongo().setSlaveOk()
not master and slaveok=false

执行查询操作测试:

 
参考资料网页:
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值