MongoDB 自带功能强大的主从,配置也很简单,从零开始花了30分钟搞定

3台以上机器IP: 192.168.1.24, 192.168.1.25, 192.168.1.26, 192.168.1.27(只读),每台服务器安装好mongodb。

启动副本集(副本集id:mySet)

参考文档 replication Options

通过命令启动: /path/mongod [其他参数] --replSet=mySet

通过配置文件: /path/mongod -f /path/mongo.conf

# mongo.conf 内容
replcation:
replSetName: mySet

初始化 rs.initiate(configuration)

文档参考 rs.initiate

进入mongo客户端

rs.conf() // 会提示未进行初始化 rs.initiate()
rs.initiate({
_id: "mySet", // 副本集名称
version: 1,
members: [
{ _id: 0, host: "192.168.1.24:27017", priority: 1},
{ _id: 1, host: "192.168.1.25:27017", priority: 1},
{ _id: 2, host: "192.168.1.26:27017", priority: 1},
{ _id: 3, host: "192.168.1.27:27017", hidden: true, priority: 0}, //只读
//{ _id: 99, host: "192.168.1.99", arbiterOnly: true}, // 仲裁机,不复制数据,无法做主机
]
})

配置完成后会自动选举出一台 PRIMARY

副本集动态扩展

文档参考 rs.add

新增加的机器配置同一个副本集名称(mySet)并启动,在PRIMARY主机进行操作:

rs.add({_id:4, host: "192.168.1.28", priority: 1})

新机器会自动进行数据同步,同步完成后变成SECONDARY

开启权限控制

文档参考 Enforce Keyfile Access Control in a Replica Set

+. 权限控制包括两个层面:副本集互相认证,客户机的权限认证

+. 可以通过 bindIp: host1,host2,host3 选项在网络层进行过滤

+. 配置步骤

1). 创建 keyfile ,keyfile可以任意创建,只要是合法的base64字符,长度6-1024,unix系统权限必须为600或400. 拷贝到副本集每一个成员中

2). 关闭所有mongodb成员实例,增加keyfile选项启动 --keyfile <path-to-keyfile>,或者修改mongodb.conf

security:
keyFile: <path-to-keyfile>

3). 连接primary(rs.status()查看primary,然后切换),创建管理用户

admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "root",
pwd: "PassWord123",
roles: [ { role: "root", db: "admin" } ]
}
)

官方说这里创建的用户权限必须至少高于userAdminAnyDatabase,不然会导致副本集无法访问

4). 创建其他用户,另外可以选择创建 clusterAdmin 角色,这个角色可以修改其他副本集成员的动作

db.getSiblingDB("admin").createUser(
{
"user" : "username",
"pwd" : "PassWord321",
roles: [ { "role" : "readWrite", "db" : "db_name" } ]
}
)

使用 mongodb.js 连接

const mongoCli = require("mongodb").MongoClient;
let db = yield mongoCli.connect("mongodb://192.168.1.24:27017,192.168.1.24:27017,192.168.1.24:27017/db_name?replcaSet=mySet");
// yield mongoCli.connect("mongodb://192.168.1.24:27017,192.168.1.24:27017,192.168.1.24:27017/db_name?replcaSet=mySet", function(err, client){db = client.db(db_name)});

从 SECONDARY 读取数据

主从的延迟默认是0,通过配置项自行设置。

从机需要开启 SlaveOk 才可以读取,一般的读取流程为:

use mydb
mydb.setSlaveOk()
mydb.col.find() // ...

