• Mongodb集群之副本集


    上篇咱们遗留了几个问题

    1主节点是否能自己主动切换连接?

    眼下须要手动切换

    2主节点读写压力过大怎样解决

    3从节点每一个上面的数据都是对数据库全量拷贝,从节点压力会不会过大

    4数据压力达到机器支撑不了时候是否能自己主动扩展?


    Nosql的产生是为了解决大数据量。高扩展,高性能,灵活数据模型。高可用性。可是光通过主从模型的架构是远远达不到上面几点的。因此。mongodb设计了副本集和分片的功能。咱们以下就来说说副本集

    mongodb官方已经不建议使用主从模式,而是副本集进行取代。

    IMPORTANT

    Replica sets replace master-slave replication for most use cases. If possible, use replicasets rather than master-slave replication for all new production deployments.This documentation remains to support legacy deployments and for archivalpurposes only.

    来自 <http://docs.mongodb.org/master/core/master-slave/>

     

    什么是副本集


       副本集合(ReplicaSets)。是一个基于主/从复制机制的复制功能。但添加了自己主动故障转移和恢复特性。一个集群最多能够支持7个server。而且随意节点都能够是主节点。

    全部的写操作都被分发到主节点。而读操作能够在不论什么节点上进行。

     

     

     


     

    从图中能够发现,client连接到整个副本集,不关系详细哪一台server是否宕机。主server负责整个副本集的读写。

    副本集定期同步数据。一旦主节点挂了。副本节点就会选举一个新主机作为主节点。

    坏掉的节点修好后会自己主动扩充为副本节点。


    怎样配置副本集

      在一台机器上创建三个文件用户存放三台数据库,之后分别配置三台数据库,使他们的replset(复制集分别形成闭环)配置启动数据库。

     

    配置启动參数



    启动配置文件

    mongoA.bat
    mongod --configa.conf
    mongoB.bat
    mongod --configb.conf
    mongodbC.bat
    Mongod--config c.conf

     

    登录数据库

    ashell.bat
    mongo 127.0.0.1:9000
    b.shell.bat
    mongo 127.0.0.1:9001
    c.shell.bat
    mongo 127.0.0.1:9002

    初始化副本集

     

    在三台机器上随意登陆一台机器输入例如以下命名回车

     

    use admin
    db.runCommand({"replSetInitiate":{	
    	"_id":'child',
    	"members":[
    	{"_id":1,"host":"127.0.0.1:9000"},
    	{"_id":2,"host":"127.0.0.1:9001"},
    	{"_id":3,"host":"127.0.0.1:9002",},
    	]
    		}	
    })
    


    查看集群状态

    child:SECONDARY> rs.status()
    {
            "set" : "child",
            "date" : ISODate("2015-08-16T07:43:36Z"),
            "myState" : 2,
            "syncingTo" : "127.0.0.1:9002",
            "members" : [
                    {
                            "_id" : 1,
                            "name" : "127.0.0.1:9000",
                            "health" : 1,
                            "state" : 2,
                            "stateStr" : "SECONDARY",
                            "uptime" : 182,
                            "optime" : Timestamp(1439170908, 1),
                            "optimeDate" : ISODate("2015-08-10T01:41:48Z"),
                            "infoMessage" : "syncing to: 127.0.0.1:9002",
                            "self" : true
                    },
                    {
                            "_id" : 2,
                            "name" : "127.0.0.1:9001",
                            "health" : 1,
                            "state" : 2,
                            "stateStr" : "SECONDARY",
                            "uptime" : 7,
                            "optime" : Timestamp(1439170908, 1),
                            "optimeDate" : ISODate("2015-08-10T01:41:48Z"),
                            "lastHeartbeat" : ISODate("2015-08-16T07:43:36Z"),
                            "lastHeartbeatRecv" : ISODate("2015-08-16T07:43:35Z"),
                            "pingMs" : 2,
                            "lastHeartbeatMessage" : "syncing to: 127.0.0.1:9002",
                            "syncingTo" : "127.0.0.1:9002"
                    },
                    {
                            "_id" : 3,
                            "name" : "127.0.0.1:9002",
                            "health" : 1,
                            "state" : 1,
                            "stateStr" : "PRIMARY",
                            "uptime" : 8,
                            "optime" : Timestamp(1439170908, 1),
                            "optimeDate" : ISODate("2015-08-10T01:41:48Z"),
                            "lastHeartbeat" : ISODate("2015-08-16T07:43:35Z"),
                            "lastHeartbeatRecv" : ISODate("2015-08-16T07:43:36Z"),
                            "pingMs" : 772,
                            "electionTime" : Timestamp(1439711010, 1),
                            "electionDate" : ISODate("2015-08-16T07:43:30Z")
                    }
            ],
            "ok" : 1
    
    }

    整个部分创建成功

     

    副本集数据库測试

     

       启动三个数据库查看仅仅有一个活跃节点其它为副本节点

     

     

    停掉活跃点,我们查看活跃点

    child:PRIMARY>show dbs

    2015-08-16T15:51:21.667+0800Socket recv() errno:10053你的主机中的软件中止了一

    个已建立的连接。127.0.0.1:9002

    2015-08-16T15:51:21.669+0800SocketException: remote: 127.0.0.1:9002 error: 9001

     

    再次连接数据库发现 活跃点已转移到 9000port


     

    再将9002数据库开启

    查看状态 9002数据库为备份点


     

    以上说明我们的副本集已经搭建完毕

     

    小结:


       副本集解攻克了我们的故障转义功能。可是我们还是有一些问题 。从节点每一个上面的数据都是对数据库全量拷贝。从节点压力会不会过大?

    数据压力大到机器支撑不了的时候是否能做到自己主动扩展?

     

  • 相关阅读:
    人月神教α阶段冲刺报告(6/12)
    人月神教α阶段冲刺报告(5/12)
    人月神教-α阶段冲刺报告(4/12)
    人月神教-α阶段冲刺报告(3/12)
    结对作业2
    结对作业1
    软工实践作业1
    Matrix Power Series(POJ 3233)
    Blocks(POJ 3734)
    Traveling by Stagecoach(POJ 2686)
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6927122.html
Copyright © 2020-2023  润新知