您的位置:首页 > 数据库 > Mongodb

MongoDB学习整理之Replica Sets安装

2012-06-12 22:38 555 查看
准备:



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、查看复制集状态,分析复制集的各项运行指标,如图所示:





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()



configured oplog size:配置的oplog文件大小

log length start to end:oplog日志的启用时间段

oplog first event time:第一个事务日志产生时间

oplog last event time:最后一个事务日志产生时间

now:现在的时间

查看复制集的同步状态:



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)查看复制集状态,状态就切换了,如下显示:



2、读写分离测试:根据性能进行分配到不同的机器,然后进行快速的数据同步

1)先向主库插入一条测试数据,代码如下:



2)在从库里是不让查看的,如图所示:



3)让从库可以读,以分担主库的压力



3、故障转移测试

1)杀掉28010端口的Mongodb进程,如下图所示:



2)查看复制集的状态



3)继续服务:



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、使用新节点查询数据,如图:



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集合插入一个新记录,如下:



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、验证数据已经同步。查看是否一个记录从物理文件同步过来的,一条是从操作日志同步过来的,如下所示:



5、减少节点是减少成本,减少节点很简单,只需调用rs.remove()就行,比如:我们要移除28013和28014,操作如下:

PRIMARY> rs.remove("localhost:28013")

PRIMARY> rs.remove("localhost:28014")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: