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