我目前正在使用mongodb 2.4.8。我在一台机器上有一个复制集,包括主要,辅助和仲裁。我打开了身份验证。我的问题是我无法登录仲裁服务器,进行身份验证并运行“db.logRotate();”它一直在失败的权限。我无法弄清楚我做错了什么,或者这是不能做到的,我必须做一个“杀死usr1”。
答案 0 :(得分:0)
根据Rotate Log Files,您可以使用kill -SIGUSR1 <pid>
轮换日志文件(我认为应该是kill -USR1 <pid>
,也许使用哪个都不重要)
但是,如果您的MongoDB在Windows上运行,则必须使用db.logRotate()
命令。
副本集中的仲裁器不会复制任何数据,包括用户/角色详细信息。 Replica Set Arbiter中也对此进行了记录:
由于仲裁者不存储数据,因此他们不拥有内部 用于身份验证的用户和角色映射表。就这样 在激活授权的情况下登录仲裁者的唯一方法是使用 本地主机异常。
如果您想(或由IT安全部门强制)仅允许经过身份验证的访问,则必须像这样手动创建Shard Local User:
以维护模式启动仲裁器,请参见Perform Maintenance on Replica Set Members
主要是您修改配置文件并注释掉replication
,sharding
和security
部分。修改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