一: MongoDB 副本集介绍
早期版本使用 master-slave, 一主一从和 MySQL 类似, 但 slave 在此架构中为只读, 当主库宕机后, 从库不能自动切换为主
目前已经淘汰 master-slave 模式, 改为副本集, 这种模式下有一个主(primary), 和多个从(secondary), 只读. 支持给它们设置权重, 当主宕掉后, 权重最高的从切换为主
在此架构中还可以建立一个仲裁 (arbiter) 的角色, 它只负责裁决, 而不存储数据
再此架构中读写数据都是在主上, 要想实现负载均衡的目的需要手动指定读库的目标 server
二: MongoDB 副本集搭建
三台机器: 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", 则需要进行如下操作
- 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
三: MongoDB 副本集测试
主上建库, 建集合
- 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()
来源: http://www.bubuko.com/infodetail-2853362.html