1:启动三个实例

/home/maxiangqian/mongodb-linux-x86_64-rhel62-3.4.2/bin/mongod --config /home/mongodb/db27017/mongodb27017.conf
/home/maxiangqian/mongodb-linux-x86_64-rhel62-3.4.2/bin/mongod --config /home/mongodb/db27018/mongodb27018.conf
/home/maxiangqian/mongodb-linux-x86_64-rhel62-3.4.2/bin/mongod --config /home/mongodb/db27019/mongodb27019.conf

2:为每个实例配置超级管理员账号:maxiangqian

use admin
db.createUser(
{
user: "maxiangqian",
pwd: "maxiangqian",
roles: [ { role: "root", db: "admin" } ]
}
)

然后使用验证登录

use admin
db.auth("maxiangqian","maxiangqian")
db.shutdownServer()

3:重启mongodb数据库以复制集的形式启动mongodb数据库

mongod -f /home/mongodb/db27017/mongodb27017.conf
mongod -f /home/mongodb/db27018/mongodb27018.conf
mongod -f /home/mongodb/db27019/mongodb27019.conf

4:登入27017mongodb数据库进行初始化:

mongo localhost:27017
配置主节点:
rsconf = { _id: "rsmxqtest", members: [ { _id: 0,host: "localhost:27017" } ] }
再进行初始化:
> rs.initiate()
进行验证:
rs.conf()
添加一个节点:
rs.add("localhost:27018")

嗯?报错了,什么鬼,看一下报错信息:

rsmxqtest:PRIMARY> rs.add("localhost:27018")
{
"ok" : 0,
"errmsg" : "Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: localhost.localdomain:27017; the following nodes did not respond affirmatively: localhost:27018 failed with not authorized on admin to execute command { replSetHeartbeat: \"rsmxqtest\", pv: 1, v: 2, from: \"localhost.localdomain:27017\", fromId: 0, checkEmpty: false }",
"code" : 74,
"codeName" : "NodeNotFound"
}
意思就是没有权限,复制集之间的互联也是需要验证的,所以要配置keyfile来满足这个需求,如果开启了 authorization ,投票节点通过证书的形式与复制集中其他节点进行认证。MongoDB的身份认证过程是加密的。MongoDB的认证交互是通过密码进行的
5:创建一个keyfile,并且拷贝到其他从节点
openssl rand -base64 756 > /home/mongodb/db27017/key/autokey
chmod 400 /home/mongodb/db27017/key/autokey

然后进行拷贝并且查看文件:

[root@localhost key]# cp /home/mongodb/db27017/key/autokey /home/mongodb/db27018/key/autokey
[root@localhost key]# cp /home/mongodb/db27017/key/autokey /home/mongodb/db27019/key/autokey
[root@localhost key]# ls -ll /home/mongodb/db27018/key/
total 4
-r-------- 1 root root 1024 Mar 14 16:32 autokey
[root@localhost key]# ls -ll /home/mongodb/db27019/key/
total 4
-r-------- 1 root root 1024 Mar 14 16:33 autokey

6:以keyFile 参数启动mongodb数据库

首先我们在三个数据库的配置文件添加以下信息:
keyFile = /home/mongodb/db27017/key/autokey
keyFile = /home/mongodb/db27018/key/autokey
keyFile = /home/mongodb/db27019/key/autokey

重启三台mongodb数据库

db.shutdownServer()
mongod -f /home/mongodb/db27017/mongodb27017.conf
mongod -f /home/mongodb/db27018/mongodb27018.conf
mongod -f /home/mongodb/db27019/mongodb27019.conf

7:登录主节点27017节点,然后进行操作添加节点

[root@localhost tmp]# mongo localhost:27017
MongoDB shell version v3.4.2
connecting to: localhost:27017
MongoDB server version: 3.4.2
rsmxqtest:PRIMARY> use admin
switched to db admin
rsmxqtest:PRIMARY> db.auth("maxiangqian","maxiangqian")
开始添加节点
rsmxqtest:PRIMARY> rs.add("localhost:27018")
{ "ok" : 1 }

显示添加成功,然后添加一个投票节点(投票节点是不保存数据的,只是作为投票使用)

rsmxqtest:PRIMARY> rs.addArb("localhost:27019")
{ "ok" : 1 }

显示添加成功,然后验证看一下节点状态:

rs.status()
rs.conf()

打印的消息就不打印贴出来了,有点太长了。

 
OK,现在一个keyfile的验证复制集(一主一从一投票)已经配置完了,我们现在开始验证一下复制集:
(1)主节点添加一条数据27017
rsmxqtest:PRIMARY> use maxiangqian
switched to db maxiangqian
rsmxqtest:PRIMARY> db.maxiangqian.insert({"name":"maxiangqian"})
WriteResult({ "nInserted" : 1 })
rsmxqtest:PRIMARY> db.maxiangqian.find().pretty()
{ "_id" : ObjectId("58c7b0c0088625cf734503ae"), "name" : "maxiangqian" }

(2)登录从节点验证数据27018

