搭建前准备

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. 用自己的话简要阐述struts2的执行流程

    Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件.核心控制器FilterDispatcher是Struts ...

  2. 根据URL地址获取对应的HTML,根据对应的URL下载图片

    核心代码(获取HTML): #region 根据URL地址获取信息GET public static String GetResult(string url) { return GetResult(u ...

  3. 个人简介HTML

    码云链接:https://gitee.com/lengxiaoyixuan222/codes/z4dxnvr0ce2blpkihsg7985 源代码: <!doctype html> &l ...

  4. springboot+VUE(二)

    入element-ui cnpm install element-ui -S 执行后,会下载element-ui的包到本地,同时会将配置加入到package.json的依赖块中. 通过命令行可以将最新 ...

  5. 关于No qualifying bean of type [XXX.XXX] found for dependency 的一次记录

    异常开始于spring+springmvc+mybatis 注解配置,启动tomcat服务器出现No qualifying bean of type [com.***.service] found f ...

  6. java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>()

    这个问题好奇怪, 出现这个错误是通用Mapper初始化的错误,排查的方向就是往这个方向,可能的情况有以下几种: .jar包冲突 <dependency> <groupId>tk ...

  7. Zabbix11.3 Zabbix SNMP 常用OID列表

    点击获取CISCO设备OID 系统参数(1.3.6.1.2.1.1) OID 描述 备注 请求方式 .1.3.6.1.2.1.1.1.0 获取系统基本信息 SysDesc GET .1.3.6.1.2 ...

  8. (6.1)linux操作系统基础

    Linux介绍: Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核.Linux可安装在各种计算机硬件设备中,比如手机.平板电脑.路由器.台式计算机 ...

  9. DataGridView添加的数据最后一步无法生效的问题。

    在做项目时,需要使用到大量固定的参数,使用时只需修改一部分定值即可,所以就选用DataGridView控件进行循环添加,数据添加完成,一切正常,但是在修改数据时发现,每一次修改的数据的操作的最后一步总 ...

  10. PHP通过身份证号码获取性别、出生日期、年龄等信息

    $sex = substr($idcard, (strlen($idcard)==18 ? -2 : -1), 1) % 2 ? '1' : '2'; //18位身份证取性别,倒数第二位奇数是男,偶数 ...