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自动升级为主节点

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

 

 

 

写完了。

 

posted on 2020-03-12 15:31  前路亦是故乡  阅读(391)  评论(0编辑  收藏  举报

导航