您的位置:首页 > 数据库 > Mongodb

MongoDB副本集

2017-04-24 15:16 225 查看
MongoDB副本集

据说,很多游戏公司都用这个东西 。。。。。

因为做了好几天,所以写下来 = = ,估计是之前安装有点残渣,导致yum卸载总是卸不干净,于是大胆开多一台干净的机器来实验(特意用了快照,做好再接再厉的准备)

一、前言

早期使用master-slave(有点像mysql的主从,目前已淘汰),

但有个弊端:slave为只读,master宕机后,slave不能自动切换为主
现在:一个主(primary),多个从(secondary)只读

原理:支持给从设置权重,当主宕掉后,权重最高的从切换为主

特点:读写数据都在主上,要想实现负载均衡,需要手动指定读库的目标server

二、副本集搭建
【1】前期准备工作
1、准备三台机器,都安装mongodb

http://note.youdao.com/noteshare?id=490b80b86122a49de98a369428b13965&sub=A2EA861481E248998757C76FF5EB75F5

副本集主节点(primary):192.168.37.131

副本集副本节点(secondary): 192.168.37.133 192.168.37.128

2、编辑三台机器的mongod配置文件

vim /etc/mongod.conf

replication:
##oplog大小
oplogSizeMB: 20 ——》开头空2格,20前有1个空格
##复制集名称
replSetName: ljy

3、分别重启三台机器:service mongod restart

【2】具体搭建过程
1、131主机器上执行
(1)use admin ——》切换到admin库
(2)运行
config={_id:"ljy",members:[{_id:0,host:"192.168.37.133:27017"},{_id:1,host:"192.168.37.128:27017"},{_id:2,host:"192.168.37.131:27017"}]}

(3)初始化配置
rs.initiate(config)
(4)查看状态,有3个角色
rs.status()

133、128 都为 secondary





131是primary



(5)执行完之后,会发现131自动变为PRIMARY,133、128变为SECONDARY



###################

ps:

如果两个从上的状态为"stateStr" : "STARTUP", 则需要进行如下操作
> var config={_id:"ljy",members:[{_id:0,host:"192.168.37.133:27017"},{_id:1,host:"192.168.37.128:27017"},{_id:2,host:"192.168.37.131:27017"}]}
> rs.reconfig(config)
此时再次查看rs.status()会发现从的状态变为SECONDARY
###################

三、副本集测试

1、主(131)建立测试集合

(1)use mydb

(2)db.createCollection('jihe')

2、从上看数据

show dbs ——》报错: listDatabases failed

解决: 执行 rs.slaveOk()

show tables 能看到 jihe



3、主宕机,切换到从

(1)131主,更改primary和secondary的权重,引起主从切换

cfg = rs.conf()
cfg.members[0].priority = 3 ——》131 primary
cfg.members[1].priority = 2 ——》133 secondary
cfg.members[2].priority = 1 ——》128 secondary

rs.reconfig(cfg) 重新加载
这样,第二个节点将会成为候选节点

(2)131主禁掉主服务
iptables -I INPUT -p tcp --dport 27017 -j DROP

看日志: tail /var/log/mongodb/mongod.log



(3)133从回车,从SECONDARY ——》PRIMARY



ps:

不能将用户的访问从原来的主切换到从,
解决:写监控脚本,程序帮忙切换主的ip

4、新主(133)创建集合,原主(131)能看到
(1)db.createCollection('jihe2')

(2)131(原主)执行,解禁
iptables -D INPUT -p tcp --dport 27017 -j DROP

(3)show tables 可以看到 jihe2



(4)结论:
主宕机,恢复期间,给新主(133)写入新数据,新数据是可以同步给原来宕机的主(131)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: