Authentication

Mongo 分片集群中的身份驗證

  • August 10, 2015

我有一個 mongo 共享集群和副本集:

ShardA 副本集:

A1. 10.77.14.241 

A2. 10.77.14.242

AA. 10.77.14.243 Arbiter

/etc/mongod.conf的一些參數:

#bind_ip=127.0.0.1
auth=true
replSet=ShardB
keyFile=/srv/mongodb/mongodb-keyfile

ShardB 副本集:

B1. 10.77.14.244 

B2. 10.77.14.245

BA. 10.77.14.246 Arbiter

/etc/mongod.conf的一些參數:

#bind_ip=127.0.0.1
auth=true
replSet=ShardB
keyFile=/srv/mongodb/mongodb-keyfile

Config 和 Mongos 伺服器:

C1. 10.77.14.247

C2. 10.77.14.248

C3. 10.77.14.249

config mongod 和 mongos 的所有實例都在 /etc/rc.local 中啟動:

mongod --configsvr  --logpath /var/log/mongodb/mongod.log --keyFile /srv/mongodb/mongodb-keyfile --fork
mongos --configdb 10.77.14.247:27019,10.77.14.248:27019,10.77.14.249:27019 --port 40000 --logpath /data/mongos.log --keyFile /srv/mongodb/mongodb-keyfile --fork

副本集正常工作。如果我在主要成員中插入文件,它會在次要成員上複製。

我有以下問題:在任何仲裁器,mongod config,mongos -

use admin   
switched to db admin    
mongos> db.auth({user: 'admin', pwd: '12345678'})    
Error: 18 Authentication failed.
0

因此我無法通過 mongos 將文件插入數據庫。

我是否必須啟用數據庫的管理員分片?

我重讀了http://docs.mongodb.org/manual/tutorial/enable-authentication-without-bypass/ :)

  1. 我從 C1、C2、C3 開始:
mongod --configsvr  --logpath /var/log/mongodb/mongod.log --fork
mongos --configdb 10.77.14.247:27019,10.77.14.248:27019,10.77.14.249:27019 --port 40000 --logpath /data/mongos.log --fork

2)我在mongos上創建了一個新使用者:

use admin
db.createUser(
   {
     user: "admin",
     pwd: "12345678",
     roles: [
        { role: "clusterManager", db: "admin" },
        { role: "userAdminAnyDatabase", db: "admin" }
     ]
   }
)

3)我重新啟動了 mongod 配置和 mongos –keyfile 參數的實例:

 mongod --configsvr  --logpath /var/log/mongodb/mongod.log --fork --keyFile /srv/mongodb/mongodb-keyfile
mongos --configdb 10.77.14.247:27019,10.77.14.248:27019,10.77.14.249:27019 --port 40000 --logpath /data/mongos.log --fork --keyFile /srv/mongodb/mongodb-keyfile

4)添加分片成功:

db.auth({user:'admin', pwd: '12345678'})
1

sh.addShard("ShardA/10.77.14.241:27017,10.77.14.242:27017,10.77.14.243:27017")
{ "shardAdded" : "ShardA", "ok" : 1 }

sh.addShard("ShardB/10.77.14.244:27017,10.77.14.245:27017,10.77.14.246:27017")
{ "shardAdded" : "ShardB", "ok" : 1 }

引用自:https://serverfault.com/questions/711281