我很快就需要对数据库进行分片,但不清楚在mongos
和config
服务器上启用身份验证的最佳做法是什么。
我希望一切都用密码保护。
- 每个配置服务器是否都应
auth
启用? - 如果是,那么在每个数据库中都设置相同的用户吗?只针对管理数据库?还是需要为配置数据库创建一个?
- 我猜你不需要在 mongos 上创建任何用户,因为它应该从配置和分片本身继承,这是正确的吗?
- 添加新分片时,是否需要为新分片上的每个分片数据库设置相同的用户?
谢谢!
答案1
我将逐一讨论这些问题:
每个配置服务器是否都应启用身份验证?
是的,基本上你运行的每个 mongod 实例都应该启用 auth(和密钥文件,这意味着授权)。
如果是,那么在每个数据库中都设置相同的用户吗?只针对管理数据库?还是需要为配置数据库创建一个?
分片环境中的管理数据库实际上将存在于配置服务器上。因此,您将在所有三个服务器上拥有管理数据库的副本(它们彼此相同)。您应该始终通过连接到配置数据库,mongos
并且您不会在那里创建其他数据库,因此无需添加特定用户。
我猜你不需要在 mongos 上创建任何用户,因为它应该从配置和分片本身继承,这是正确的吗?
如果您添加的第一个分片有现有数据库,则它将是这些数据库的主分片(永远)。该主分片将包含这些数据库的身份验证记录,即使您随后将集合分片到多个分片中。分片后创建的任何后续数据库可能位于另一个分片上,并且它们的凭据将存储在那里。基本经验法则是:mongos
在分片环境中管理您的用户。
笔记:以上内容在 MongoDB 2.4 及以下版本中适用。2.6 中的计划更改将把所有凭据集中到分片环境中的配置数据库中,并消除一些复杂性。但是,经验法则仍然适用,使用mongos
添加新分片时,是否需要为新分片上的每个分片数据库设置相同的用户?
正如上一个问题的答案所暗示的,这没有必要只要你总是通过mongos
(推荐 - 它知道每个数据库的主分片是什么,并将适当地路由您的身份验证请求)。在某些极端情况下,您可能需要在所有分片上拥有用户,在这种情况下,您必须在每个分片上添加(和维护)它们,但对于一般用途来说,这不是必需的。