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)
  • 相关阅读:
    shell 字符串替换
    shell 拆分字符串成数组 放入数组
    shell 换行输出变量 换行
    Linux shell修改xml文件
    Spark 实现共同好友
    Hive 开启 service2 服务
    hive 求相互是好友.
    Linux 查看外网ip
    Termux下开启kex远程桌面
    Termux开启ssh服务
  • 原文地址:https://www.cnblogs.com/windysai/p/6757029.html
Copyright © 2011-2022 走看看