php mongodb 集群,Mongodb集群

1) 集群中有三个角色,一个主两个从

2a95d7265a9d3ea96cf5ccbd7b32fa3a.png

2) 还可以增加一个角色arbiter(仲裁),它只负责仲裁,不会存储任何数据

b9fa06509e5cd69b31a34fa1e8d53522.png

3) 坏掉主后,其中一个从会接管主的角色

4f768e45eca905af105ff07aa62f0eed.png

三台机器:

192.168.184.5(primary)  192.168.184.5

172.7.15.112(secondary)    192.168.184.11

172.7.15.101(secondary)    192.168.184.14

编辑三台机器的配置文件,增加:

replication:

##oplog大小

oplogSizeMB: 20 【mysql binlog】

##复制集名称

replSetName: aminglinux

[注意:]bind_ip :留为空,不然在config的时候会出现:

"errmsg" : "No host described in new configuration 1 for replica set aminglinux maps to this node",

的错误。

分别重启后,连接primary机器

mongo

>use admin

>config={_id:"chengyuegroup",members:[{_id:0,host:"192.168.184.5:27017"},{_id:1,host:"192.168.184.11:27017"},{_id:2,host:"192.168.184.14:27017"}]}

>rs.initiate(config)

>rs.add("192.168.184.11")

>rs.add("192.168.184.14")

查看状态:

>rs.status()

{

"set" : "aminglinux",

"date" : ISODate("2015-10-19T06:32:09.200Z"),

"myState" : 1,

"members" : [

{

"_id" : 0,

"name" : "localhost.localdomain:27017",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 1381,

"optime" : Timestamp(1445235074, 1),

"optimeDate" : ISODate("2015-10-19T06:11:14Z"),

"electionTime" : Timestamp(1445234949, 1),

"electionDate" : ISODate("2015-10-19T06:09:09Z"),

"configVersion" : 3,

"self" : true

},

{

"_id" : 1,

"name" : "172.7.15.112:27017",

"health" : 1,

"state" : 0,

"stateStr" : "STARTUP",

"uptime" : 1268,

"optime" : Timestamp(0, 0),

"optimeDate" : ISODate("1970-01-01T00:00:00Z"),

"lastHeartbeat" : ISODate("2015-10-19T06:32:07.764Z"),

"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),

"pingMs" : 1,

"configVersion" : -2

},

{

"_id" : 2,

"name" : "172.7.15.101:27017",

"health" : 1,

"state" : 0,

"stateStr" : "STARTUP",

"uptime" : 1255,

"optime" : Timestamp(0, 0),

"optimeDate" : ISODate("1970-01-01T00:00:00Z"),

"lastHeartbeat" : ISODate("2015-10-19T06:32:07.930Z"),

"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),

"pingMs" : 1,

"configVersion" : -2

}

],

"ok" : 1

}

或者使用命令:rs.config();

这个状态是不对的,正常从节点上应该是SECONDARY,而不是STARTUP

解决该问题,需要在主节点执行

> var config={_id:"aminglinux",members:[{_id:0,host:"172.7.15.111:27017"},{_id:1,host:"172.7.15.112:27017"},{_id:2,host:"172.7.15.101:27017"}]}

>rs.reconfig(config)

再次执行

>rs.status()

发现状态好了

测试:

主上建库,建集合

>use mydb

>db.acc.insert({AccountID:1,UserName:"123",password:"123456"})

>show tables

从上测试

首先要:

>rs.slaveOk();

【注意:】如果没有rs.slaveOK(); 执行

shwo dbs的时候,会出现:

Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }

>show dbs    //也出现mydb库了。

更改primary和secondary的权重,会引起主从切换

cfg = rs.conf()

cfg.members[0].priority = 1

cfg.members[1].priority = 2

cfg.members[2].priority = 1

rs.reconfig(cfg)

这样第二个机器会自动切换到主,权重最高的机器会担任主角色。

在生成环境中,我们需要找一个从节点作为自动切换节点,当主节点宕机后,它会自动接管主的服务,成为主节点,当主恢复后还会自动切换回原来的身份。所以,我们应该这样配置:

【注意:】执行下面的配置的时候,必须要在主节点上执行:

不然会出现:

"errmsg" : "replSetReconfig should only be run on PRIMARY, but my state is SECONDARY; use the \"force\" argument to override",

cfg = rs.conf()

cfg.members[0].priority = 3

cfg.members[1].priority = 2

cfg.members[2].priority = 1

rs.reconfig(cfg)这样的话,第二个节点将会成为候选主节点。

候选主节点,当主节点恢复以后,主会自动恢复当候选主节点为主的时候写入的数据。也就是说和其他

的节点的数据保持同步。

测试:

2718d3efe05549ac6469e75435dfb05f.png

本机上连接不上mongodb ,在从上,就会出现:

6d1a47c1560648fd9629ab3dbc0372fe.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值