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. Python Twisted系列教程6:抽象地利用Twisted

    作者:dave@http://krondo.com/and-then-we-took-it-higher/  译者:杨晓伟(采用意译) 你可以从这里从头开始阅读这个系列. 打造可以复用的诗歌下载客户端 ...

  2. Hibernate4.3.5入门HelloWorld

    本文给出一个简单的Hibernate4.3.5入门实例,配置方式采用XML文件方式(这种方式已经不是主流了,目前越来越多采用Annotation方式映射POJO实体) 代码结构如下图所示:主要用到hi ...

  3. Android studio如何和VS的region一样折叠代码

    相信用过VS的朋友都会经常有用到VS的region来折叠代码,非常方便.那么Android studio是否可以呢?当然可以. 选择代码,Ctrl + Alt + T 选择 第二项,这样就可以啦

  4. iOS坑爹的could not find any information for class named xxx

    关掉项目也无法解决,最后把文件delete掉,然后选“Remove Reference”,这样就不会真正删除文件.接着选“File -> Add Files to ...”添加回来就可以了.

  5. C语言之随机数和字符串输入输出

    一.随机数产生函数 1.需要加入头文件 #include<stdlib.h> 和 #include<time.h> 2.Rand是伪随机数产生器,每次调用rand产生的随机数是 ...

  6. shelve和hashlib模块

    一.shelve模块 shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式. 注意: shelve模块封装了pickle模块,,允许 ...

  7. Linux的基本指令--其他命令

    一 . 终端翻页: shift-pageup shift-pagedown 二 . 看手册:man man man 2 read 查看read系统函数的man page(在第二个section中,表示 ...

  8. solr facet查询及solrj 读取facet数据(相当有用)

    原文出自:http://www.coin163.com/java/docs/201310/d_3010029802.html 一.   Facet 简介 Facet 是 solr 的高级搜索功能之一  ...

  9. 【bzoj2186】[Sdoi2008]沙拉公主的困惑

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3303  Solved: 1129[Submit][S ...

  10. Mongodb的安装与启动

    下载链接: http://www.mongodb.org/downloads ------------------------------------------------------------- ...