MongoDB学习整理之Replica Sets安装
2012-06-12 22:38
555 查看
准备:
![](http://my.csdn.net/uploads/201206/25/1340630103_1596.png)
1、创建数据文件、日志路径目录及复制集key文件
mkdir -p /app/mongo/mongodb/data/sets/r0
mkdir -p /app/mongo/mongodb/data/sets/r1
mkdir -p /app/mongo/mongodb/data/sets/r2
mkdir -p /app/mongo/mongodb/data/sets/key/
mkdir -p /app/mongo/mongodb/data/sets/log/
echo "test sets" > /app/mongo/mongodb/data/sets/key/r0
echo "test sets" > /app/mongo/mongodb/data/sets/key/r1
echo "test sets" > /app/mongo/mongodb/data/sets/key/r2
chmod 600 /app/mongo/mongodb/data/sets/key/r*
2、启动3个mongodb实例模拟3个节点服务器:
/app/mongo/mongodb/bin/mongod --replSet rs1 --keyFile /app/mongo/mongodb/data/sets/key/r0 --port 28010 --dbpath=/app/mongo/mongodb/data/sets/r0 --logpath=/app/mongo/mongodb/data/sets/log/r0.log --logappend --fork
/app/mongo/mongodb/bin/mongod --replSet rs1 --keyFile /app/mongo/mongodb/data/sets/key/r1 --port 28011 --dbpath=/app/mongo/mongodb/data/sets/r1 --logpath=/app/mongo/mongodb/data/sets/log/r2.log --logappend --fork
/app/mongo/mongodb/bin/mongod --replSet rs1 --keyFile /app/mongo/mongodb/data/sets/key/r2 --port 28012 --dbpath=/app/mongo/mongodb/data/sets/r2 --logpath=/app/mongo/mongodb/data/sets/log/r3.log --logappend --fork
3、初始化Replica Sets环境
[mongodb@ST03SN01 mongo]$ /app/mongo/mongodb/bin/mongo -port 28010 //连接
>config_rs={_id:'rs1',members:[{_id:0,host:'localhost:28010'},{_id:1,host:'localhost:28011'},{_id:2,host:'localhost:28012'}]}
>rs.initiate(config_rs);
4、查看复制集状态,分析复制集的各项运行指标,如图所示:
![](http://my.csdn.net/uploads/201206/12/1339511979_4216.png)
![](http://my.csdn.net/uploads/201206/12/1339512035_8311.png)
ok,安装Replica Sets就成功了!下面我们在了解一下有关Replica Sets管理信息:
主从操作日志:
通过一个primary数据库的日志表来存储写操作,日志表oplog.rs,固定Capped Collection,位于local数据库,可以通过启动参数oplogSize改变
PRIMARY> db.oplog.rs.find()
{ "ts" : { "t" : 1339511556000, "i" : 1 }, "h" : NumberLong(0), "op" : "n", "ns" : "", "o" : { "msg" : "initiating set" } }
PRIMARY> db.printReplicationInfo()
![](http://img.my.csdn.net/uploads/201206/25/1340596431_5566.png)
configured oplog size:配置的oplog文件大小
log length start to end:oplog日志的启用时间段
oplog first event time:第一个事务日志产生时间
oplog last event time:最后一个事务日志产生时间
now:现在的时间
查看复制集的同步状态:
![](http://img.my.csdn.net/uploads/201206/25/1340596473_3472.png)
source:从库的IP及端口
syncedTo:目前同步情况及最后一次同步时间
主从配置信息:
在local库system.replset集合保存了所有Replica Sets的配置信息,如下:
PRIMARY> db.system.replset.find()
{ "_id" : "rs1", "version" : 1, "members" : [
{ "_id" : 0, "host" : "localhost:28010" },
{ "_id" : 1, "host" : "localhost:28011" },
{ "_id" : 2, "host" : "localhost:28012" } ]
}
管理Replica Sets
1、主从切换测试:
环境:
端口 当前成员角色 目标成员角色
28010 主 从
28011 从 从
28012 从 主
1)除了现在的主实例(端口28010)和目标主实例(端口28012)以外,其他实例全部为“冰冻”状态(即非主状态),代码如下:
[mongodb@ST03SN01 mongo]$ /app/mongo/mongodb/bin/mongo -port 28011
SECONDARY> rs.fressze(30) --代表30秒内不参加内部选举工作
2)将当前主库的实例“降级”(stepDown),代码如下:
[mongodb@ST03SN01 mongo]$ /app/mongo/mongodb/bin/mongo -port 28010
rs.stepDown(30) ---30秒内这个实例不会把自己选为primary角色
3)查看复制集状态,状态就切换了,如下显示:
![](http://img.my.csdn.net/uploads/201206/25/1340596763_9905.png)
2、读写分离测试:根据性能进行分配到不同的机器,然后进行快速的数据同步
1)先向主库插入一条测试数据,代码如下:
![](http://img.my.csdn.net/uploads/201206/25/1340598421_7532.png)
2)在从库里是不让查看的,如图所示:
![](http://img.my.csdn.net/uploads/201206/25/1340598493_5886.png)
3)让从库可以读,以分担主库的压力
![](http://img.my.csdn.net/uploads/201206/25/1340598556_4764.png)
3、故障转移测试
1)杀掉28010端口的Mongodb进程,如下图所示:
![](http://img.my.csdn.net/uploads/201206/25/1340598713_2889.png)
2)查看复制集的状态
![](http://img.my.csdn.net/uploads/201206/25/1340598787_7693.png)
3)继续服务:
![](http://img.my.csdn.net/uploads/201206/25/1340598842_5379.png)
4、增加节点,Mongodb提供了两种方法添加节点:一种是通过oplog增加节点,另一种通过数据库快照和oplog添加节点
1)通过oplog增加节点:数据同步完全依赖于oplog,即oplog中有多少操作日志,都需要在新节点执行一遍,以达到数据同步,优点操作简单且无需人工干预,但是oplog是Capped collection,所以会导致数据不全和不一致
a、启动一个新节点
mkdir -p /app/mongo/mongodb/data/sets/r3
echo "test sets" > /app/mongo/mongodb/data/sets/key/r3
chmod 600 /app/mongo/mongodb/data/sets/key/r3
/app/mongo/mongodb/bin/mongod --replSet rs1 --keyFile /app/mongo/mongodb/data/sets/key/r3 --port 28013 --dbpath=/app/mongo/mongodb/data/sets/r3 --logpath=/app/mongo/mongodb/data/sets/log/r3.log --logappend --fork
b、添加新节点到现有Replica Set是中,如:
rs.add("localhost:28013")
c、查看复制状态,可以看到新节点,但状态为不可用,因为还为数据同步
d、执行数据同步(自动)
e、使用新节点查询数据,如图:
![](http://img.my.csdn.net/uploads/201206/25/1340598917_4131.png)
2)通过数据库快照和oplog增加节点:取某一个复制集成员的物理文件作为初始化数据,剩余的部分用oplog日志来补充,达到数据一致性,步骤如下:
a、取某一个复制集成员的物理文件作为初始化数据,操作如下:
scp -r /app/mongo/mongodb/data/sets/r3 /app/mongo/mongodb/data/sets/r4
echo "test Sets" > /app/mongo/mongodb/data/sets/key/r4
chmod 600 /app/mongo/mongodb/data/sets/key/r4
b、为了验证用oplog日志来补充数据,我们在主库c1集合插入一个新记录,如下:
![](http://img.my.csdn.net/uploads/201206/25/1340599005_7726.png)
c、启动28014端口给新的节点,如下所示:
/app/mongo/mongodb/bin/mongod --replSet rs1 --keyFile /app/mongo/mongodb/data/sets/key/r4 --port 28014 --dbpath=/app/mongo/mongodb/data/sets/r4 --logpath=/app/mongo/mongodb/data/sets/log/r4.log --logappend --fork
d、添加28014节点到现有的复制集中,如下所示:
PRIMARY> rs.add("localhost:28014")
{ "ok" : 1 }
PRIMARY>
e、验证数据已经同步。查看是否一个记录从物理文件同步过来的,一条是从操作日志同步过来的,如下所示:
![](http://img.my.csdn.net/uploads/201206/25/1340599005_6592.png)
5、减少节点是减少成本,减少节点很简单,只需调用rs.remove()就行,比如:我们要移除28013和28014,操作如下:
PRIMARY> rs.remove("localhost:28013")
PRIMARY> rs.remove("localhost:28014")
![](http://my.csdn.net/uploads/201206/25/1340630103_1596.png)
1、创建数据文件、日志路径目录及复制集key文件
mkdir -p /app/mongo/mongodb/data/sets/r0
mkdir -p /app/mongo/mongodb/data/sets/r1
mkdir -p /app/mongo/mongodb/data/sets/r2
mkdir -p /app/mongo/mongodb/data/sets/key/
mkdir -p /app/mongo/mongodb/data/sets/log/
echo "test sets" > /app/mongo/mongodb/data/sets/key/r0
echo "test sets" > /app/mongo/mongodb/data/sets/key/r1
echo "test sets" > /app/mongo/mongodb/data/sets/key/r2
chmod 600 /app/mongo/mongodb/data/sets/key/r*
2、启动3个mongodb实例模拟3个节点服务器:
/app/mongo/mongodb/bin/mongod --replSet rs1 --keyFile /app/mongo/mongodb/data/sets/key/r0 --port 28010 --dbpath=/app/mongo/mongodb/data/sets/r0 --logpath=/app/mongo/mongodb/data/sets/log/r0.log --logappend --fork
/app/mongo/mongodb/bin/mongod --replSet rs1 --keyFile /app/mongo/mongodb/data/sets/key/r1 --port 28011 --dbpath=/app/mongo/mongodb/data/sets/r1 --logpath=/app/mongo/mongodb/data/sets/log/r2.log --logappend --fork
/app/mongo/mongodb/bin/mongod --replSet rs1 --keyFile /app/mongo/mongodb/data/sets/key/r2 --port 28012 --dbpath=/app/mongo/mongodb/data/sets/r2 --logpath=/app/mongo/mongodb/data/sets/log/r3.log --logappend --fork
3、初始化Replica Sets环境
[mongodb@ST03SN01 mongo]$ /app/mongo/mongodb/bin/mongo -port 28010 //连接
>config_rs={_id:'rs1',members:[{_id:0,host:'localhost:28010'},{_id:1,host:'localhost:28011'},{_id:2,host:'localhost:28012'}]}
>rs.initiate(config_rs);
4、查看复制集状态,分析复制集的各项运行指标,如图所示:
![](http://my.csdn.net/uploads/201206/12/1339511979_4216.png)
![](http://my.csdn.net/uploads/201206/12/1339512035_8311.png)
ok,安装Replica Sets就成功了!下面我们在了解一下有关Replica Sets管理信息:
主从操作日志:
通过一个primary数据库的日志表来存储写操作,日志表oplog.rs,固定Capped Collection,位于local数据库,可以通过启动参数oplogSize改变
PRIMARY> db.oplog.rs.find()
{ "ts" : { "t" : 1339511556000, "i" : 1 }, "h" : NumberLong(0), "op" : "n", "ns" : "", "o" : { "msg" : "initiating set" } }
PRIMARY> db.printReplicationInfo()
![](http://img.my.csdn.net/uploads/201206/25/1340596431_5566.png)
configured oplog size:配置的oplog文件大小
log length start to end:oplog日志的启用时间段
oplog first event time:第一个事务日志产生时间
oplog last event time:最后一个事务日志产生时间
now:现在的时间
查看复制集的同步状态:
![](http://img.my.csdn.net/uploads/201206/25/1340596473_3472.png)
source:从库的IP及端口
syncedTo:目前同步情况及最后一次同步时间
主从配置信息:
在local库system.replset集合保存了所有Replica Sets的配置信息,如下:
PRIMARY> db.system.replset.find()
{ "_id" : "rs1", "version" : 1, "members" : [
{ "_id" : 0, "host" : "localhost:28010" },
{ "_id" : 1, "host" : "localhost:28011" },
{ "_id" : 2, "host" : "localhost:28012" } ]
}
管理Replica Sets
1、主从切换测试:
环境:
端口 当前成员角色 目标成员角色
28010 主 从
28011 从 从
28012 从 主
1)除了现在的主实例(端口28010)和目标主实例(端口28012)以外,其他实例全部为“冰冻”状态(即非主状态),代码如下:
[mongodb@ST03SN01 mongo]$ /app/mongo/mongodb/bin/mongo -port 28011
SECONDARY> rs.fressze(30) --代表30秒内不参加内部选举工作
2)将当前主库的实例“降级”(stepDown),代码如下:
[mongodb@ST03SN01 mongo]$ /app/mongo/mongodb/bin/mongo -port 28010
rs.stepDown(30) ---30秒内这个实例不会把自己选为primary角色
3)查看复制集状态,状态就切换了,如下显示:
![](http://img.my.csdn.net/uploads/201206/25/1340596763_9905.png)
2、读写分离测试:根据性能进行分配到不同的机器,然后进行快速的数据同步
1)先向主库插入一条测试数据,代码如下:
![](http://img.my.csdn.net/uploads/201206/25/1340598421_7532.png)
2)在从库里是不让查看的,如图所示:
![](http://img.my.csdn.net/uploads/201206/25/1340598493_5886.png)
3)让从库可以读,以分担主库的压力
![](http://img.my.csdn.net/uploads/201206/25/1340598556_4764.png)
3、故障转移测试
1)杀掉28010端口的Mongodb进程,如下图所示:
![](http://img.my.csdn.net/uploads/201206/25/1340598713_2889.png)
2)查看复制集的状态
![](http://img.my.csdn.net/uploads/201206/25/1340598787_7693.png)
3)继续服务:
![](http://img.my.csdn.net/uploads/201206/25/1340598842_5379.png)
4、增加节点,Mongodb提供了两种方法添加节点:一种是通过oplog增加节点,另一种通过数据库快照和oplog添加节点
1)通过oplog增加节点:数据同步完全依赖于oplog,即oplog中有多少操作日志,都需要在新节点执行一遍,以达到数据同步,优点操作简单且无需人工干预,但是oplog是Capped collection,所以会导致数据不全和不一致
a、启动一个新节点
mkdir -p /app/mongo/mongodb/data/sets/r3
echo "test sets" > /app/mongo/mongodb/data/sets/key/r3
chmod 600 /app/mongo/mongodb/data/sets/key/r3
/app/mongo/mongodb/bin/mongod --replSet rs1 --keyFile /app/mongo/mongodb/data/sets/key/r3 --port 28013 --dbpath=/app/mongo/mongodb/data/sets/r3 --logpath=/app/mongo/mongodb/data/sets/log/r3.log --logappend --fork
b、添加新节点到现有Replica Set是中,如:
rs.add("localhost:28013")
c、查看复制状态,可以看到新节点,但状态为不可用,因为还为数据同步
d、执行数据同步(自动)
e、使用新节点查询数据,如图:
![](http://img.my.csdn.net/uploads/201206/25/1340598917_4131.png)
2)通过数据库快照和oplog增加节点:取某一个复制集成员的物理文件作为初始化数据,剩余的部分用oplog日志来补充,达到数据一致性,步骤如下:
a、取某一个复制集成员的物理文件作为初始化数据,操作如下:
scp -r /app/mongo/mongodb/data/sets/r3 /app/mongo/mongodb/data/sets/r4
echo "test Sets" > /app/mongo/mongodb/data/sets/key/r4
chmod 600 /app/mongo/mongodb/data/sets/key/r4
b、为了验证用oplog日志来补充数据,我们在主库c1集合插入一个新记录,如下:
![](http://img.my.csdn.net/uploads/201206/25/1340599005_7726.png)
c、启动28014端口给新的节点,如下所示:
/app/mongo/mongodb/bin/mongod --replSet rs1 --keyFile /app/mongo/mongodb/data/sets/key/r4 --port 28014 --dbpath=/app/mongo/mongodb/data/sets/r4 --logpath=/app/mongo/mongodb/data/sets/log/r4.log --logappend --fork
d、添加28014节点到现有的复制集中,如下所示:
PRIMARY> rs.add("localhost:28014")
{ "ok" : 1 }
PRIMARY>
e、验证数据已经同步。查看是否一个记录从物理文件同步过来的,一条是从操作日志同步过来的,如下所示:
![](http://img.my.csdn.net/uploads/201206/25/1340599005_6592.png)
5、减少节点是减少成本,减少节点很简单,只需调用rs.remove()就行,比如:我们要移除28013和28014,操作如下:
PRIMARY> rs.remove("localhost:28013")
PRIMARY> rs.remove("localhost:28014")
相关文章推荐
- MongoDB学习整理之Replica Sets + Sharding
- 《MongoDB权威指南》学习整理----MongoDB安装与监控
- mongoDb学习整理(一)--Mongodb安装
- 【Mongodb】 Sharding Replica Sets 分片集群生产环境安装与介绍!
- MongoDB学习之旅二十一:MongoDB Replica Sets
- MongoDB学习之旅三十:Replica Sets + Sharding
- MongoDB学习之旅二十四:MongoDB Replica Sets 增加节点
- MongoDB学习之旅二十五:MongoDB Replica Sets 减少节点
- 学习MongoDB(Troubleshoot Replica Sets) 集群排除故障
- MongoDB学习之旅二十三:管理维护 Replica Sets
- mongodb__replica sets__整理
- Wix学习整理(6)——安装快捷方式
- MongoDB学习笔记之-- MongoDB安装与配置(CentOS6.5)
- MongoDB 学习笔记一 CentOS下安装、使用、性能监测
- MongoDB学习一--在Linux下的yum安装和配置
- 学习--MongoDB服务的安装配置
- Mongodb的Replica Sets + Sharding Architect
- mongo学习笔记四:Mongodb的三种集群(Replica Set)
- 学习MongoDB(三) Add an Arbiter to Replica Set 集群中加入仲裁节点