zoukankan      html  css  js  c++  java
  • 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数据库为备份点


     

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

     

    小结:


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

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

     

  • 相关阅读:
    1104 Sum of Number Segments (20 分)(数学问题)
    1092 To Buy or Not to Buy (20 分)(hash散列)
    1082 Read Number in Chinese (25 分)(字符串处理)【背】
    1105 Spiral Matrix (25 分)(模拟)
    初识网络安全及搭建网站(内网)
    HTML5开发者需要了解的技巧和工具汇总(转)
    native+web开发模式之web前端经验分享
    移动平台3G手机网站前端开发布局技巧汇总(转)
    Asp.net 中图片存储数据库以及页面读取显示通用方法详解附源码下载
    使用H3Viewer来查看VS2010的帮助文档
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6927122.html
Copyright © 2011-2022 走看看