공개 SW 솔루션설치 & 활용가이드 시스템 SW > 데이터관리 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide
CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리
- 3-1. 개요 소개 주요기능 MongoDB 는크로스플랫폼도큐먼트지향데이터베이스시스템 NoSQL 데이터베이스로분류되는 MongoDB 는 JSON 과같은동적스키마형문서들 (MongoDB 는이러한포맷을 BSON 이라부름 ) 을선호함에따라전통적인테이블기반관계형데이터베이스구조의사용꺼림 MongoDB 는데이터를유연한 JSON 형식의문서로저장, 즉필드마다문서마다다를수있으며시간이지남에따라데이터구조가변경될수있음 MongoDB 는핵심적인분산데이터베이스이므로고가용성, 수평확장및지리적분포가내장되어사용하기쉬움 대분류 시스템 SW 소분류 데이터관리 라이선스형태 GNU AGPL v3.0 사전설치솔루션 N/A 실행하드웨어 N/A 버전 4.0.2(2018 년 10 월기준 ) 특징보안취약점개발회사 / 커뮤니티공식홈페이지 MongoDB는 Replica set으로고가용성제공 MongoDB는 Sharding을사용하여매우큰데이터와높은처리량의작업지원 취약점 ID : CVE-2016-10572 심각도 : 8.1 HIGH(V3) 취약점설명 : mongodb-instance 암호화되지않은 HTTP 연결을통해실행파일을안전하지않게다운로드 대응방안 : 0.0.3 이상으로업데이트 참고경로 : https://www.npmjs.com/advisories/235 MongoDB / MongoDB Community https://www.mongodb.org
- 4-2. 기능요약 MongoDB 의주요기능 주요기능 Community / Enterprise Replication 기능 Sharding 기능 Transaction 기능 Security 기능 Backup / Restore 기능 지원여부지원지원지원지원지원지원
- 5-3. 실행환경 타 NoSQL Database 비교 구분 Redis Cassandra MongoDB 저장방식 Key/value Store column/column family data Store Document-oriented Store 사용언어 C JAVA C++ 라이선스 BSD Apache Apache 운영체제크로스플랫폼크로스플랫폼크로스플랫폼 최신버전 4.0.11 3.11.3 4.0.3
- 6-4. 설치및실행 세부목차 4.1 사전작업 4.1.1 SELinux 비활성화 4.1.2 Ulimits settings 4.1.3 Transparent Huge Pages 비활성화 4.2 MongoDB 설치 4.2.1 MongoDB Community를수동으로설치하기위한 dependencies 설치 4.2.2 Download and extract the MongoDB Community package 4.2.3 Directory 생성한후에압축을푼 file들을 directory에복사 4.2.4 MongoDB config file 생성 4.2.5 Ensure that the MongoDB binaries are in your PATH 4.3 설치완료 4.3.1 Start MongoDB daemon 4.3.2 Begin using MongoDB
- 7-4. 설치및실행 4.1.1 SELinux 비활성화 SELinux 설정을 disabled로설정하여비활성화 root계정에서실행 변경사항을적용하려면반드시시스템재부팅 SELINUX=disabled
4. 설치및실행 4.1.2 Ulimits settings Ulimits 는단일사용자가너무많은시스템자원을사용하는것방지 한계값이낮으면정상적인 MongoDB 작업중에많은문제발생 root 계정에서실행 한계값을수정한후에반드시재부팅을해야적용 vi /etc/security/limits.conf * hard nproc 64000 * soft nproc 64000 * hard nofile 64000 * soft nofile 64000 ulimit a => -f (file size): unlimited -t (cpu time): unlimited -v (virtual memory): unlimited -n (open files): 64000 -m (memory size): unlimited -u (processes/threads): 64000-8 -
4. 설치및실행 4.1.3 Transparent Huge Pages 비활성화 이작업을하지않고 MongoDB 에접속하면 WARNING 이뜨는것확인 해당경로에있는 enabled 와 defrag 에있는속성이 always 로설정되어있는데, 이것을 never 로변경하라는의미 아래와같이 /etc/rc.local 에들어가 never 로변경하는명령줄을추가한후에저장을하고 실행권한줌 root 계정에서실행 그리고반드시재부팅을해야시스템에서변경사항이영구적으로적용 vi /etc/rc.local echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag chmod +x /etc/rc.local - 9 -
- 10-4. 설치및실행 4.2.1 MongoDB Community 를수동으로설치하기위한 dependencies 설치 MongoDB Community를수동으로설치하려면우선적으로운영체제에맞는 dependencies 설치 root계정에서실행 MongoDB 사이트에서운영체제버전에맞는 dependencies 찾아설치 yum install libcurl openssl
- 11-4. 설치및실행 4.2.2 Download and extract the MongoDB Community package https://www.mongodb.com/download-center에서 file을받은후압축을품 root계정에서실행 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.3.tgz tar -zxvf mongodb-linux-*-4.0.3.tgz
- 12-4. 설치및실행 4.2.3 Directory 생성한후에압축을푼 file 들을 directory 에복사 data file, log file 이저장될 directory 를생성하고, 압축을푼 directory 에있는 file 들을생성한 directory 복사 root 계정에서실행 mkdir -p mongodb/data mongodb/log cp -r mongodb-linux-x86_64-rhel70-4.0.3/* mongodb
- 13-4. 설치및실행 4.2.4 MongoDB config file 생성 환경설정을위하여 config file 을생성한후에필요한설정들작성 root 계정에서실행 systemlog: destination: file logappend: true path: /root/mongodb/log/mongod.log # Where and how to store data. storage: dbpath: /root/mongodb/data journal: enabled: true # how the process runs processmanagement: fork: true pidfilepath: /root/mongodb/config.pid timezoneinfo: /usr/share/zoneinfo # network interfaces net: port: 27017 bindip: 0.0.0.0
4. 설치및실행 4.2.5 Ensure that the MongoDB binaries are in your PATH 현재 MongoDB binary file 은 /root/mongodb/bin directory 에있음 root 계정에서실행 사용자가쉽게데몬구동과접속을할수있도록 alias 생성 vi.bashrc alias mongod='/root/mongodb/bin/mongod' alias mongo='/root/mongodb/bin/mongo source.bashrc - 14 -
- 15-4. 설치및실행 4.3.1 Start MongoDB daemon MongoDB 데몬실행 root계정에서실행 --config 옵션을사용하여 config file의설정을적용한데몬실행 mongod --config /etc/mongod.conf
- 16-4. 설치및실행 4.3.2 Begin using MongoDB 정상적으로데몬이구동되었다면 MongoDB 접속 root계정에서실행 mongo
- 17-5. 기능소개 세부목차 5.1 Database 생성및제거 5.1.1 Database 생성및조회 5.1.2 Database 제거 5.2 Collection 생성및제거 5.2.1 Collection 생성 5.2.2 Collection 조회및제거 5.3 Document 생성및제거 5.3.1 Document 생성 5.3.2 Document 조회 5.3.3 Document 제거 5.4 MongoDB Backup / Restore 5.4.1 MongoDB Backup 5.4.2 MongoDB Restore 5.5 MongoDB 종료
- 18-5. 기능소개 5.1.1 Database 생성및조회 Database 생성 - use database_name 으로생성 - 1개이상의 collection이존재해야 database 리스트에서확인 Database 조회 - show dbs : database 리스트확인 - db : 현재사용중인 database 확인 - db.stats() : database 상태확인
- 19-5. 기능소개 5.1.2 Database 제거 db.dropdatabase() 로 database 제거 use 로해당 database 에스위치하고나서실행해야제거
- 20-5. 기능소개 5.2.1 Collection 생성 db.createcollection(name, [option]) 으로 collection 생성 name은 collection 이름이고, option은 document 타입으로구성된해당 collection의설정값 option 객체의속성들 - capped : Boolean타입, 이값을 true로설정하면 capped collection을활성화, Capped collection 이란고정된크기를가진 collection으로, size가초과되면가장오래된데이터를덮어씀, 이값을 true로설정하면 size 값을꼭설정 - size : number 타입, capped collection을위해해당 collection 최대사이즈를 ~bytes로지정 - max : number 타입, 해당 collection에추가할수있는최대 document 개수를설정
- 21-5. 기능소개 5.2.2 Collection 조회및제거 Collection 조회 - show collections 로 collection 리스트확인 Collection 제거 - db.collection 명.drop() 으로 collection 제거
- 22-5. 기능소개 5.3.1 Document 생성 Document 생성 - db.collection 명.insert(document) 로 document 추가 - 배열형식으로전달하면여러 document 를 bulk 형식으로추가
- 23-5. 기능소개 5.3.2 Document 조회 (2/1) Document 조회 - db.collection 명.find([query, projection]) 로 collection 의 document 리스트확인 - 한줄이너무길어불편할때는끝에.pretty() 를붙이면사용자가보기편하게결과출력
- 24-5. 기능소개 5.3.2 Document 조회 (2/2) Document 조회 - db.collection 명.find([query, projection]) 의매개변수로아래와같은것들이들어갈수있음 query : document 타입, optional 이며, document 를조회할때기준을정함, 기준이없이 collection 에있는모든 document 를조회할때는이매개변수를비우거나, {} 전달 projection : document 타입, optional 이며, document 를조회할때보여질 field 정함
- 25-5. 기능소개 5.3.3 Document 제거 Document 제거 - db.collection 명.remove(criteria[, justone]) 로 document 제거 - 매개변수로들어가는객체의속성들은아래와같음 criteria : document 타입, 데이터의기준값으로일치하면기본적으로다삭제, 이값이 { } 이면 collection 의모든데이터를제거, 반드시넣어야함 justone : Boolean 타입, optional 매개변수이며, 이값이 true 이면 1 개의 document 만제거, 이매개변수가생략되면기본값을 false 이고, criteria 에해당되는모든 document 제거
- 26-5. 기능소개 5.4.1 MongoDB Backup MongoDB Backup - MongoDB 에서 backup / restore 방식이크게 2 가지 1. 특정한 node 에서물리적인장애가발생할경우 (disk crash 등 ) 서비스중인다른 secondary node 에서데이터파일을물리적으로 copy 하여 backup 하는방법 2. mongodump 커맨드를이용하여주기적으로 backup 하여 file 을보관하고, 장애가발생할경우 dump file 을이용하여 restore 하는방법, mongodump 는 MongoDB 설치경로 /bin 에있음 backup 명령어 mongodump --host "IP --port port 번호 --db " 백업할 DB 이름 " -o " 백업파일생성할경로 " ex] /root/mongodb/bin/mongodump --host 192.168.71.101:27017" -o /root/mongodb/backup 현재 MongoDB 에있는모든 DB 를 backup 하는명령 replica set 으로구축한경우에는 backup 수행시성능에영향을미치기때문에 secondary node 에서수행특정 DB 만을 backup 받으려면 db 옵션을사용하면되고, DB 전체를 backup 받으려면생략
- 27-5. 기능소개 5.4.2 MongoDB Restore MongoDB Restore - mongorestore 커맨드로 backup dump file 을이용하여 restore, mongorestore 는 MongoDB 설치경로 /bin 에있음 restore 명령어 /root/mongodb/bin/mongorestore --db DB 명 " 백업파일경로 " ex] /root/mongodb/bin/mongorestore --drop /root/mongodb/backup 현재모든 DB 를 restore 하는명령 --drop 옵션은복구할때, 기존에동일한 collection 이존재할경우삭제하고할것인지에대한설정, 그리고 backup 과마찬가지로특정 DB 만선택적으로복구를하려면 --db 옵션사용
- 28-5. 기능소개 5.5 MongoDB 종료 MongoDB 종료 - ctrl + c 로종료하면불완전한종료이므로, mongo shell에서데몬종료
- 29-6. 활용예제 세부목차 6.1 Replication 정의 6.2 Replica set 구축 6.2.1 방화벽설정 6.2.2 config file 생성 6.2.3 replica set 구성 6.2.4 replica set 상태확인 6.2.5 bulk data insert 6.2.6 auto-failover 동작확인 6.3 Sharding 정의
- 30-6. 활용예제 6.1 Replication 정의 Replication - MongoDB에서는기본적으로 H/A를위해 Replica Set 구성의 Replication 제공, 이로인해, 데이터의일관성및안정성과높은가용성보장 - Read에대한높은성능보장 - Replica Set의경우, 기본적으로 Master-Slave와같은동작방식을보여주지만, Arbiter 등을이용하여사용자임의로새로운 primary를정하는것이가능, 또한재해복구를위한 Auto fail-over 기능지원 - Replica set의경우최소 3 node(1 primary, 2 secondary) 로구성하는것을기본적으로권고하며, Arbiter 라는 secondary node를이용하여구성하는것가능 ( 단, Arbiter node는별도의데이터파일을가지고있지않음 )
- 31-6. 활용예제 6.2.1 방화벽설정 방화벽설정 - 3 개의 node 로 replication 구축을테스트하기위해 node 간통신을주고받으려면시스템방화벽차단 - root 계정에서실행 systemctl stop firewalld.service systemctl disable firewalld.service - 모든 node 적용 - 단, 예제에서는단순구축및구동테스트를위하여시스템방화벽을해제한것이므로, 실제운영상에서는 보안등의문제로방화벽을활성화해야하므로노드간통신을위한 IP 및포트설정필요
6. 활용예제 6.2.2 config file 생성 config file 생성 - replica set 으로구성하기위해서설정파일생성 - root 계정에서실행 systemlog: destination: file logappend: true path: /root/mongodb/log/replica.log storage: dbpath: /root/mongodb/data/ journal: enabled: true processmanagement: fork: true # fork and run in background pidfilepath: /root/mongodb/mongod.pid timezoneinfo: /usr/share/zoneinfo # network interfaces net: port: 27017 bindip: 0.0.0.0 replication: replsetname: "rs1 - 모든 node 에적용 - 32 -
- 33-6. 활용예제 6.2.3 replica set 구성 replica set 구성 - MongoDB 데몬을띄우고 mongoshell 에접속하여 replica set 구성 rs.initiate( { _id : "rs1", members: [ {_id : 0, host : "192.168.71.107:27017"}, {_id : 1, host : "192.168.71.106:27017"}, {_id : 2, host : "192.168.71.108:27017"} ] }) - 하나의 node 에만적용
- 34-6. 활용예제 6.2.4 replica set 상태확인 replica set 상태확인 - rs.status() 명령어를통해현재 replica set 구성상태확인 - replica set 구성을하고일정시간이지나면 > 에서 replica_set_name:[primary, secondary]> 로변경확인
- 35-6. 활용예제 6.2.5 bulk data insert bulk data insert - 동기화가제대로되는지확인하기위해서 primary node 에대량의데이터저장 - secondary node 에서데이터가동기화확인
- 36-6. 활용예제 6.2.6 auto-failover 동작확인 auto-failover 동작확인 - primary node 의 mongodb 데몬을종료한후 secondary node 가 primary 로 auto-failover 확인
- 37-6. 활용예제 6.3 Sharding 정의 Sharding - Automatic Sharding mechanism을이용하여수평확장 (Scale Out) 가능 - Scale Out을통한데이터분산처리가능 - Write에대한높은성능보장 - Sharding 구성환경에서, Query 를분석해서해당하는노드들로리다이렉트시켜주는 Query Route(Mongos) 라는특별한구성요소 ( 노드 ) 필요 - 메타데이터를저장하고있는 Config 서버는 3개의노드가별도로필요로하며, 이 Config 노드는다른노드들과물리적으로별도구성권장
7. FAQ Q Collection schema 를정의하거나변경하려면어떻게해야합니까? A MongoDB에서 Collection을위한 schema를지정할필요가없습니다. 즉, 단일 collection의 document에는동일한 field set가있을필요가없습니다. collection의 document 구조를변경하려면 document를새구조로업데이트하십시오. 예를들어, 새필드를추가하거나기존필드를제거하거나필드값을새유형으로업데이트할수있습니다. Q MongoDB 는트랜잭션을지원합니까? A MongoDB의원자적 single-document 작업은이미대다수의 application의데이터무 결성요구를충족시키는트랜잭션을제공합니다. multiple sub-document 및배열의 업데이트를포함하여하나이상의필드가단일작업으로작성될수있습니다. MongoDB 는 document 가업데이트될때완벽한격리를보장합니다. 오류로인해작 업이롤백되어클라이언트가문서의일관된보기를수신하게됩니다. MongoDB 는 replica set 을위한 multi-document 트랜잭션을제공하고, MongoDB 4.2 부터는 sharded cluster 를위한트랜잭션지원이예정되어있습니다. - 38 -
- 39-8. 용어정리 용어 Collection Document HA Transaction Atomicity( 원자성 ) Consistency( 일관성 ) Isolation( 격리성 ) Durability( 영속성 ) 설명 Collection 은 MongoDB Document 그룹, RDBMS 의 table 과비슷한개념이지만, schema 를따로가지고있지않음 RDBMS 의 record 와비슷한개념, 데이터구조는한개이상의 key-value 쌍으로이루어져있음, Document 끼리다른 schema 를가지고있을수있음, 즉, 서로다른데이터들을가지고있을수있음 서버, 네트워크, 프로그램등의정보시스템이상당히오랜기간동안지속적으로정상운영이가능한성질을의미 하나의논리적인기능을수행하기위한작업의단위, 데이터베이스시스템은각각의트랜잭션에대해원자성, 일관성, 격리성, 영속성을보장 트랜잭션이데이터베이스에모두반영되던가, 아니면전혀반영되지않아야함 트랜잭션이실행을성공적으로완료하면언제나일관성있는데이터베이스상태로변환, 즉트랜잭션실행의결과로데이터베이스상태가모순되지않음 둘이상의트랜잭션이동시에병행실행되고있을경우에어느하나의트랜잭션이라도다른트랜잭션의연산에끼어들수없음 트랜잭션이일단실행을성공적으로완료하면그결과는영속적임, 따라서시스템은어떤경우에도완료된결과의영속성을보장
Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.