zoukankan      html  css  js  c++  java
  • MongoDB副本集

    MongoDB副本集

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

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

    一、前言

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

    但有个弊端:slave为只读,master宕机后,slave不能自动切换为主

    现在:一个主(primary),多个从(secondary)只读

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

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

     
     
    二、副本集搭建
    【1】前期准备工作
    1、准备三台机器,都安装mongodb
    副本集副本节点(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)
  • 相关阅读:
    codevs 3305 水果姐逛水果街Ⅱ&&codevs3006
    开发webrtc通过Js调用Go接口发送数据报错500(Internal Sever Error)排查分析
    TSINGSEE青犀视频开发单通道 Go WebRTC服务端拉流接口无响应导致程序堵塞,如何处理?
    H265网页视频播放器项目EasyPlayer.JS版本不支持PCM/711音频格式如何转换?
    网络穿透/视频拉转推服务系统EasyNTS通过gomod管理工具编译提示缺少依赖库解决方法
    WebRTC播放器通过js Video标签拉流播放有时无法刷新视频画面的原因排查
    开源框架WebRTC终极指南:3大 API 详解
    开源框架WebRTC 10年发展,现已成为官方Web标准
    IE8 下 iframe 滚动条的问题
    父窗口jquery触发iframe按钮事件(转载)
  • 原文地址:https://www.cnblogs.com/windysai/p/6757029.html
Copyright © 2011-2022 走看看