MongoDB 설치 및 환경설정
이 글은 MongoDB 설치 및 환경설정에 관한 글이다. 환경설정은 슈퍼유저의 인증을 설정하는 것까지 한다.
Download and Extract
Mongodb 는 Binary 배포를 하고 있다. 홈페이지에 접속해서 설치할 컴퓨터의 운영체제에 맞는 압축 파일을 다운로드 하면 된다. Downlaod URL 도 제공하기 때문에 서버에서 wget, curl 을 이용해서 바로 다운로드도 할 수 있다.
Binary 파일이기 때문에 압축해제 하기만하면 설치가 완료 된다. 압축을 해제하고 나면 다음과 같은 파일들이 나온다.
1 2 3 4 5 6 7 |
mongodb]$ ls -lh 합계 104K -rw-r--r-- 1 instance1 tomcat 34K 4월 28 05:32 GNU-AGPL-3.0 -rw-r--r-- 1 instance1 tomcat 17K 4월 28 05:32 MPL-2 -rw-r--r-- 1 instance1 tomcat 1.4K 4월 28 05:32 README -rw-r--r-- 1 instance1 tomcat 36K 4월 28 05:32 THIRD-PARTY-NOTICES drwxr-xr-x 2 instance1 tomcat 4.0K 6월 4 19:46 bin |
보면알겠지만 달랑 실행을 위한 디렉토리와 파일만 존재한다. 이제 하나하나 설정을 해보자.
디렉토리 생성
먼저, 디렉토리를 생성해야 한다. 설정파일을 담을 디렉토리, 로그 파일을 담을 디렉토리, 데이터를 저장할 디렉토리등이다.
1 2 3 4 5 6 7 8 9 10 11 12 |
]$ mkdir etc log data run ]$ ls -lh 합계 104K -rw-r--r-- 1 instance1 tomcat 34K 4월 28 05:32 GNU-AGPL-3.0 -rw-r--r-- 1 instance1 tomcat 17K 4월 28 05:32 MPL-2 -rw-r--r-- 1 instance1 tomcat 1.4K 4월 28 05:32 README -rw-r--r-- 1 instance1 tomcat 36K 4월 28 05:32 THIRD-PARTY-NOTICES drwxr-xr-x 2 instance1 tomcat 4.0K 6월 4 19:46 bin drwxr-xr-x 4 instance1 tomcat 4.0K 6월 4 21:05 data drwxr-xr-x 3 instance1 tomcat 39 6월 4 21:03 etc drwxr-xr-x 2 instance1 tomcat 23 6월 4 21:03 log drwxr-xr-x 2 instance1 tomcat 23 6월 4 21:03 run |
디렉토리를 생성하고 나면 위와같은 상태가 된다.
mongod.conf 파일 생성
mongodb 를 운영하기 위해서는 설정파일이 필요하다. 이를 위해서 설정파일을 생성해야 한다. 이는 다음의 주소에서 샘플을 구할 수 있다.
기본적인 내용만 되어 있다. 하지만 mongodb 는 Replica set 를 염두해야하기 때문에 이를 위한 설정을 포함하면 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: verbosity: 0 destination: file logAppend: true logRotate: rename timeStampFormat: ctime path: /home/instance1/mongodb/log/mongod.log component: replication: verbosity: 2 # Where and how to store data. storage: dbPath: /home/instance1/mongodb/data journal: enabled: true engine: wiredTiger # mmapv1: wiredTiger: engineConfig: cacheSizeGB: 1 # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /home/instance1/mongodb/run/mongod.pid # location of pidfile # network interfaces net: port: 27017 bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces. maxIncomingConnections: 1024 http: enabled: false #security: operationProfiling: slowOpThresholdMs: 100 mode: off #replication: #sharding: ## Enterprise-Only Options #auditLog: #snmp: |
위 설정 파일을 실제 서버에서 운영하기에는 문제가 있다. 문제가 될만한 설정들은 다음과 같다.
- cacheSizeGB – 엔진의 캐쉬 크기이다. 메뉴얼에 따르면 최소 1GB 이상이여야 한다.
- oplogSizeMB – 리플리케이션을 위한 로그 파일 크기다. 메뉴얼에 따르면 활용가능한 디스크 공간의 5% 다.
실제 서버에서 운영한다면 위 두개의 파라메터를 반드시 운영환경에 맞게 설정을 해야한다. 그리고 운영환경을 위해서 슈퍼유저에 대한 인증을 반드시 설정해야 한다.
슈퍼유저 인증 설정
MongoDB 는 설치를 완료하고 나면 아무런 보안 설정이 없다. 누구나, 아무나 슈퍼유저가 될수 있다. 이를 제안하기 위해서 슈퍼유저에 인증을 설정해야 한다. 이는 서버를 구동하고 나서 해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
]$ ./bin/mongod -f etc/mongod.conf about to fork child process, waiting until server is ready for connections. forked process: 16080 child process started successfully, parent exiting ]$ ./bin/mongo MongoDB shell version: 3.2.6 connecting to: test Server has startup warnings: Sat Jun 4 22:24:48.990 I CONTROL [initandlisten] Sat Jun 4 22:24:48.990 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. Sat Jun 4 22:24:48.990 I CONTROL [initandlisten] ** We suggest setting it to 'never' Sat Jun 4 22:24:48.990 I CONTROL [initandlisten] Sat Jun 4 22:24:48.990 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. Sat Jun 4 22:24:48.990 I CONTROL [initandlisten] ** We suggest setting it to 'never' Sat Jun 4 22:24:48.990 I CONTROL [initandlisten] > use admin switched to db admin > db.createUser( ... { ... user: "admin", ... pwd: "154321", ... roles: [ { role: "root", db: "admin" } ] ... } ... ); Successfully added user: { "user" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ] } > db.shutdownServer() server should be down... 2016-06-04T22:28:11.241+0900 I NETWORK [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed 2016-06-04T22:28:11.241+0900 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused 2016-06-04T22:28:11.241+0900 I NETWORK [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed |
mongod.conf 의 인증과 Replica set 을 해제한 상태에서 해야지만 가능한다. 만일 최초 설치 후에 securiry, replication 부분이 설정이 되어 있다면 위 명령어는 듣지 않는다.
keyFile 생성
keyFile 은 sharded cluster 나 replica set 을 위해서는 keyFile 을 필요로한다. 각 노드간 자신들의 멤머인지 아닌지를 알기 위한 수단이 된다. 이 파일은 각 노드마다 모두 동일해야 한다.
1 2 3 4 |
]$ mdir etc/.keyfile ]$ cd etc/.keyfile ]$ openssl rand -base64 741 > mongodb_keyfile ]$ chmod 600 mongodb_keyfile |
shared cluster, replica set 을 구성한다면 구성을 위한 서버에 이 파일을 각각 배포를 해야 한다.
그리고 다음과 같이 mongod.conf 파일에 keyFile 을 인식시켜준다.
1 2 3 4 |
security: keyFile: "/home/instance1/mongodb/etc/.keyfile/mongodb_keyfile" clusterAuthMode: "keyFile" authorization: "enable" |
위와 같이 한 후에 서버를 다시 시작한다. (앞에서 서버를 shutdown 시켰놨었다.)
1 2 3 4 5 6 7 8 9 10 11 12 |
]$ ./bin/mongod -f etc/mongod.conf $ ./bin/mongo MongoDB shell version: 3.2.6 connecting to: test > use admin switched to db admin > db.auth("admin","154321") 1 > show dbs admin 0.000GB local 0.000GB > |
위와같이 서버로 접속하고 정상적으로 인증이 될 경우에 ‘1’ 을 리턴한다. 그리고 명령어를 쳐보면 실행이 되는 것을 알 수 있다.