mongodb replica sets搭建及使用
来源:互联网 发布:广电网络电视没有信号 编辑:程序博客网 时间:2024/04/28 02:07
由于机器紧张,没办法搞分片(sharding),而只是用了复制集这个功能,一下介绍下自己这几天的实验。
环境:
目录结构
mongo_data
|--conf
|--config.js
|--rs0.cnf
|--rs1.cnf
|--rs2.cnf
|--data
|--r0
|--r1
|--r2
|--key
|--r0
|--r1
|--r2
|--log
|--r0.log
|--r1.log
|--r2.log
|--run
|--run_config.sh
|--run_rs0.sh
|--run_rs1.sh
|--run_rs2.sh
举几个文件,其他类似:
rs0.cnf:
replSet=rs1keyFile=/home/madding/output/mongodb/replica_set/key/r0dbpath=/home/madding/output/mongodb/replica_set/data/r0logpath=/home/madding/output/mongodb/replica_set/log/r0.logport=10240
config.js:
var config_rs1={ _id:'rs1', members:[ {_id:0, host:'127.0.0.1:10240', priority:1}, {_id:1, host:'127.0.0.1:11240'}, {_id:2, host:'127.0.0.1:12240'}]}rs.initiate(config_rs1);rs.slaveOk();printjson('status info:');printjson(rs.status());printjson('result info: ');printjson(rs.isMaster());
r0:
ANKDIUOJHKJDLKFJHDOUDOJFKLDJ
随便复杂,保证r0,r1,r2一致即可
run_config.sh:
!/bin/bashMONGODB_HOME=/usr/mytools/mongodb$MONGODB_HOME/bin/mongo ../conf/config.js --port 10240 --quietexit
run_rs0.sh:
#!/bin/bashMONGODB_HOME=/usr/mytools/mongodb$MONGODB_HOME/bin/mongod -f ../conf/rs0.cnf --logappend --forkexit
运行顺序:
1.分别启动run_rs0.sh,run_rs1.sh,run_rs2.sh,ps看下进程是否都启动成功
2.运行run_config.sh,如果信息显示正常,说明已经建立成功。
测试场景:
1.kill r0进程:
mongo客户端:
自动切换primary;
r0客户端可查询,不可插入;
java驱动:
采用集群连接,发现可正常查询,插入,业务不受影响
说明:如果是kill -9方式,可能会导致mongo对应实例下的lock文件还在,删除掉后才能重启,要不然会重启失败
2.恢复r0进程:
r0 mongod数据同步
r0没有切换为primary ,主从维持在kill时的水平
3.当两个mongod实例(包括SECONDARY和PRIMARY组合)挂掉,是否可对外提供服务:
mongo客户端:指定端口的可以连接,但是由于两个挂了导致没办法把SECONDARY切换到PRIMARY,只能查询不能修改
java驱动:根据现象提示
Exception in thread "main" com.mongodb.MongoException: can't find a masterat com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:436)at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:211)at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305)at com.mongodb.DBCursor._check(DBCursor.java:369)at com.mongodb.DBCursor._hasNext(DBCursor.java:504)at com.mongodb.DBCursor.hasNext(DBCursor.java:529)at ReplicaSets.main(ReplicaSets.java:57)也就是此时没办法对外提供服务,虽然还有一个SECONDARY存活
注:如果最后一个保留下来的是PRIMARY,虽然短暂提供服务,但是一会儿后就自动切换为SECONDARY。
4.当两个实例挂掉,重启一个实例,是否可对外提供服务:
mongo客户端:此时自动切换一台为PRIMARY,查询操作正常
java驱动:只要设置自动重连,等待几秒即可恢复正常
注:发现在一台机器中操作,过程中出现一个实例把两一个socket端口占用现象,主要是因为web监控的端口,1000间隔。
建议启动是先启动初始的PRIMARY最后启动
5.两个mongo实例是否可构建replica sets:
基于以上分析,虽然两个能构建复制集,但是由于一个挂掉,另一个自动切换为SECONDARY,做不到热备,因此没有价值。
6.三台同时挂掉,重启是否正常:
三台挂掉,重启后,会出现其中一台recovering,但是之后三台状态就能恢复正常,一个primary,两个secondary
date: 2012.02.09
- mongodb replica sets搭建及使用
- 第十章:MongoDB Replica Sets + Sharding搭建
- mongodb replica sets功能
- Mongodb Replica Sets部署
- MongoDB Replica Sets
- MongoDB Replica Sets
- MongoDB Replica Sets管理
- [置顶] mongodb Replica Sets +Sharding高可用集群搭建
- 第六章:MongoDB Replica Sets复制集的搭建
- 采用Replica Sets + Sharding方式搭建MongoDB高可用集群
- mongodb replica sets(复制集)配置与搭建
- mongodb Replica Sets +Sharding高可用集群搭建(含认证)
- Foursquare:使用MongoDB Replica Sets的三种架构
- mongodb的读写分离使用Replica Sets来实现
- MongoDB Replica Sets (复制集)
- MongoDB之Replica Sets + Sharding
- Centos配置MongoDb replica sets
- mongodb集群(Shard+Replica Sets)
- 進階AlertView運用 - 登入設計
- jQuery模拟新窗口打开 轻松使用javascript创建新窗口
- 堆和栈的区别
- list中Created By(author)字段用法
- Android telephony MMS 学习笔记
- mongodb replica sets搭建及使用
- MPEG编码基础知识(一)
- GDB 结合Core File巧妙分析Crash原因
- 指针的使用心得
- KMP
- Rails的富文本编辑器插件fckeditorp
- MAXIMO中,在代码中打开和关闭DIALOG对话框
- android 短信的接收和发送处理
- 一个电脑**和黑客的对话