linux上安装MongoDB副本集(带keyfile安全认证以及用户权限)
搭建前准备
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安全认证以及用户权限)的更多相关文章
- 生产环境部署MongoDB副本集(带keyfile安全认证以及用户权限)
本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/8,欢迎留言. 安装软件包:mongodb-linux-x86_64-3.4.1.tgz ...
- Linux上安装MongoDB
使用本教程使用.rpm 软件包在红帽企业Linux或CentOS Linux版本6和7上安装MongoDB Community Edition . 平台支持 本安装指南仅支持64位系统.详细信息请参见 ...
- 在centos7上搭建mongodb副本集
1.安装副本集介绍 副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成.通过Replication,将数据的 ...
- window系统上实现mongodb副本集的搭建
一.问题引出 假设我们生产上的mongodb是单实例在跑,如果此时发生网络发生问题或服务器上的硬盘发生了损坏,那么这个时候我们的mongodb就使用不了.此时我们就需要我们的mongodb实现高可用, ...
- Linux上安装 MongoDB ZK MEMCACHE PHP扩展
安装mongo扩展: 下载地址:https://github.com/mongodb/mongo-php-driver,下载该源码包 /usr/local/php/bin/pecl install m ...
- windows安装MongoDB副本集,通过Java程序实现数据的插入与查询
我本地的环境 MongoDB 4.0 jdk 1.7.x 安装参考主要博客 https://blog.csdn.net/wanght89/article/details/77677271#commen ...
- MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)--------hadoop环境的搭建
Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)------https://blog.csdn.net/pucao_cug/article/details/71698903 ...
- windows版本 MongoDB副本集搭建及开启身份验证
------------恢复内容开始------------ ------------恢复内容开始------------ MongoDB副本集搭建 我搭建的是一个主节点,两个副节点 构建目录结构如下 ...
随机推荐
- How to compile tensorflow on CentOS
Tensorflow is a very effective machine learning library implemented by C++, we can use tensorflow wi ...
- redis 安装与使用
到git 官网上下载redis: DownLoad,选择.zip 压缩包 2. 下载后,对zip 包进行解压,解压后如下: 3. 配置并安装redis, 打开window dos 窗口,将目录切换到解 ...
- 来源于知乎专栏:https://zhuanlan.zhihu.com/p/29619457
1. 校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1- ...
- 【C语言基础】什么是数据类型?
基本数据类型 整数 整型 — — int ---- 4 字节 短整型 — — short int ---- 2 字节 长整型 — — long int ---- 8 字节 ...
- 阿里云ossfs配置
Github:https://github.com/aliyun/ossfs/wiki Root账户卸载:umount /挂载目录非root用户要卸载目录,请用:fusermount -u your_ ...
- supervisord的安装使用
由于生产环境使用的的tomcat,项目比较重要,所以要做进程守护,本来打算自己写脚本,但是效果不理想,想了下还是用supervisord了 由于很久不用,所以写下来部署步骤 第一:安装,安装的方法有y ...
- Working with Excel Files in Python
Working with Excel Files in Python from: http://www.python-excel.org/ This site contains pointers to ...
- 前端笔记-jquery
一.什么是jquery 1.jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team 2.jQuery是继prototype之后又一个优秀的 ...
- java方法体
执行顺序: 静态代码块 mian方法 构造代码块 构造方法 静态代码块只执行一次.
- Day05 -寻找自己:Ruby的self物件与singleton method
前情提要:在第四天里,我们用参赛者的例子解说实体方法与类别方法.类别中的实体物件,想要玩弄方法时,可以有三种取用方式:(跟斯斯有三种一样) 该类别所定义的实体方法. 模块中可取得的实体方法.(关于模块 ...