• mongodb副本集搭建、测试


    例:一主两从,测试库promised-mongo

    1、准备三个mongodb实例,便于测试本地创建三个目录用户存储数据:

    127.0.0.1:27017 => /data/mongo

    127.0.0.1:27027 => /data/mongo_rs1

    127.0.0.1:27037 => /data/mongo_rs2

    每个数据库启动配置文件为对应目录下的mongo.conf文件,启动配置说明:

     2、启动mongo实例:

    mongod -f /data/mongo/mongo.conf
    mongod -f /data/mongo_rs1/mongo.conf
    mongod -f /data/mongo_rs2/mongo.conf

    3、关联数据库:进入数据库后,声明配置并进行初始化,rs.status()查看当前状态

    > mongo 127.0.0.1:27017
    > conf=
        {
        "_id" : "rs",
        "members" : [
            { "_id" : 0, "host" : "127.0.0.1:27017" },
            { "_id" : 1, "host" : "127.0.0.1:27027" },
            { "_id" : 2, "host" : "127.0.0.1:27037" }
            ]
        }
    > rs.initiate(conf)
    > rs.status()

    这样一个mongo集群搭建起来,后续也可以继续添加、移除成员,详细操作搜索 mongo rs操作

    > rs.remove("127.0.0.1:27017t"); // 删除一个节点
     
    > rs.add("127.0.0.1:27017"); // 新增从节点

    现在主节点是随机指定的,如果需要指定某个节点为固定的主节点,则配置节点的优先级高于其他副本节点:

    # 指定主数据库:提高指定指定副本优先级
    # mongo
    cfg = rs.conf()
    cfg.members[0].priority = 5
    cfg.members[1].priority = 1
    cfg.members[2].priority = 1
    rs.reconfig(cfg)

    4、到这里,数据库层面的基本配置已经完成了,下面开始如何在代码中去连接这样一个副本集:

    import pmongo from 'promised-mongo';

    interface pmongoConfg { server_options: { socketOptions: {} }; db_options: { read_preference_tags: null, read_preference: 'primary' }; rs_options: { socketOptions: {}, rs_name: String }; // rs_name: 副本集名称 mongos_options: {}; dbName: String; // 指定库名 servers: [{ host: String, port: Number }]; // 数据库地址集合 auth: { user: String, password: String }; // 用户名密码,没有写null } pmongo(pmongoConfig)

    以promised-mongo为例,基本配置为有备注的几项,参照修改即可,其他mongo连接库参数大同小异,文档搜索replset查阅参数说明。

    5、宕机测试(也可以写一段简单代码去测试主节点挂掉后是否能正常获取数据)

    这里以27027为主节点,其他两个为从节点,正常启动状态为:

    lsof -i:27027 // 查询到主节点对应进程PID
    
    kill -9 PID  // 关闭主节点进程模拟宕机

    登录其中没有关闭的节点查看,可以发现27027状态异常,27037自动升级为主节点

     在原主节点恢复之后,集群会自动切换使用初始的主从关系;

    写完了。

    开黑吗我亚索贼6
  • 相关阅读:
    Mysql元数据分析
    python编码encode和decode
    自己写的Python数据库连接类和sql语句拼接方法
    【甘道夫】Sqoop1.99.3基础操作--导入Oracle的数据到HDFS
    SVN配置以及自己主动部署到apache虚拟文件夹
    css中使用id和class 的不同
    Android OpenGL ES(七)----理解纹理与纹理过滤
    一键安装 redmine on windows 和发邮件设置
    足球大数据:致足球怀疑论者-The Counter(s)-Reformation反教条改革
    【Android进阶篇】Fragment的两种载入方式
  • 原文地址:https://www.cnblogs.com/insight0912/p/12469601.html
Copyright © 2020-2023  润新知