搭建前准备

MongoDB版本:4.0

主要参考搭建MongoDB副本集网站:https://www.jianshu.com/p/f021f1f3c60b

安装之前最好先确定一下几点:

    • 防火墙关闭
    • MongoDB的端口号对需要访问你的服务器开放

相关linux命令可参考博客https://www.cnblogs.com/yanduanduan/p/6396631.html

在安装的过程中,可以说遇到问题多多,下面就介绍一下问题情况,以及解决方法:

问题一(连接被拒绝):

{
"operationTime" : Timestamp(, ),
"ok" : ,
"errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 10.xx.xx.xx:27018 failed with Error connecting to 10.xx.xx.xx:27018 :: caused by :: Connection refused, 10.xx.xx.xx:27018 failed with Error connecting to 10.xx.xx.xx:27018 :: caused by :: Connection refused",
"code" : ,
"codeName" : "NodeNotFound",
"$clusterTime" : {
"clusterTime" : Timestamp(, ),
"signature" : {
"hash" : BinData(,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong()
}
}
}

原因:

没有指定本机IP,默认是127.0.0.1;

解决方法:

在mongo.conf配置文件中,加上bind_ip=本机IP即可;

问题二(文件权限过大):

permissions on /root/mongodb/keyfile are too open

原因:

我指定的keyFile=/root/mongodb/keyfile/keyfile路径少写了文件“keyfile”,仅指定到文件夹“keyfile”,所以不管我怎么减少权限,都不行。

解决方法:

补全keyfile文件的路径

keyFile=/root/mongodb/keyfile/keyfile

问题三(查看成员状态失败):

replSet:PRIMARY> rs.status()
{
"operationTime" : Timestamp(, ),
"ok" : ,
"errmsg" : "not authorized on admin to execute command { replSetGetStatus: 1.0, lsid: { id: UUID(\"49593e29-481a-4765-a7ad-2b1ca5a8fbcf\") }, $clusterTime: { clusterTime: Timestamp(1553750837, 1), signature: { hash: BinData(0, BAD749F5F3799A6EDEB97259390BD616FF6A9F5D), keyId: 6673011308209635329 } }, $db: \"admin\" }",
"code" : ,
"codeName" : "Unauthorized",
"$clusterTime" : {
"clusterTime" : Timestamp(, ),
"signature" : {
"hash" : BinData(,"utdJ9fN5mm7euXJZOQvWFv9qn10="),
"keyId" : NumberLong("")
}
}
}

原因:

由于开启了权限验证,即“auth=true”,所以查看状态之前,需要先认证。

解决方法:

replSet:PRIMARY> use admin
switched to db admin
replSet:PRIMARY> db.auth('admin','admin') replSet:PRIMARY> rs.status()

问题四(插入数据失败):

replSet:PRIMARY> db.admin.insert({"name":"zhangsan"})
WriteCommandError({
"operationTime" : Timestamp(, ),
"ok" : ,
"errmsg" : "not authorized on admin to execute command { insert: \"admin\", ordered: true, lsid: { id: UUID(\"fa7499f8-f4be-4059-a713-0a2dd2ddbcc7\") }, $clusterTime: { clusterTime: Timestamp(1553752333, 1), signature: { hash: BinData(0, 77558A08F8FF8235DF3CD87E13C2771943EBBDE0), keyId: 6673011308209635329 } }, $db: \"admin\" }",
"code" : ,
"codeName" : "Unauthorized",
"$clusterTime" : {
"clusterTime" : Timestamp(, ),
"signature" : {
"hash" : BinData(,"d1WKCPj/gjXfPNh+E8J3GUPrveA="),
"keyId" : NumberLong("")
}
}
})

原因:

没有按照以下原则进行:

  • 数据库和用户是绑定的,光创建一个超级用户并不能操作在其他新建的数据库中插入数据
  • 在切换数据库时,先切换认证用户,不然会出现too many users are authenticated的错误。

解决方法:

  1. 输入use admin,进入admin数据库,root用户需要在admin数据库中认证。
  2. 输入db.auth('root','root')超级用户进行认证
  3. 输入db.createUser({user: "okevin",pwd: "123456",roles: [ { role: "readWrite", db: "recommended" } ]} )创建okevin用户,并为它指定数据库为recommended。
  4. 输入db.auth('okevin','123456')切换认证用户。
  5. 输入use recommended切换至recommended数据库
  6. 输入db.repo.insert({"name":"kevin"}),创建一条数据。

主要参考网址:http://www.cnblogs.com/yulinfeng/p/10226977.html

问题五(创建用户失败):

replSet:PRIMARY> db.createUser({user:"test", pwd:"test", roles:[{role: "userAdminAnyDatabase", db:"test" }]})
--28T13::08.968+ E QUERY [js] Error: couldn't add user: No role named userAdminAnyDatabase@test :
_getErrorWithCode@src/mongo/shell/utils.js::
DB.prototype.createUser@src/mongo/shell/db.js::

原因:

在db.createUser()方法中roles里面的db必须写成是admin库。

解决方法:

将db的值改为admin

db.createUser({user:"test", pwd:"test", roles:[{role: "userAdminAnyDatabase", db:"admin" }]})

可参考网址:https://blog.csdn.net/jianlong727/article/details/53889990

问题六(从节点读取主节点数据失败):

--28T14::13.643+ E QUERY    [js] Error: not master and slaveOk=false :
_getErrorWithCode@src/mongo/shell/utils.js::
DB.prototype.getUsers@src/mongo/shell/db.js::
shellHelper.show@src/mongo/shell/utils.js::
shellHelper@src/mongo/shell/utils.js::
@(shellhelp2)::

原因:

这是正常的,默认情况下,主节点有读写权限,从节点是没有读写权限的。

解决方法:

通过命令进行设置

rs.slaveOk()

读写权限设置可参考网址:

https://blog.csdn.net/u011191463/article/details/68485529

配置完成后,Java连接池配置,可参考:

https://www.cnblogs.com/dmir/p/4780544.html

linux上安装MongoDB副本集(带keyfile安全认证以及用户权限)的更多相关文章

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

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

  2. Linux上安装MongoDB

    使用本教程使用.rpm 软件包在红帽企业Linux或CentOS Linux版本6和7上安装MongoDB Community Edition . 平台支持 本安装指南仅支持64位系统.详细信息请参见 ...

  3. 在centos7上搭建mongodb副本集

    1.安装副本集介绍 副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成.通过Replication,将数据的 ...

  4. window系统上实现mongodb副本集的搭建

    一.问题引出 假设我们生产上的mongodb是单实例在跑,如果此时发生网络发生问题或服务器上的硬盘发生了损坏,那么这个时候我们的mongodb就使用不了.此时我们就需要我们的mongodb实现高可用, ...

  5. Linux上安装 MongoDB ZK MEMCACHE PHP扩展

    安装mongo扩展: 下载地址:https://github.com/mongodb/mongo-php-driver,下载该源码包 /usr/local/php/bin/pecl install m ...

  6. windows安装MongoDB副本集,通过Java程序实现数据的插入与查询

    我本地的环境 MongoDB 4.0 jdk 1.7.x 安装参考主要博客 https://blog.csdn.net/wanght89/article/details/77677271#commen ...

  7. MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  8. Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)--------hadoop环境的搭建

    Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)------https://blog.csdn.net/pucao_cug/article/details/71698903 ...

  9. windows版本 MongoDB副本集搭建及开启身份验证

    ------------恢复内容开始------------ ------------恢复内容开始------------ MongoDB副本集搭建 我搭建的是一个主节点,两个副节点 构建目录结构如下 ...

