前提条件:

- 已安装MongoDB, 版本以3.6为例

- 系统: Debian9

- 建议做副本集的话, 以3台以上为宜, 本文以1台主机2个服务为例

1.创建数据存放的目录, 并授权

sudo mkdir /data/db/mongodb-clus/repl1 -p && sudo chown mongodb:mongodb /data/db/mongodb-clus/repl1

sudo mkdir /data/db/mongodb-clus/repl2 -p && sudo chown mongodb:mongodb /data/db/mongodb-clus/repl2

2.生成keyfile

这个keyfile生成后, 拷贝到全部副本机器上使用

sudo openssl rand -base64  >> /data/db/mongodb.key
sudo chown mongodb:mongodb /data/db/mongodb.key
sudo chmod /data/db/mongodb.key

3.以副本方式+keyfile启动服务

sudo /usr/bin/mongod --dbpath /data/db/mongodb-clus/repl1 --port 29001 --logpath /data/logs/mongo-repl1.log --bind_ip 127.0.0.1,192.168.0.11 --replSet repset1
sudo /usr/bin/mongod --dbpath /data/db/mongodb-clus/repl2 --port 29002 --logpath /data/logs/mongo-repl2.log --bind_ip 127.0.0.1,192.168.0.11 --replSet repset1

看到服务日志提示监听端口, 表示服务启动成功

4.在主服务登录mongo, 做一些初始化配置

mongo --port 29001

use admin
config = { _id:"repset1", members:[
{_id:0,host:"192.168.0.11:29001"},
{_id:1,host:"192.168.0.11:29002"}]
}
rs.initiate(config);

 

完成后查看一下副本状态

rs.status()

能输出以下信息表示初始化成功
{
"set" : "repset1",
"date" : ISODate("2019-01-10T02:51:46.835Z"),
"myState" : ,
"term" : NumberLong(),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -,
"heartbeatIntervalMillis" : NumberLong(),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"appliedOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"durableOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
}
},
"members" : [
{
"_id" : ,
"name" : "192.168.0.11:29001",
"health" : ,
"state" : ,
"stateStr" : "PRIMARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDate" : ISODate("2019-01-10T02:51:41Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -,
"infoMessage" : "",
"electionTime" : Timestamp(, ),
"electionDate" : ISODate("2019-01-10T02:18:39Z"),
"configVersion" : ,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : ,
"name" : "192.168.0.11:29002",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDurable" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDate" : ISODate("2019-01-10T02:51:41Z"),
"optimeDurableDate" : ISODate("2019-01-10T02:51:41Z"),
"lastHeartbeat" : ISODate("2019-01-10T02:51:46.556Z"),
"lastHeartbeatRecv" : ISODate("2019-01-10T02:51:46.698Z"),
"pingMs" : NumberLong(),
"lastHeartbeatMessage" : "",
"syncingTo" : "192.168.0.11:29001",
"syncSourceHost" : "192.168.0.11:29001",
"syncSourceId" : ,
"infoMessage" : "",
"configVersion" :
}
],
"ok" : ,
"operationTime" : Timestamp(, ),
"$clusterTime" : {
"clusterTime" : Timestamp(, ),
"signature" : {
"hash" : BinData(,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong()
}
}
}

6.建立角色和账号, 用于管理副本集

use admin
db.createRole({role:'sysadmin',roles:[],privileges:[{resource:{anyResource:true},actions:['anyAction']}]})
db.createUser({user:'root',pwd:'',roles:[{role:'sysadmin',db:'admin'}]})

7.退出mongo, 重新以认证方式登录

mongo --port  -u "root" -p "" --authenticationDatabase "admin"

8.完成

现在可以在29001的数据库上创建数据, 测试29002等副本中是否能自动同步了

mongodb.副本集配置方法(使用keyfile认证部署)的更多相关文章

  1. MongoDB 副本集配置,开启账号认证

    MongoDB 自带功能强大的主从,配置也很简单,从零开始花了30分钟搞定 3台以上机器IP: 192.168.1.24, 192.168.1.25, 192.168.1.26, 192.168.1. ...

  2. [Database] MongoDB 副本集配置

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

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

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

  4. mongodb副本集配置

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

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

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

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

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

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

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

  8. MongoDB副本集配置系列十一:MongoDB 数据同步原理和自动故障转移的原理

    1:数据同步的原理: 当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步: 1:检查自己local库的oplog.rs集合找出最近的时间戳. 2:检查Primary ...

  9. MongoDB副本集配置系列十:MongoDB local库详解和数据同步原理

    1:local库是MongoDB的系统库,记录着时间戳和索引和复制集等信息 gechongrepl:PRIMARY> use local switched to db local gechong ...

随机推荐

  1. 转载:Java的四种引用方式

    原文:https://www.cnblogs.com/huajiezh/p/5835618.html Java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指 ...

  2. android 知识点汇总

    1.activity 它是 android 应用程序的基本功能单元.一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号.拍照.Activity 本身是没有 ...

  3. vue2之 missing param for named route "xxxx"

    场景: 解决方法:可以做的是将其包含router-link在适当的位置v-if,以便在您的异步数据实际到达之前不会尝试渲染. html代码: <div id="app" cl ...

  4. HTTP2.0 简明笔记

    前言 RFC2616发布以来,一直是互联网发展的基石.HTTP协议也成为了可以在任何领域使用的核心协议,基于这个协议人们设计和部署了越来越多的应用.HTTP的简单本质是其快速发展的关键,但随着越来越多 ...

  5. 搭建ssh框架项目(五)

    一.控制层优化 (1)创建BaseAction.java类 package com.cppdy.ssh.web.action; import javax.servlet.http.HttpServle ...

  6. java 类型转换前先做检查

    1.传统的类型转换由RTTI确保正确性. 2.instanceof关键字(二元操作符) ,返回一个Boolean值,告诉我们对象是不是某个类或该类派生类的实例,他判断的是类型. if (a insta ...

  7. html----不常见标签

    控制文字滚动 <!-- direction="right up down left" --> <!-- behavior:滚动方式(包括3个值:scroll.sl ...

  8. 用PNChart绘制饼状图简介

    写在前面 最近做的小Demo中有一个绘制饼状图的需求.在开始实现之前上网了解了一下现有的一些绘制图形的第三方库,相应的库还是有挺多的,PNChart便是其中一个.PNChart是一个90后的中国boy ...

  9. 性能测试九:jmeter进阶之beanshell的使用+断言

    一.使用 BeanShell使用方式一 BeanShell面板上写脚本 // 从vars中获取用户定义的参数,并转换为int类型 int p_skuId = Integer.parseInt(vars ...

  10. pytest十三:配置文件 pytest.ini

    pytest 配置文件可以改变 pytest 的运行方式,它是一个固定的文件 pytest.ini 文件,读取配置信息,按指定的方式去运行. ini 配置文件pytest 里面有些文件是非 test ...