2017-02-10 3 views
0

я подключаю к Монго с пользователем с clusterAdmin и резервного копирования ролей, но я получаю сообщение об ошибке:Монго разъем не удается подключиться к mongos

2017-02-09 17:51:23,254 [ERROR] mongo_connector.util:96 - Fatal Exception 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/site-packages/mongo_connector/util.py", line 94, in wrapped 
    func(*args, **kwargs) 
    File "/usr/lib/python2.7/site-packages/mongo_connector/connector.py", line 370, in run 
    'listShards')['shards']: 
    File "/usr/lib/python2.7/site-packages/mongo_connector/util.py", line 78, in retry_until_ok 
    return func(*args, **kwargs) 
    File "/usr/lib64/python2.7/site-packages/pymongo/database.py", line 494, in command 
    codec_options, **kwargs) 
    File "/usr/lib64/python2.7/site-packages/pymongo/database.py", line 406, in _command 
    parse_write_concern_error=parse_write_concern_error) 
    File "/usr/lib64/python2.7/site-packages/pymongo/pool.py", line 419, in command 
    collation=collation) 
    File "/usr/lib64/python2.7/site-packages/pymongo/network.py", line 116, in command 
    parse_write_concern_error=parse_write_concern_error) 
    File "/usr/lib64/python2.7/site-packages/pymongo/helpers.py", line 210, in _check_command_response 
    raise OperationFailure(msg % errmsg, code, response) 
OperationFailure: not authorized on admin to execute command { listShards: 1 } 

Эта страница под необходимых разрешений говорит Самый простой способ получить mongo- разъем работает, чтобы создать пользователя с резервной роли:

https://github.com/mongodb-labs/mongo-connector/wiki/Usage-with-Authentication

db.getSiblingDB("admin").createUser({ user:"backup",pwd:"password_here", roles: ["backup"] }) 

Но я не могу даже связаться с таким пользователем (ошибка аутентификации):

2017-02-10 16:52:01,448 [ERROR] mongo_connector.util:96 - Fatal Exception 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/site-packages/mongo_connector/util.py", line 94, in wrapped 
    func(*args, **kwargs) 
    File "/usr/lib/python2.7/site-packages/mongo_connector/connector.py", line 398, in run 
    hosts, replicaSet=repl_set) 
    File "/usr/lib/python2.7/site-packages/mongo_connector/connector.py", line 299, in create_authed_client 
    client['admin'].authenticate(self.auth_username, self.auth_key) 
    File "/usr/lib64/python2.7/site-packages/pymongo/database.py", line 1048, in authenticate 
    connect=True) 
    File "/usr/lib64/python2.7/site-packages/pymongo/mongo_client.py", line 505, in _cache_credentials 
    sock_info.authenticate(credentials) 
    File "/usr/lib64/python2.7/site-packages/pymongo/pool.py", line 523, in authenticate 
    auth.authenticate(credentials, self) 
    File "/usr/lib64/python2.7/site-packages/pymongo/auth.py", line 470, in authenticate 
    auth_func(credentials, sock_info) 
    File "/usr/lib64/python2.7/site-packages/pymongo/auth.py", line 450, in _authenticate_default 
    return _authenticate_scram_sha1(credentials, sock_info) 
    File "/usr/lib64/python2.7/site-packages/pymongo/auth.py", line 201, in _authenticate_scram_sha1 
    res = sock_info.command(source, cmd) 
    File "/usr/lib64/python2.7/site-packages/pymongo/pool.py", line 419, in command 
    collation=collation) 
    File "/usr/lib64/python2.7/site-packages/pymongo/network.py", line 116, in command 
    parse_write_concern_error=parse_write_concern_error) 
    File "/usr/lib64/python2.7/site-packages/pymongo/helpers.py", line 210, in _check_command_response 
    raise OperationFailure(msg % errmsg, code, response) 
OperationFailure: Authentication failed. 

При входе в mongos с обоими этими пользователями и выполнить команду

db.getSiblingDB("admin").runCommand({ listShards: 1 }) 

Я получаю осколок не листинг без каких-либо Probs

