无法在mongodb仲裁中进行身份验证

时间:2014-04-10 18:29:43

标签: mongodb

我目前正在使用mongodb 2.4.8。我在一台机器上有一个复制集,包括主要,辅助和仲裁。我打开了身份验证。我的问题是我无法登录仲裁服务器,进行身份验证并运行“db.logRotate();”它一直在失败的权限。我无法弄清楚我做错了什么,或者这是不能做到的,我必须做一个“杀死usr1”。

3 个答案:

答案 0 :(得分:0)

根据Rotate Log Files,您可以使用kill -SIGUSR1 <pid>轮换日志文件(我认为应该是kill -USR1 <pid>,也许使用哪个都不重要)

但是,如果您的MongoDB在Windows上运行,则必须使用db.logRotate()命令。

副本集中的仲裁器不会复制任何数据,包括用户/角色详细信息。 Replica Set Arbiter中也对此进行了记录:

由于仲裁者不存储数据,因此他们不拥有内部 用于身份验证的用户和角色映射表。就这样 在激活授权的情况下登录仲裁者的唯一方法是使用 本地主机异常。

如果您想(或由IT安全部门强制)仅允许经过身份验证的访问,则必须像这样手动创建Shard Local User

  • 以正常方式部署副本集,请参阅Deploy a Replica Set
  • 关闭仲裁服务器数据库
  • 以维护模式启动仲裁器,请参见Perform Maintenance on Replica Set Members

    主要是您修改配置文件并注释掉replicationshardingsecurity部分。修改net.port以防止任何其他副本集成员连接到数据库。

  • 从本地主机连接到仲裁数据库,无需身份验证
  • 创建分片本地管理员用户。

    db.getSiblingDB("admin").createUser( {user: "ladmin", pwd: "secret", roles: [ "root" ] })
    

    除了root,您还可以授予更严格的[ "clusterAdmin", "userAdminAnyDatabase" ]

  • 关闭仲裁服务器数据库

  • 以正常模式重新启动仲裁程序数据库。

注意,在PRIMARY / SECONDARY节点上,仅在主节点上创建碎片本地用户就足够了(启动副本集后)。还将复制到辅助节点。

答案 1 :(得分:-1)

我相信您要查找的命令是db.runCommand({logRotate:1})(切换到admin数据库后运行)。 http://docs.mongodb.org/manual/tutorial/rotate-log-files/

在仲裁器上对我工作正常,并且会旋转日志。

答案 2 :(得分:-1)

在同步用户时,Mongo复制似乎完全忽略了仲裁程序。我在我的集​​群中使用keyFile身份验证,它总是让我在没有任何权限的情况下登录仲裁服务器。从本地计算机,logRotate命令起作用(因为localhostAuthBypass)。如果我从远程shell登录,我无权使用该命令。

然而,我一直在做的是安排一个夜间cronjob来旋转日志。您甚至可以在没有登录mongo shell的情况下以单行方式执行此操作: 简单地说,它只是:

kill -10 $(cat <pidfile>)
00 00 * * * /usr/bin/kill -10 /mongo/mongo.pid >>/mongo/logrotation.log 2>&1

“ - 10”指的是SIGUSR1,它告诉mongo旋转日志。 确保您使用的是processManagement.pidFilePath(2.6)或--pidfilepath(2.4)选项,并且此命令中列出了相同的pidfilepath。

或者如果您在服务器上运行多个mongos:

for file in /<mongo_pidfile_directory>/*.pid ; do kill -10 $(cat $file) ; done