`
zhaoshijie
  • 浏览: 2267737 次
  • 性别: 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在Linux上安装使用说明,MongoDB与SpringBoot整合代码示例

    安装 MongoDB 时可能会遇到的一些常见问题包括: * 启动报错问题 * 连接问题 * 数据库创建问题 4.1 启动报错问题 启动报错问题是安装 MongoDB 时最常见的问题之一,可能的原因包括权限问题、端口冲突问题等。 5....

    MongoDBCookBook

    最后,手册着重讲解了MongoDB常见问题的故障处理,如数据库低性能、无法选举出新的主节点、以及无法自动重新连接到MongoDB服务器等。手册提供了故障排查步骤,包括发现问题、对复制集成员进行维护等,以及推荐了监控...

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

    以下是一些 MongoDB 常见的错误及其解决方法: 1. **错误 28574:存储引擎不匹配** 当尝试使用不同存储引擎启动 MongoDB 时,例如配置文件指定了 `wiredTiger`,但数据目录中的数据文件是由 `mmapv1` 创建的,就会...

    MongoDB常见操作命令大全

    ### MongoDB常见操作命令详解 MongoDB 是一款非常流行的开源文档型数据库系统,它以其灵活性、高性能及可扩展性而著称。本文旨在详细介绍MongoDB中的一些常见操作命令,包括数据库管理、集合操作、用户管理以及数据...

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

    5. GridFS:MongoDB使用GridFS来存储大文件,将文件拆分为多个小文档,解决单个BSON文档大小限制问题,便于管理和检索。 6. 数据文件大:预分配空间策略防止文件碎片,提高写入效率。 7. 更新迁移中的块:更新会...

    mongodb3.2.4说明文档

    这部分内容解答了关于 MongoDB 存储方面的一些常见问题。 #### 十、复制 **10.1 复制介绍** 复制是 MongoDB 中一种重要的高可用性机制,通过在多个服务器之间复制数据,可以实现数据冗余和故障转移。 **10.2 ...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    MongoDBTemplate是Spring Data MongoDB的核心组件,它提供了丰富的API来执行常见的数据库操作。 首先,让我们深入理解`MongoDBTemplate`。它是MongoDB操作的抽象层,封装了大量的CRUD(创建、读取、更新、删除)...

    mongodb1067错误解决1

    在尝试启动MongoDB服务时,用户可能会遇到“Windows无法启动MongoDB服务 错误1067:进程意外终止”的问题。这一错误提示通常意味着MongoDB服务在启动过程中遇到了问题,导致服务无法正常运行。 #### 错误代码解释 ...

    MongoDB4.2.21 Linux版本安装包

    在Linux环境下安装MongoDB 4.2.21版本,是许多系统管理员和开发者的常见任务。本篇将详细介绍在Linux上安装MongoDB 4.2.21的步骤,以及相关的知识点。 首先,我们需要了解MongoDB的体系结构。MongoDB由以下几个核心...

    mongodb linux 64位安装包

    在Linux 64位系统上安装MongoDB,是很多开发人员和系统管理员的常见需求。以下是对"mongodb linux 64位安装包"的详细说明,以及如何在Linux环境下安装和管理MongoDB的步骤。 首先,你需要了解MongoDB的版本信息。在...

    NoSQL介绍PPT

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

    MongoDB with F#

    MongoDB 中的一个常见问题是大量使用字符串作为键名,这可能导致类型不一致和潜在的数据错误。F# 的强类型系统可以在这里发挥作用: - **定义自定义类型**:通过定义特定的数据类型,可以确保键名的一致性和类型的...

    MongoDB应用设计模式:MongoDB Applied Design Patterns

    - **监控和诊断**:学习使用MongoDB的内置工具进行性能监控和问题诊断,如mongostat、mongotop等。 - **写操作优化**:批量写入、批量更新和事务管理,减少网络往返,提高写入效率。 5. 安全性与备份: - **身份...

    mongodb副本集搭建

    在 MongoDB 副本集中,存在一些常见的问题,例如从库中无法查看数据的原因是 not master and slaveOk=false,解决办法是从库中执行 rs.slaveOk() 命令。 MongoDB 副本集搭建需要经过多个步骤,包括安装环境准备、...

    mongodb-docs-2011-01-29_mongodb最新用户手册

    #### 九、常见问题解答 - **Frequently Asked Questions**:汇总了 MongoDB 用户经常遇到的问题及其解决方案。这有助于新用户快速解决问题并更好地利用 MongoDB。 #### 十、其他重要知识点 - **International ...

    mongodb+redis资源

    MongoDB和Redis是两种非常流行的NoSQL数据库,它们在现代数据存储和处理中扮演着重要角色。...同时,这些资源也可能包含一些最佳实践和常见问题解决方案,对于解决日常运维中遇到的问题非常有帮助。

    Java开发面试-MongoDB专区

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

    mongodb启动加入windows服务

    #### 四、常见问题及解决方法 1. **权限问题**:在安装过程中可能会遇到权限不足的问题。确保以管理员身份运行命令提示符窗口。 2. **端口冲突**:如果27017端口已经被其他服务占用,可以尝试更改端口号。 3. **...

Global site tag (gtag.js) - Google Analytics