{ 
     "shards" : [ 
       { 
         "_id" : "shard001", 
         "host" : "shard001/timgrhlmdb01:27020,timgrhlmdb02:27020", 
         "state" : 1 
       }, 
       { 
         "_id" : "shard002", 
         "host" : "shard002/timgrhlmdb03:27020,timgrhlmdb04:27020", 
         "state" : 1 
       } 
     ], 
     "ok" : 1 
} 

Так что же это значит:

OperationFailure: авторизованный администратор для выполнения команды {listShards: 1}

Update

Я перестроил кластер с нуля и до сих пор та же проблема: OperationFailure: не авторизована на администратора, чтобы выполнить команду {listShards: 1}

Я также попытался пользователя ' backup 'с только ролями «clusterManager» и «readAnyDatabase». Это позволяет пользователю список осколками, но теперь Монго-разъем терпит неудачу с «Ошибка аутентификации»:

{ "_id" : "admin.backup", "user" : "backup", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "pWcEU7uFqfHPgGe8z+E9Wg==", "storedKey" : "k2tapXQPtM2dHlxYnJiWVxO/rtg=", "serverKey" : "EGG8M4i27OYBy+fLYaL13+Nn4mc=" } }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" }, { "role" : "clusterManager", "db" : "admin" } ] } 
+0

на боковой ноте, документация mongo содержит ошибки https://docs.mongodb.com/manual/tutorial/deploy-sharded-cluster-with-keyfile-access-control/ говорит о создании наборов реплик осколков на config server. также инициализация набора реплик не работает, если идентификатор не находится в кавычках. – stackoverflows

+0

ошибка отправлена ​​https://github.com/mongodb-labs/mongo-connector/issues/662 – stackoverflows

ответ

0

Ответ ошибки представлен MongoDB-лабораторий/Монго-разъем:

This is indeed a subtle bug introduced in #563. We changed a find on config.shards into a call to listShards assuming that it would have no change in behavior. Unfortunately (and annoyingly), the backup role has privileges to read the list of shards in the config.shards collection but, as you can see, does not have the privilege to run the listShards command. I'll revert this change to fix the problem in the upcoming 2.5.1 bug-fix release.

In the meantime, you will need to grant the mongo-connector user the backup AND clusterMonitor roles.

An important point that is not yet mentioned in the documentation is that the user must be created on a mongos and all the shards. This enables mongo-connector to authenticate to the cluster as a whole and to each shard individually.

Это теперь работает! yay

Это научит меня следовать руководству lol!

0

ЗАКАНЧИВАТЬ пользователей, выполнив команду:

db.system.users.find({}) 

Убедитесь, что пользователь, которого вы создали, с ролью backup, если вы можете войти в систему как резервный , и вы также можете запустить эти команды, то есть backup пользователь был создан и получил роль и ее привилегии.


Для выполнения этой функции у вас есть функция clusterManager.

Provides management and monitoring actions on the cluster. A user with this role can access the config and local databases, which are used in sharding and replication, respectively.

Provides the following actions on the cluster as a whole:

  • addShard
  • appendOplogNote
  • applicationMessage
  • cleanupOrphaned
  • flushRouterConfig
  • listShards
  • removeShard etc

Посмотрите на built-in-roles.

Кстати, посмотрите на это issue. Надеюсь, это поможет.

+0

Я создал кластер снова с нуля, но я все еще получаю эту же ошибку. Если я авторизуюсь как admin и запускаю db.system.users.find ({}), он показывает пользовательскую «резервную копию» с ролью «backup» в базе данных «admin». если я запустил db.runCommand ("listShards"), он выдает сообщение Unauthorized. Sooo роль резервного копирования не может отображать осколки ??? – stackoverflows

+0

Если я добавлю роль «root» в пользовательскую «резервную копию», теперь я могу перечислить осколки, но сбой коннектора с ошибкой аутентификации. – stackoverflows

+0

@stackoverflows Кажется, что вы должны выполнить роль «clusterManager» для выполнения этого. Посмотрите на [встроенные роли] (https://docs.mongodb.com/manual/reference/built-in-roles/#clusterManager) – McGrady

Смежные вопросы