MongoDB警告信息:
1. WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2. WARNING: Access control is not enabled for the database.
3. WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’.
4. WARNING: /sys/kernel/mm/transparent_hugepage/defrag is ‘always’.
1.WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine(強烈建議使用帶WiredTiger存儲引擎的XFS文件系統)
報這個錯是因為我的虛擬環境使用的是EXT4文件系統,官方不建議,但不影響使用
在Linux上運行MongoDB時,官方建議使用Linux內核版本2.6.36或更高版本,使用XFS或EXT4文件系統。 如果可能,最好使用XFS,因為它通常與MongoDB表現更好。
使用WiredTiger存儲引擎,強烈建議使用XFS,以避免在使用EXT4與WiredTiger時可能發生的性能問題。
使用MMAPv1存儲引擎,MongoDB在使用它們之前預先分配其數據庫文件,並經常創建大文件。 因此,官方建議使用XFS或EXT4文件系統。 如果可能,請使用XFS,因為它通常與MongoDB表現更好。
2.WARNING: Access control is not enabled for the database.(數據庫未啟用訪問控制)
報這個錯是因為MongoDB需要有一個安全庫來開啟數據庫訪問控制
在MongoDB部署上啟用訪問控制會強制執行身份驗證,要求用戶識別自己。當訪問啟用了訪問控制的MongoDB部署時,用戶只能執行由其角色確定的操作。
- 不使用訪問控制模式開啟mongdb
root@localhost ~]# mongod --dbpath /var/lib/mongo 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] MongoDB starting : pid=2421 port=27017 dbpath=/var/lib/mongo 64-bit host=localhost.localdomain 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] db version v3.4.9 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] git version: 876ebee8c7dd0e2d992f36a848ff4dc50ee6603e 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] allocator: tcmalloc 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] modules: none 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] build environment: 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] distmod: rhel70 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] distarch: x86_64 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] target_arch: x86_64 2017-09-27T03:06:14.853+0800 I CONTROL [initandlisten] options: { storage: { dbPath: "/var/lib/mongo" } } 2017-09-27T03:06:14.971+0800 I - [initandlisten] Detected data files in /var/lib/mongo created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'. 2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] 2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem 2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1455M,session_max=20000,eviction=(threads_min=4,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), 2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] 2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended. 2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] 2017-09-27T03:06:16.634+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongo/diagnostic.data' 2017-09-27T03:06:16.635+0800 I NETWORK [thread1] waiting for connections on port 27017 2017-09-27T03:06:33.704+0800 I NETWORK [thread1] connection accepted from 127.0.0.1:34808 #1 (1 connection now open) 2017-09-27T03:06:33.705+0800 I NETWORK [conn1] received client metadata from 127.0.0.1:34808 conn1: { application: { name: "MongoDB Shell" }, driver: { name: "MongoDB Internal Client", version: "3.4.9" }, os: { type: "Linux", name: "CentOS Linux release 7.3.1611 (Core) ", architecture: "x86_64", version: "Kernel 3.10.0-514.26.2.el7.x86_64" } } 2017-09-27T03:07:15.311+0800 I COMMAND [conn1] command admin.system.users appName: "MongoDB Shell" command: insert { insert: "system.users", documents: [ { _id: "admin.myUserAdmin", user: "myUserAdmin", db: "admin", credentials: { SCRAM-SHA-1: { iterationCount: 10000, salt: "pUdmLObMsG3wKU7MZDFU1g==", storedKey: "wlCaAzPOS+u7CUqzMKxeZB+DFkE=", serverKey: "KwP12FF1ASziFPVstN8mLrPLg+A=" } }, roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ] } ninserted:1 keysInserted:1 numYields:0 reslen:44 locks:{ Global: { acquireCount: { r: 4, w: 4 } }, Database: { acquireCount: { W: 4 } }, Collection: { acquireCount: { w: 3 } } } protocol:op_query 145ms 2017-09-27T03:07:15.311+0800 I COMMAND [conn1] command admin.$cmd appName: "MongoDB Shell" command: createUser { createUser: "myUserAdmin", pwd: "xxx", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 600000.0 } } numYields:0 reslen:22 locks:{ Global: { acquireCount: { r: 4, w: 4 } }, Database: { acquireCount: { W: 4 } }, Collection: { acquireCount: { w: 3 } } } protocol:op_command 202ms
- 連接到instance
[root@localhost ~]# mongo MongoDB shell version v3.4.9 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.9 Server has startup warnings: 2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] 2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 2017-09-27T03:06:14.971+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem 2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] 2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended. 2017-09-27T03:06:16.364+0800 I CONTROL [initandlisten] 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2017-09-27T03:06:16.365+0800 I CONTROL [initandlisten] >
- 在admin數據庫中創建administrator 用戶
> use admin switched to db admin > db.createUser( ... { ... user: "myUserAdmin", ... pwd: "abc123", ... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] ... } ... ) Successfully added user: { "user" : "myUserAdmin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } > exit bye
- 重啟Mongodb
使用Ctrl+c退出原mongod q^H ^C2017-09-27T03:07:25.685+0800 I CONTROL [signalProcessingThread] got signal 2 (Interrupt), will terminate after current cmd ends 2017-09-27T03:07:25.685+0800 I NETWORK [signalProcessingThread] shutdown: going to close listening sockets... 2017-09-27T03:07:25.685+0800 I NETWORK [signalProcessingThread] closing listening socket: 6 2017-09-27T03:07:25.685+0800 I NETWORK [signalProcessingThread] closing listening socket: 7 2017-09-27T03:07:25.685+0800 I NETWORK [signalProcessingThread] removing socket file: /tmp/mongodb-27017.sock 2017-09-27T03:07:25.685+0800 I NETWORK [signalProcessingThread] shutdown: going to flush diaglog... 2017-09-27T03:07:25.685+0800 I FTDC [signalProcessingThread] Shutting down full-time diagnostic data capture 2017-09-27T03:07:25.687+0800 I STORAGE [signalProcessingThread] WiredTigerKVEngine shutting down 2017-09-27T03:07:25.770+0800 I STORAGE [signalProcessingThread] shutdown: removing fs lock... 2017-09-27T03:07:25.770+0800 I CONTROL [signalProcessingThread] now exiting 2017-09-27T03:07:25.770+0800 I CONTROL [signalProcessingThread] shutting down with code:0
- 開啟訪問控制啟動Mongod
[root@localhost ~]# mongod --auth --dbpath /var/lib/mongo 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] MongoDB starting : pid=2508 port=27017 dbpath=/var/lib/mongo 64-bit host=localhost.localdomain 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] db version v3.4.9 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] git version: 876ebee8c7dd0e2d992f36a848ff4dc50ee6603e 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] allocator: tcmalloc 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] modules: none 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] build environment: 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] distmod: rhel70 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] distarch: x86_64 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] target_arch: x86_64 2017-09-27T03:07:40.034+0800 I CONTROL [initandlisten] options: { security: { authorization: "enabled" }, storage: { dbPath: "/var/lib/mongo" } } 2017-09-27T03:07:40.054+0800 I - [initandlisten] Detected data files in /var/lib/mongo created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'. 2017-09-27T03:07:40.054+0800 I STORAGE [initandlisten] 2017-09-27T03:07:40.054+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 2017-09-27T03:07:40.054+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem 2017-09-27T03:07:40.054+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1455M,session_max=20000,eviction=(threads_min=4,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), 2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended. 2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] 2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] 2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] 2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2017-09-27T03:07:40.420+0800 I CONTROL [initandlisten] 2017-09-27T03:07:40.422+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongo/diagnostic.data' 2017-09-27T03:07:40.422+0800 I NETWORK [thread1] waiting for connections on port 27017 2017-09-27T03:08:07.458+0800 I NETWORK [thread1] connection accepted from 127.0.0.1:34810 #1 (1 connection now open) 2017-09-27T03:08:07.458+0800 I NETWORK [conn1] received client metadata from 127.0.0.1:34810 conn1: { application: { name: "MongoDB Shell" }, driver: { name: "MongoDB Internal Client", version: "3.4.9" }, os: { type: "Linux", name: "CentOS Linux release 7.3.1611 (Core) ", architecture: "x86_64", version: "Kernel 3.10.0-514.26.2.el7.x86_64" } } 2017-09-27T03:08:07.477+0800 I ACCESS [conn1] Successfully authenticated as principal myUserAdmin on admin 2017-09-27T03:08:07.478+0800 I ACCESS [conn1] Unauthorized: not authorized on admin to execute command { getLog: "startupWarnings" } 2017-09-27T03:08:07.665+0800 I ACCESS [conn1] Unauthorized: not authorized on admin to execute command { replSetGetStatus: 1.0, forShell: 1.0 } 2017-09-27T03:08:26.104+0800 I - [conn1] end connection 127.0.0.1:34810 (1 connection now open) 2017-09-27T03:08:29.697+0800 I NETWORK [thread1] connection accepted from 127.0.0.1:34812 #2 (1 connection now open) 2017-09-27T03:08:29.697+0800 I NETWORK [conn2] received client metadata from 127.0.0.1:34812 conn2: { application: { name: "MongoDB Shell" }, driver: { name: "MongoDB Internal Client", version: "3.4.9" }, os: { type: "Linux", name: "CentOS Linux release 7.3.1611 (Core) ", architecture: "x86_64", version: "Kernel 3.10.0-514.26.2.el7.x86_64" } } 2017-09-27T03:08:29.713+0800 I ACCESS [conn2] Successfully authenticated as principal myTester on test 2017-09-27T03:08:29.714+0800 I ACCESS [conn2] Unauthorized: not authorized on admin to execute command { getLog: "startupWarnings" } 2017-09-27T03:08:29.715+0800 I ACCESS [conn2] Unauthorized: not authorized on admin to execute command { replSetGetStatus: 1.0, forShell: 1.0 }
- 剛剛新建的用戶myUserAdmin連接數據
[root@localhost ~]# mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin" MongoDB shell version v3.4.9 connecting to: mongodb://127.0.0.1:27017/ MongoDB server version: 3.4.9 >
創建新數據庫test並在其中創建用戶myTester > use test switched to db test > db.createUser( ... { ... user: "myTester", ... pwd: "xyz123", ... roles: [ { role: "readWrite", db: "test" }, ... { role: "read", db: "reporting" } ] ... } ... ) Successfully added user: { "user" : "myTester", "roles" : [ { "role" : "readWrite", "db" : "test" }, { "role" : "read", "db" : "reporting" } ] } > exit bye
- 使用新建的myTester用戶連接數據庫
[root@localhost ~]# mongo --port 27017 -u "myTester" -p "xyz123" --authenticationDatabase "test" MongoDB shell version v3.4.9 connecting to: mongodb://127.0.0.1:27017/ MongoDB server version: 3.4.9
3.WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’.與4.WARNING: /sys/kernel/mm/transparent_hugepage/defrag is ‘always’.
這兩個問題是CentOS7特有的,因為從CentOS7版本開始會默認啟用Transparent Huge Pages(THP)
Transparent Huge Pages(THP)本意是用來提升內存性能,但某些數據庫廠商還是建議直接關閉THP(比如說Oracle、MariaDB、MongoDB等),否則可能會導致性能出現下降。
- 查看THP狀態
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag [always] madvise never [root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
- 修改系統配置
[root@localhost ~]# vim /etc/rc.d/rc.local #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi [root@localhost ~]# chmod +x /etc/rc.d/rc.local
- 重啟虛擬機
[root@localhost ~]# shutdown -r
- 再次查看THP狀態
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag always madvise [never] [root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
已經改為了禁用THP
- 啟動mongod
[root@localhost ~]# mongod --auth --dbpath /var/lib/mongo 2017-09-27T03:40:50.174+0800 I CONTROL [initandlisten] MongoDB starting : pid=2381 port=27017 dbpath=/var/lib/mongo 64-bit host=localhost.localdomain 2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] db version v3.4.9 2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] git version: 876ebee8c7dd0e2d992f36a848ff4dc50ee6603e 2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] allocator: tcmalloc 2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] modules: none 2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] build environment: 2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] distmod: rhel70 2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] distarch: x86_64 2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] target_arch: x86_64 2017-09-27T03:40:50.175+0800 I CONTROL [initandlisten] options: { security: { authorization: "enabled" }, storage: { dbPath: "/var/lib/mongo" } } 2017-09-27T03:40:50.195+0800 I - [initandlisten] Detected data files in /var/lib/mongo created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'. 2017-09-27T03:40:50.195+0800 I STORAGE [initandlisten] 2017-09-27T03:40:50.195+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 2017-09-27T03:40:50.195+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem 2017-09-27T03:40:50.195+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1455M,session_max=20000,eviction=(threads_min=4,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), 2017-09-27T03:40:50.689+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended. 2017-09-27T03:40:50.689+0800 I CONTROL [initandlisten] 2017-09-27T03:40:50.692+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongo/diagnostic.data' 2017-09-27T03:40:50.693+0800 I NETWORK [thread1] waiting for connections on port 27017
- 進入數據庫
[root@localhost ~]# mongo MongoDB shell version v3.4.9 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.9 >