MongoDB 日志中出現“UserNotFound: Could not find user ceilometer@ceilometer”
問題描述
MongoDB(版本 3.2.9) 服務啟動后,Ceilometer-api服務連接 MongoDB 的時候,報認證失敗,導致8777端口一直用不了。
MongoDB 日志報錯,具體如下:
2019-11-04T14:28:46.130+0800 I CONTROL [signalProcessingThread] dbexit: rc: 0 2019-11-04T14:28:53.758+0800 I CONTROL [main] ***** SERVER RESTARTED ***** 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] MongoDB starting : pid=2586 port=27017 dbpath=/var/lib/mongodb 64-bit host=ubuntu 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] db version v3.2.9 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] git version: 22ec9e93b40c85fc7cae7d56e7d6a02fd811088c 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1f 6 Jan 2014 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] allocator: tcmalloc 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] modules: none 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] build environment: 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] distmod: ubuntu1404 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] distarch: x86_64 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] target_arch: x86_64 2019-11-04T14:28:53.765+0800 I CONTROL [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "0.0.0.0", port: 27017 }, storage: { dbPath: "/var/lib/mongodb", engine: "wiredTiger", journal: { enabled: true }, wiredTiger: { collectionConfig: { blockCompressor: "snappy" }, engineConfig: { directoryForIndexes: true, journalCompressor: "snappy" }, indexConfig: { prefixCompression: true } } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } } 2019-11-04T14:28:53.783+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=13G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0), 2019-11-04T14:28:58.241+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongodb/diagnostic.data' 2019-11-04T14:28:58.241+0800 I NETWORK [HostnameCanonicalizationWorker] Starting hostname canonicalization worker 2019-11-04T14:28:58.241+0800 I NETWORK [initandlisten] waiting for connections on port 27017 2019-11-04T14:28:59.019+0800 I NETWORK [initandlisten] connection accepted from 10.117.26.104:44085 #1 (1 connection now open) 2019-11-04T14:28:59.272+0800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:59823 #2 (2 connections now open) 2019-11-04T14:28:59.417+0800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:59824 #3 (3 connections now open) 2019-11-04T14:28:59.418+0800 I ACCESS [conn3] SCRAM-SHA-1 authentication failed for ceilometer on ceilometer from client 127.0.0.1 ; UserNotFound: Could not find user ceilometer@ceilometer 2019-11-04T14:28:59.802+0800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:59825 #4 (4 connections now open) 2019-11-04T14:29:09.420+0800 I ACCESS [conn3] SCRAM-SHA-1 authentication failed for ceilometer on ceilometer from client 127.0.0.1 ; UserNotFound: Could not find user ceilometer@ceilometer 2019-11-04T14:29:19.421+0800 I ACCESS [conn3] SCRAM-SHA-1 authentication failed for ceilometer on ceilometer from client 127.0.0.1 ; UserNotFound: Could not find user ceilometer@ceilometer 2019-11-04T14:29:29.423+0800 I ACCESS [conn3] SCRAM-SHA-1 authentication failed for ceilometer on ceilometer from client 127.0.0.1 ; UserNotFound: Could not find user ceilometer@ceilometer
問題原因
從日志信息中可以看出,MongoDB 中缺少 ceilometer 數據庫 的 ceilometer 賬號。
問題解決
需要在 MongoDB 的 ceilometer 數據庫里創建 ceilometer 賬號。
具體命令如下三條:
mongo use ceilometer; db.createUser( { user: "ceilometer", pwd: "password",roles: [ "readWrite", "dbAdmin" ] } );
【額外補充】
1)3.X 以前版本的 MongoDB 使用 db.addUser 方法創建用戶,使用如下命令:
db.addUser({user: "ceilometer", pwd: "password", roles: [ "readWrite", "dbAdmin" ]});
2)3.X 以后版本的 MongoDB 不再支持 db.addUser 方法創建用戶,必須使用 db.createUser 方法創建用戶,使用如下命令:
db.createUser( { user: "ceilometer", pwd: "password",roles: [ "readWrite", "dbAdmin" ] } );
