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副本集搭建 我搭建的是一个主节点,两个副节点 构建目录结构如下 ...
随机推荐
- winform里面的Form1.Designer.cs
Program.cs是程序入口,也就是Main函数.Form1.cs是实现功能的代码,包括你的自定义方法和事件.Form1.Designer.cs是你的画面的设计代码,一般由系统自动生成,也可以手动修 ...
- springBoot的第一个程序
创建一个springBoot工程 然后输入工程名字 然后选择要导入的依赖jar包,这里只勾选了web 然后目录结构 创建一个controller必须在aplication.properties的同级目 ...
- php redis 操作
在php里边,redis就是一个功能类,该类中有许多成员方法(名字基本与redis指令的名字一致,参数也一致). 实例: <?php $redis = new Redis(); //连接本地的 ...
- hive 表新增字段后更新分区无法显示数据
解决方案: 1.删除分区后重新跑数据 alter table drop partition(分区字段=“”): 2.新增字段运行程序后其实数据已经有了,只是查询hive的时候无法显示出来, 这个时候只 ...
- redis基本数据结构
redis5中数据类型
- (21/24) webpack实战技巧:webpack对三方类库的优化操作
1.优化第一步--选用引入方式 在前面的学习中我们对于如何引入第三方类库(Jquery)推荐了两种方式,第一种是import引入的方式,第二种是ProvidePlugin插件.那两种引入方法有什么区别 ...
- 很不幸,装win10和Ubuntu双系统还是入坑了
具体问题描述:在安装Ubuntu的时候,没有发现有与windows共存的提示,直接说本计算机没有安装系统.在安装完成后,发现通过BIOS只有进入Ubuntu的启动项,没有进入Windows的启动项. ...
- python安装selenium和下载浏览器驱动
1.安装selenium 方法一:可以用在cmd中用pip命令安装. python默认自带pip工具,如果在电脑上配置了pip的环境变量,打开cmd命令窗口后可以直接输入命令pip insta ...
- python回归分析
假设原函数由一个三角函数和一个线性项组成 import numpy as np import matplotlib.pyplot as plt %matplotlib inline def f(x): ...
- API & Web API
The follow content refer refers to: Baidu Baike : https://baike.baidu.com/item/api/ ...