Mongodb集群

1) 集群中有三个角色,一个主两个从
180416_ROCz_613887.png
  
2) 还可以增加一个角色arbiter(仲裁),它只负责仲裁,不会存储任何数据
180438_AIvh_613887.png

  
3) 坏掉主后,其中一个从会接管主的角色
180447_jHHj_613887.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)这样的话,第二个节点将会成为候选主节点。

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

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

转载于:https://my.oschina.net/linuxphp/blog/713989

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值