2.33mongodb副本集介绍 早期版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主 目前已经淘汰master-slave模式,改为副本集,这种模式下有一个主(primary),和多个从(secondary),只读。支持给它们设置权重,当主宕掉后,权重最高的从切换为主 在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据 再此架构中读写数据都是在主上,要想实现负载均衡的目的需要手动指定读库的目标server
2.34mongodb副本集搭建
三台机器: 192.168.133.130(primary) 192.168.133.132(secondary) 192.168.133.133(secondary) 编辑三台机器的配置文件,更改或增加: replication://把此行前面的#删除 ##oplog大小 oplogSizeMB: 20//前面有两个空格 ##复制集名称 replSetName: aminglinux//前面有两个空格 分别重启三台机器
连接主,在主上运行命令mongo
use admin config={_id:"aminglinux",members:[{_id:0,host:"192.168.133.130:27017"},{_id:1,host:"192.168.133.132:27017"},{_id:2,host:"192.168.133.133:27017"}]} rs.initiate(config) rs.status() //查看状态 如果两个从上的状态为"stateStr" : "STARTUP", 则需要进行如下操作 rs.add var config={_id:"aminglinux",members:[{_id:0,host:"192.168.133.130:27017"},{_id:1,host:"192.168.133.132:27017"},{_id:2,host:"192.168.133.133:27017"}]} rs.reconfig(config) 此时再次查看rs.status()会发现从的状态变为SECONDARY
2.35mongodb副本集测试 主上建库,建集合
use mydb db.acc.insert({AccountID:1,UserName:"123",password:"123456"}) show dbs 从上查看 show dbs
若出现错误Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" },需要执行 rs.slaveok()
默认三台机器权重都为1,如果任何一个权重设置为比其他的高,则该台机器马上切换为primary角色,所以我们预设三台机器的权重分别为:130:3,132:2,133:1 在主上执行 cfg = rs.conf() cfg.members[0].priority = 3 cfg.members[1].priority = 2 cfg.members[2].priority = 1 rs.reconfig(cfg) 这样的话,第二个节点将会成为候选主节点。 主上执行 iptables -I INPUT -p tcp --dport 27017 -j DROP