`
zhaoshijie
  • 浏览: 2242054 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mongodb常见问题

 
阅读更多

关键字:mongodb常见问题




一、
1. addshard 遇到的错误 db.runCommand({addshard:”172.16.5.104:20000″}) { “ok” : 0, “errmsg” : “can’t use localhost as a shard since all shards need to communicate. either use all shards and configdbs in localhost or all in actual IPs host: 172.16.5.104:20000 isLocalHost:0″ } 遇到这样的错误是由于某些服务启动在 localhost 地址。 经过检查发现 route 启动时,读取 config 服务是读取的 localhost 地址: ./mongos –port 40000 –configdb localhost:30000 –fork [...]

1. addshard 遇到的错误

db.runCommand({addshard:”172.16.5.104:20000″})
{
“ok” : 0,
“errmsg” : “can’t use localhost as a shard since all shards need to communicate. either use all shards and configdbs in localhost or all in actual IPs host: 172.16.5.104:20000 isLocalHost:0″
}

遇到这样的错误是由于某些服务启动在 localhost 地址。
经过检查发现 route 启动时,读取 config 服务是读取的 localhost 地址:

./mongos –port 40000 –configdb localhost:30000 –fork –logpath /data/route/log/route.log –chunkSize 1

将 localhost 修改为 IP 地址,问题解决。

2. 为什么要同时有 config 和 route

一开始看到 config 和 route 的逻辑结构有一点疑惑。既然一个数据库查询的过程是:

客户端
|
route
|
config
|
Database

而 config 的作用就是告诉 route 应该去哪一个 Database 取数据。那么为什么不能直接由客户端向 config 发起请求呢?这时 route 的存在岂不是多余?
简单的思考之后,得出了以下结论:

在有多个 route 和多个 config 的情况下,route 与 route 之间是平行的存在,也就是说,一个 route 并不知道另外一个 route 的存在。但是一个 route 知道所有 config 的存在。
那么当要写入数据时,只要你是通过了 route,route 就会通知到所有的 config,那么每一个 config 便会知道数据是如何分片的。
如果将 route 这层去掉,那么 config 与 config 之间并不知道彼此的存在。客户端的请求很可能会只发向其中的一个 config,那么也只有这一个 config 知道最新的分片状态。

这个答案其实经不起太多的推敲,比如:

config 是可以从客户端那里拿到所有 config 的列表的,一旦有了列表之后,config 就可以彼此相互通信了。可以解决数据同步的问题。

我还要看多一些文档。

3. Replica Set 启动顺序
在启动两个 rs 机器时,我先启动了 second,后启动了 Primary。这是一台机器上显示自己为 second,另外一台为 unreachable。而另外一台机器显示两台机器均在 second。

这个现象需要验证,是否 Replica Set 是有启动顺序限制。

二、

昨天到今天一直在尝试在同一台机器上用多个IP地址来创建 Replica Set + Shard。 由于 MongoDB 官方用户验证方面的文档说的也不太细。所以走了一些回头路。 下面整理一些常见的错误,以及他们可能表达的意思。描述的顺序是按照排错的逻辑: 1. route 启动的时候,连接 config 不可以以 localhost 为地址链接。不然会遇到以下错误: “errmsg” : “can’t use localhost as a shard since all shards need to communicate. either use all shards and configdbs in localhost or all in actual IPs host: 172.16.5.104:20000 isLocalHost:0″ 2. 如果不以 localhost 为地址链接,那么 config 启动的时候不能加 –auth 选项,不然会在log文件中遇到以下错误: ERROR: [...]

昨天到今天一直在尝试在同一台机器上用多个IP地址来创建 Replica Set + Shard。
由于 MongoDB 官方用户验证方面的文档说的也不太细。所以走了一些回头路。
下面整理一些常见的错误,以及他们可能表达的意思。描述的顺序是按照排错的逻辑:

1. route 启动的时候,连接 config 不可以以 localhost 为地址链接。不然会遇到以下错误:

“errmsg” : “can’t use localhost as a shard since all shards need to communicate. either use all shards and configdbs in localhost or all in actual IPs host: 172.16.5.104:20000 isLocalHost:0″

2. 如果不以 localhost 为地址链接,那么 config 启动的时候不能加 –auth 选项,不然会在log文件中遇到以下错误:

ERROR: config servers not in sync! not authorized, did you start with –keyFile?

此时进程无法启动

3.在 route 和 config 准备完毕后,通过 route 以远程 IP 为地址添加shard,则报错:(有 –auth 参数)

db.runCommand({addshard:’a1:28010′})
{
“ok” : 0,
“errmsg” : “failed listing a1:28010′s databases:{ errmsg: \”need to login\”, ok: 0.0 }”
}

4. 去掉 –auth 参数,添加 shard,成功!

5. 依旧保留 –auth 参数,添加用户后,再添加shard。报错:

“errmsg” : “couldn’t connect to new shard DBClientBase::findN: transport error: a1:28010 query: { getlasterror: 1 }”

总结:MongoDB 2.0 的认证方式

1.Replica Set 之间通过 key 来相互认证。
2.Route 与 Config 之间不存在认证关系,Route 连接 Config 时不能以 localhost 连接。
3.单个Mongod进程启动后,如果无 –auth 选项且无用户,则必须通过 localhost 连接才能添加用户和做其他操作。如果通过远程(非127.0.0.1的IP地址)连接,则必须要输入用户名、密码。此时如果还无用户存在,则无法连接。
4.添加 Shard 时,mongod 不可以带 –auth 参数,不然会添加失败。

三、

续上篇 笔记2 ,还是说一下关于 MongoDB 认证的问题。 在 王文龙 所写的 《MongoDB 实战》 中,写到: 创建主从 key 文件,用于标识集群的私钥的完整路径,如果各个实例的 key file 内容不一 致,程序将不能正常用。 我误以为 –keyFile 是各个节点之间的认证方式。其实不是的。各个节点之间的确认关系参数是 –replSet。只要此参数后面的内容一致。Replica Set 就可以创建成功。 在官方文档中提到: You do not need to use the –auth option, too (although there’s no harm in doing so), –keyFile implies –auth. –auth does not imply –keyFile. 也就是说 keyFile 其实包含了 auth 的作用。 [...]

续上篇 笔记2 ,还是说一下关于 MongoDB 认证的问题。
在 王文龙 所写的 《MongoDB 实战》 中,写到:

创建主从 key 文件,用于标识集群的私钥的完整路径,如果各个实例的 key file 内容不一 致,程序将不能正常用。

我误以为 –keyFile 是各个节点之间的认证方式。其实不是的。各个节点之间的确认关系参数是 –replSet。只要此参数后面的内容一致。Replica Set 就可以创建成功。

在官方文档中提到:

You do not need to use the –auth option, too (although there’s no harm in doing so), –keyFile implies –auth. –auth does not imply –keyFile.

也就是说 keyFile 其实包含了 auth 的作用。

而当你加了 –keyFile 参数后,如果你要添加 Shard,则会收到报错:

need to login

这和加了 auth 的报错一致。

以前没接触过 MongoDB,直接从 2.0 使用,所以里面的有些细节可能还不理解。看到有人说 auth 是 2.0 的新功能。而之前只能用 keyFile 验证。还不太清楚 keyFile 下用户登陆的一些细节。


分享到:
评论

相关推荐

    mongodb 常见问题处理方法收集

    主要介绍了mongodb 常见问题收集,这里的问题是我在看MongoDB官网文章时,从里面总结出来的,需要的朋友可以参考下

    MongoDB常见操作命令大全

    MongoDB常见操作命令大全

    Mongodb常见错误与解决方法小结(Mongodb中经常出现的错误)

    主要介绍了Mongodb常见错误与解决方法小结(Mongodb中经常出现的错误),需要的朋友可以参考下

    MongoDB常见18道面试题及答案.docx

    MongoDB是目前最好的面向文档的免费开源NoSQL数据库。如果你正准备参加MongoDB NoSQL数据库的技术面试,你最好看看下面的MongoDB NoSQL面试问答。这些MongoDB NoSQL面试问答涵盖了NoSQL数据库基本的概念,复制...

    NoSQL介绍PPT

    常见NoSQLj介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB...

    Windows上安装MongoDB:完整步骤详解.pdf

    mongodb安装 《Windows上安装MongoDB:完整步骤详解.pdf》是一份适用于Windows操作系统的MongoDB安装教程,适用于初学者和有经验的开发...此外,本教程还提供了一些常见问题的解决方案,以帮助您更好地使用MongoDB。

    2020年最新MongoDB 4.0专讲从入门到精通视频教程.txt

    day1:MongoDB数据库与其他数据库区别介绍及学习方法 day2:MongoDB运行环境搭建及运行 day3:MongoDB增删改查操作实践 day4:教你学会MongoDB聚合...day12:MongDB数据库常见故障及解决方案 day13:在以后工作中应用的注意点

    Linux安装MongoDB启动及常见问题解决

    MongoDB安装过程以及问题记录 一、MongoDB安装 下载MongoDB 官方地址:https://www.mongodb.com/download-center/community 可能需要注册一下我这里是Centos7系统所以选择的是RHEL7.0的TGZ,其他系统自行选择 如果不...

    Redis、Memcache、MongoDB区别

    1、里面包含Redis、MongoDB、...3、提供JAVA连接Redis常见问题的解决方案 4、对MongoDB的特性有专门文档作描述 5、对于新手而言,提供了Redis常用命令进行归纳,并用TXT文档整理出来方便直接复制到DOS界面执行命令

    MongoDB精简提要

    MongoDB官方文档内容比较多,个人总结了一些常见的SQL操作!包括CRUD、逻辑运算符、排序、投影、join、分页等!简洁、使用!给大家分享!

    Java开发面试-MongoDB专区

    Java开发MongoDB部分是面试中常见的技术领域之一,尤其对于工作一年左右的开发者来说,掌握MongoDB的使用和应用能够提升自己的竞争力和职业发展。下面将详细介绍一些可能涉及的面试题,帮助你更好地准备。首先,...

    Node.js+MongoDB+AngularJS Web开发

    它简洁而清晰地介绍了这3 种技术,然后迅速转到构建几种常见的Web 应用程序上面。, 读者将学会使用Node.js 和MongoDB来建立更具可扩展性的高性能网站,并利用AngularJS 创新的MVC 方法构建更有效的网页和应用程序,...

    MongoDB聚合实战:数据分析与财务应用轻松入门

    也适合于初学Mongodb的人员使用,字数不多,但是涵盖了Mongodb聚合框架的入门,常用的高级聚合,针对数据分析和财务管理给出了一些实践的例子,对一些常见的性能问题及优化做了一些介绍,最后给出了一些常见问题和...

    Centos离线安装mongodb

    则安装一些常用的软件则比较麻烦, 本资源提供 Linux 离线安装 MongoDB 软件和安装教程 pdf, 文件包含 mongodb-linux-x86_64-3.6.3.tgz 和 mongodb离线安装.pdf, 教程中详细描述了安装步骤和遇到的常见问题。

    NodeJs操作MongoDB教程之分页功能以及常见问题

    主要给大家介绍了关于NodeJs操作MongoDB教程之分页功能以及常见问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用NodeJs具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    CentOS(Linux)离线安装MongoDB7.0详细教程(亲测可行)

    同时,针对可能出现的常见问题,本文也提供了相应的解决方案,帮助用户顺利解决安装过程中的疑难问题。 最后,教程还介绍了如何验证MongoDB的安装是否成功,并提供了启动、停止和重启MongoDB服务的方法,以及如何...

Global site tag (gtag.js) - Google Analytics