现在的位置: 首页 > 综合 > 正文

MongoDB学习整理之Replica Sets安装

2013年09月01日 ⁄ 综合 ⁄ 共 5908字 ⁄ 字号 评论关闭

准备:        

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

 

抱歉!评论已关闭.