搭建前准备
MongoDB版本:4.0
安装之前最好先确定一下几点:
防火墙关闭
MongoDB的端口号对需要访问你的服务器开放
在安装的过程中,可以说遇到问题多多,下面就介绍一下问题情况,以及解决方法:
问题一(连接被拒绝):
{
"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"}),创建一条数据。
问题五(创建用户失败):
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" }]})
问题六(从节点读取主节点数据失败):
--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()
读写权限设置可参考网址:
配置完成后,Java连接池配置,可参考:
生产环境部署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,将数据的 ...
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副本集搭建 我搭建的是一个主节点,两个副节点 构建目录结构如下 ...
mongodb副本集搭建过程中的问题和解决技巧
在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天 ...
随机推荐
某预约系统分析 >; 某区公共自行车租车卡在线预约,关于如何提高成功概率
概诉 网上提交预约申请单,线下面交完成实体卡的交付和办理. 本文主要从技术角度分析预约页面,仅供初学者技术交流使用. 表单输入和校验 系统通过2步的确认点击到达信息输入页面. 地址:/bjggzxc/ ...
完全卸载Oracle11G
要特别注意删除注册表的这块,如果删错了会导致系统出现问题,而且oracle的安装卸载真的很烦,一旦装错了,卸载不干净就会导致种种的问题无法再次安装,个人建议用360卸载,360卸载完成后会自动检测到无 ...
第三章TP-Link 703N OpenWrt设置网络
默认情况下不开启wifi,另外需要连接到网络来安装软件,所以需要修正配置文件. 可以用vi修改相关配置(不会用vim的同学悲剧了). 首先修改/etc/config/wireless文件,注释掉 # ...
auto_ptr,shared_ptr 智能指针的使用
Q: 那个auto_ptr是什么东东啊?为什么没有auto_array?A: 哦,auto_ptr是一个很简单的资源封装类,是在头文件中定义的.它使用“资源分配即初始化”技 ...
C#控制台输入
学习C语言后,在学习C#会有一个很不适应的小毛病.那就是在C语言里面你可以在一行输入好几个数字或是字母然后分别赋给相应的变量.可是在C#里面就不一样了,它只能读取一行.要实现一个一个变量赋值那就只有一 ...
[POJ] 2453 An Easy Problem [位运算]
An Easy Problem Description As we known, data stored in the computers is in binary form. The probl ...
【Win7】【磁盘管理】删除相似“33fbc1d57e9aaf1ea88e6f08”缓存目录
一般,在计算机磁盘.移动硬盘.或U盘出现,类别似"33fbc1d57e9aaf1ea88e6f08",你不能删除缓存目录.能Win7删除. (1).使用管理员,打开命令提示符窗口( ...
Java:终结器
目录 背景Java版:终结器防卫者C#版:“终结器防卫者”备注 背景返回目录 多数情况我们不需要重写 finalize 方法,只有当我们需要持有未托管资源的时候才需要,而此时重写 finalize 方 ...
《JavaScript网页经典特效300例》
基础篇 进阶篇 高级篇
MapReduce时mapping内存不足
17/11/07 16:53:50 INFO mapreduce.Job: Job job_1510042506570_0007 failed with state KILLED due to: MA ...