MongoDB 副本集配置,开启账号认证的更多相关文章

  1. [Database] MongoDB 副本集配置

    MongoDB 副本集配置 MongoDB复制是将数据同步在多个服务器的过程. 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性. 复制还允许您从硬 ...

  2. MongoDB副本集配置系列三:副本集的认证方式

    1:副本集配置参考这篇博客: http://www.cnblogs.com/xiaoit/p/4478951.html 2:副本集的认证 假设有两台机器已经配置好了副本集(副本集罪一般最少3台机器,这 ...

  3. mongodb分片集群开启安全认证

    原文地址:https://blog.csdn.net/uncle_david/article/details/78713551 对于搭建好的mongodb副本集加分片集群,为了安全,启动安全认证,使用 ...

  4. mongodb副本集配置

    需要用到mongodb的时候单个实例肯定是不行的,挂了怎么办,那然后呢,跟mysql一样搞主从备份吗,是可以的mongodb这么弄,不过官网已经不推荐了这么干了,推荐使用副本集的模式,然后数据再大一点 ...

  5. 分布式文档存储数据库(MongoDB)副本集配置

    副本集特征: N 个节点的集群 任何节点可作为主节点 所有写入操作都在主节点上 自动故障转移 自动恢复 相关文章: http://www.cnblogs.com/huangxincheng/archi ...

  6. MongoDB副本集配置系列五:副本集的在线迁移

    MongoDB副本集的在线迁移 查看当前集群的状态: { "setName" : "gechongrepl", "setVersion" : ...

  7. mongodb.副本集配置方法(使用keyfile认证部署)

    前提条件: - 已安装MongoDB, 版本以3.6为例 - 系统: Debian9 - 建议做副本集的话, 以3台以上为宜, 本文以1台主机2个服务为例 1.创建数据存放的目录, 并授权 sudo ...

  8. 生产环境部署MongoDB副本集(带keyfile安全认证以及用户权限)

    本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/8,欢迎留言. 安装软件包:mongodb-linux-x86_64-3.4.1.tgz ...

  9. MongoDB副本集配置系列二:配置MongoDB副本集

    接上一篇博客: http://www.cnblogs.com/xiaoit/p/4479066.html 1:首先创建3台虚拟机作为配置环境 IP1:192.168.91.128 IP2:192.16 ...

随机推荐

  1. Oracle 复杂查询(1)

    一.复杂查询 1. 列出至少有一个员工的所有部门编号.名称,并统计出这些部门的平均工资.最低工资.最高工资. 1.确定所需要的数据表: emp表:可以查询出员工的数量: dept表:部门名称: emp ...

  2. flask系列二之基础知识

    一.调试模式(debug模式) 1.设置debug模式 在app.run()中传入关键字参数debug,app.run(debug=Ture),就设置当前项目为debug模式.如下所示: # 从fla ...

  3. webrtc系列文章

    WEBRTC RTP/RTCP协议族 2017-02-22 20:15 阅读(144) 评论(0) WebRTC 基于GCC的拥塞控制(下) 2017-02-22 15:44 阅读(108) 评论(0 ...

  4. JS获取页面数据执行Ajax请求

    下面这个例子展示了如何使用js获取页面中元素的值,并且将这些值作为参数执行Ajax请求. $("#submit-task").bind("click", fun ...

  5. Spring整合web项目原理

     

  6. Python嵌套、递归、高阶函数

    一.嵌套函数 1.嵌套函数简单的理解可以看作是在函数的内部再定义函数,实现函数的“私有”. 2.特点: <1> 函数内部可以再次定义函数. <2> 只有被调用时才会执行(外部函 ...

  7. mfs教程(四)

    mfs文件系统(四) MooseFS  维护 一.启动MooseFS集群 最安全的启动MooseFS集群(避免任何读或写的错误数据或类似的问题)的方式是按照以下命令步骤: 1.启动mfsmaster进 ...

  8. keepalived配置

    keepalived配置 之前已经安装完成,接下来我们配置keepalived. 假设我的ip地址如下: server1:192.168.0.150 server2:192.168.0.157 vip ...

  9. ensemble 的2篇入门 文章

    python 篇: http://machinelearningmastery.com/ensemble-machine-learning-algorithms-python-scikit-learn ...

  10. Luogu 2597 [ZJOI2012]灾难

    BZOJ 2815. 解法还是挺巧妙的. 放上写得很详细很好懂的题解链接  戳这里. 一个物种$x$如果要灭绝,那么沿着它的入边反向走走走,一定可以走到一个点$y$,如果这个点$y$的物种灭绝了,那么 ...