rsmxqtest:SECONDARY> use admin
switched to db admin
rsmxqtest:SECONDARY> db.auth("maxiangqian","maxiangqian")
1
rsmxqtest:SECONDARY> rs.slaveOk()
rsmxqtest:SECONDARY> show dbs
admin 0.000GB
local 0.000GB
maxiangqian 0.000GB
rsmxqtest:SECONDARY> use maxiangqian
switched to db maxiangqian
rsmxqtest:SECONDARY> db.maxiangqian.find().pretty()
{ "_id" : ObjectId("58c7b0c0088625cf734503ae"), "name" : "maxiangqian" }

可以看得到,复制集的功能已经完成了,数据也已经同步了。投票节点是不存储数据的,所以我们就不需要去验证数据了。

mongodb 3.4复制集配置的更多相关文章

  1. replcation set (复制集)配置过程 --mongodb

    一,配置规划 复制集原理(基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB)  Paxos(mysql MGR 用的是变种))如果发生主库宕机,复制集内部会进行投票选举,选择一 ...

  2. mongodb 3.4复制集详解

    1关闭数据库,打开三个mongodb数据库数据库实例 rs.printReplicationInfo() 2:原理 主库能够进行读写操作,一个复制集群只能有一个活跃的主库 一般情况下复制可以分为好几种 ...

  3. MongoDB 3.2复制集单节点部署(四)

    MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 3.2版本进行复制集实验(但MongoDB配置文件 ...

  4. MongoDB 2.6复制集单节点部署(三)

    MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 2.6版本进行复制集实验(但MongoDB配置文件 ...

  5. [Mongodb] Relica Set复制集集群简单搭建--持续更新

    这里我们搭建一个没有访问控制,奇数个Set没有仲裁者的集群 1.三个配置文件添加 replication.replSetName:"Replica_test" 并启动三个实例2.连 ...

  6. mongodb 3.4分片复制集配置

    1:启动三个实例 mongod -f /home/mongodb/db27017/mongodb27017.conf mongod -f /home/mongodb/db27018/mongodb27 ...

  7. spring mongodb 复制集配置(实现读写分离)

    注:mongodb当前版本是3.4.3   spring连接mongodb复制集的字符串格式: mongodb://[username:password@]host1[:port1][,host2[: ...

  8. Windows 下MongoDB复制集配置

    1.下载服务.https://www.mongodb.com/   点击products 下拉第二列MongoDB server  选择 4.0.6 2.下载下来后 有限管理员运行 一路安装,可以不用 ...

  9. mongoDB研究笔记:复制集概述

    自我学习,仅供参考: 数据库总是会遇到各种失败的场景,如网络连接断开.断电等,尽管journaling日志功能也提供了数据恢复的功能,但journaling通常是针对单个节点来说的,只能保证单节点数据 ...

随机推荐

  1. JSON 请求太大,无法反序列化。

    在post请求中数据太大导致报500错误.错误提示 JSON 请求太大,无法反序列化. 在config中加 <system.web.extensions> <scripting> ...

  2. 命令行下class redis not found 解决

    1.在命令行下输入 php --ini 2.在浏览器中查看 phpinfo() 可以看出,我  的phpinfo和命令行的就不是一个php.ini文件.因为我有几个版本的php , 并且在环境变量中配 ...

  3. C# winform窗体传值 利用委托 子窗体传值给父窗体

    首先在Form2中定义委托和事件: //声明委托 和 事件 public delegate void TransfDelegate(String value); public partial clas ...

  4. Ionic3,装饰器(@Input、@ViewChild)以及使用 Events 实现数据回调中的相关用法(五)

    标题栏的渐变效果 使用到的相关装饰器.Class以及相关方法:@Input.@ViewChild.Content.ionViewDidLoad ① @Input 装饰器:用来获取页面元素自定义属性值. ...

  5. Zookeeper---系统学习

    1.概述 1.1 Zookeeper解决了什么问题? 分布式环境中    协调和管理服务    是一个复杂的过程: Zookeeper通过  其简单的架构和API  解决了这个问题,Zookeeper ...

  6. 解析ES6 Promise

    ES6 Promise 概念之类的,大概读者都应该有所知道,接下来我们直入终点. 先让我们来看看什么是Promise吧,他是一个object,类,arry,function? 首先,学习它的时候应该讲 ...

  7. oracle系统包——dbms_job用法(oracle定时任务)

    用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...

  8. h5移动端设置键盘搜索

    点击键盘上的搜索按钮实现页面跳转 <form action="#list?goods_title={{message?message:''}}" @submit.preven ...

  9. render函数的使用

    render函数的几种使用方法最近使用element-ui的tree组件时,需要在组件树的右边自定义一些图标,就想到了用render函数去渲染. <el-tree class="p-t ...

  10. Android OpenGL教程-第四课【转】

    第四课 旋转: 在这一课里,我将教会你如何旋转三角形和四边形.左图中的三角形沿Y轴旋转,四边形沿着X轴旋转. 我们增加两个变量来控制这两个对象的旋转.这两个变量加在程序的开始处其他变量的后面.它们是浮 ...