MongoDB复制集简单操作

来源:互联网 发布:易语言验证码识别源码 编辑:程序博客网 时间:2024/06/05 20:58


一、MongoDB复制集介绍

1、如下图所示有一个数据库集群,集群中有三台数据库服务器,一台活跃服务器和两台备份服务器。当活跃服务器A发生故障时,会根据权重算法从备份服务器B和C中选出B作为新的活跃服务器,而当A恢复时当成备份服务器,继续加入到整个数据库集群中工作,这就是MongoDB的副本集。

2、配置一个副本集

2.1 在npfdev1,npfdev2,npfdev3三台机器上的mongodb.conf增加配置:

replSet=kgpcReplSet, 指定了复制集的名称. 为了使用方便,我们暂时不要使用auth启动,去掉auth参数。

2.2 启动MongoDB,使用 service mongod start 命令.

2.3 然后就需要初始化复制集。进入到这三台数据库服务器中任何一个的admin数据库,执行如下图的操作来初始化复制集:这里没有设置这三台服务器的权重,MonggoDB推选活跃服务器的策略是随机的。

2.3.1 那么使用命令mongo npfdev1:27017/admin

2.3.2 初始化复制集, 运行如下命令:

db.runCommand({"replSetInitiate":{    "_id":"kgpcReplSet",    "members":[        {"_id":1,"host":"npfdev1:27017"},        {"_id":2,"host":"npfdev2:27017"},        {"_id":3,"host":"npfdev3:27017"}    ]}});

 

2.3.4 分别进入到这三台服务器的shell界面.可以发现npfdev1的服务器被推选成了活跃服务器,而其它两台就是备份服务器.

2.3.5 在活跃服务器shell中可以使用“rs.status()”来查看副本集的状态。

kgpcReplSet:PRIMARY> rs.status();{    "set" : "kgpcReplSet",    "date" : ISODate("2017-05-05T13:05:29.158Z"),    "myState" : 1,    "term" : NumberLong(1),    "heartbeatIntervalMillis" : NumberLong(2000),    "members" : [        {            "_id" : 1,            "name" : "npfdev1:27017",            "health" : 1,            "state" : 1,            "stateStr" : "PRIMARY",            "uptime" : 268,            "optime" : {                "ts" : Timestamp(1493989299, 1),                "t" : NumberLong(1)            },            "optimeDate" : ISODate("2017-05-05T13:01:39Z"),            "electionTime" : Timestamp(1493989298, 1),            "electionDate" : ISODate("2017-05-05T13:01:38Z"),            "configVersion" : 1,            "self" : true        },        {            "_id" : 2,            "name" : "npfdev2:27017",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",            "uptime" : 240,            "optime" : {                "ts" : Timestamp(1493989299, 1),                "t" : NumberLong(1)            },            "optimeDate" : ISODate("2017-05-05T13:01:39Z"),            "lastHeartbeat" : ISODate("2017-05-05T13:05:28.555Z"),            "lastHeartbeatRecv" : ISODate("2017-05-05T13:05:28.549Z"),            "pingMs" : NumberLong(1),            "syncingTo" : "npfdev1:27017",            "configVersion" : 1        },        {            "_id" : 3,            "name" : "npfdev3:27017",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",            "uptime" : 240,            "optime" : {                "ts" : Timestamp(1493989299, 1),                "t" : NumberLong(1)            },            "optimeDate" : ISODate("2017-05-05T13:01:39Z"),            "lastHeartbeat" : ISODate("2017-05-05T13:05:28.557Z"),            "lastHeartbeatRecv" : ISODate("2017-05-05T13:05:28.554Z"),            "pingMs" : NumberLong(0),            "syncingTo" : "npfdev1:27017",            "configVersion" : 1        }    ],    "ok" : 1}kgpcReplSet:PRIMARY> 

2.3.6 复制集如下图:

 

复制集使用的异步同步方式,复制集成员之间每隔2s发送一次hearbeat(pings).当主节点与其它成员通信超时10s后,一个secondary节点将会被选举为primary节点.在新的版本中,如果存在多个secondary节点,当第一个节点被选举为primary后,其它的secondary节点将从它开始复制数据.

2.3.7 读写分离操作,注意:默认情况下非活跃服务器(SECONDARY)是不能进行数据库读操作的。如下图:

如果要设置SECONDARY节点也可以进行读操作,那么可以设置slaveOk参数为true。但是此属性在shell中无法完成,这个特性是被写到MongoDB的高级驱动程序中的。

 

参考文献

1. MongoDB 学习笔记(七):主从复制与副本集

2. mongodb-创建复制集(replSet)

原创粉丝点击