随机推荐

  1. 4DAY权限管理-2018-04-27

    0xff001 基本权限UGO 1.描述 ​ 文件权限设置,可以赋予莫个用户或组能够以何种方式 访问某个文件 2.权限对象U\G\O(属主\属组\其他人) 例如:[root@localhost ~]# ...

  2. 01 jmeter性能测试系列_Jmeter的体系结构

    深圳文鹏教育jmeter 性能测试讲义 概念 元件:元件代表jmeter工具菜单中的一个子菜单,比如HTTP请求.事务控制器.响应断言等: 组件:一组元件的集合(一个或者多个),比如逻辑控制器中有事务 ...

  3. 错误 88 error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明) c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxcoll.h 590

    最近接收了以前新公司遗留的代码,一个函数动不动就少的一千行,多的几千行,真是受不了这编码风格! 于是便使用了VS自带的重构工具,选择代码后右键-重构-提取方法,提取完方法就编译不过,想了好久原因,原来 ...

  4. Vue Input输入框两侧加减框内数字组件

    NumberBox组件内容: <template> <div class="number-box" :class="{'box-disable': is ...

  5. JavaScript数组方法--concat、push

    利用了两天的时间,使用typescript和原生js重构了一下JavaScript中数组对象的主要方法,可以移步github查看. 这里,按照MDN上的文档顺序,再重新学习一下数组方法吧. conca ...

  6. .yaml参数文件的编写和使用

    一.在ROS底下使用.yaml文件配置参数 在ROS底下用起来还是非常方便的,首先,写一个读参数的函数getParam(),由于参数类型不止一种,所以要使用模板. 具体语句如下: template&l ...

  7. 29.python环境搭建

    新的笔记本上搭建的python运行环境:1.首先现在下载python版本,我这里拿的是之前用的3.5老版本 2.双击安装(勾选 add Python3.5 to path) 3.检测是否安装成功 4. ...

  8. Monkey测试简介

    1.Monkey测试简介monkey是安卓命令行工具,它向系统发送伪随机的用户事件,例如:按键的输入.触摸屏的输入.手势输入等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常.因此,mo ...

  9. java高并发实战(一)——为什么需要并发

    转自:https://blog.csdn.net/gududedabai/article/details/80813592

  10. Jeecg-Boot 1.0版本发布,企业级快速开发平台

     Jeecg-Boot 一款基于代码生成器的J2EE快速开发框架! 采用前后端分离技术: SpringBoot,Mybatis-plus,Shiro,JWT,Vue & Ant Design. ...