51
MongoDB in use MongoDB Korea 김김김

Mongo db in use(naver)

Embed Size (px)

Citation preview

Page 1: Mongo db in use(naver)

MongoDB in use

MongoDB Korea 김인범

Page 2: Mongo db in use(naver)

Agenda

I. MongoDB 에 대해 알려진 사실들

II.MongoDB + WiredTiger

III.MongoDB 를 이용하면서 느낀 점

IV.MongoDB 모니터링

V. MongoDB 운영 Tips

Page 3: Mongo db in use(naver)

Intro

저는 김인범입니다 .

MongoDB Korea 에서 활동하고 있습니다 .

커뮤니티 소개는 기회가 된다면 ...

MongoDB 와 관련된 이야기를 하려 합니다 .

Page 4: Mongo db in use(naver)

1. Mon-goDB 에 대해 알려진 사실들 (?)

Page 5: Mongo db in use(naver)

a.k.a?(1) 잘 다운되지 않나요 ?

- 1.x ~ 2.2 release 까지는 불안정의 연속

- 상대적으로 사용이 미숙했던 것도 문제

- 3.x 진입하면서 안정성 확보1. MongoDB 에 대해 알려진 사실들(?)

Page 6: Mongo db in use(naver)

a.k.a?(2) Locking 은 언제쯤 ...

- ~ 2.6 release : DB Level Locking

- 3.0 default : Collection Level Locking

- 3.0 wired Tiger : docu-ment Level Locking

1. MongoDB 에 대해 알려진 사실들(?)

Page 7: Mongo db in use(naver)

a.k.a?(3) MongoDB 는 저 비용으로

구성하기에 알맞다 ?

- 물론 초기에는 저 비용

- 하지만 ..

- 성능 , 용량 , 확장성 ... 다 따지면 \! \! \!1. MongoDB 에 대해 알려진 사실들(?)

Page 8: Mongo db in use(naver)

a.k.a?(4) - Q&A MySQL 보다 좋다 ? 나쁘다 ?

- ( 제 경험으로 ) insert/up-date 시의 read 속도는

- MongoDB 2.6<= MySQL5.5<= MongoDB 3.0

- 데이터 증가할수록 MySQL5.5 < MongoDB 3.0

1. MongoDB 에 대해 알려진 사실들(?)

Page 9: Mongo db in use(naver)

a.k.a?(5) MongoDB 가 Oracle,

MySQL 을 대체 ...?

- 아니요 ...

- 그럴리가요 ...

- 기분 탓일거예요 ...1. MongoDB 에 대해 알려진 사실들(?)

Page 10: Mongo db in use(naver)

a.k.a?(5) MongoDB 가 Oracle,

MySQL 을 대체 ...?

- 물론 미국에서는 Main Stream 으로 진입중

- 하지만 국내에서는 .... 아직 오랑캐 DB

- 서로닮아가는 모습이 특징(Oracle ↔ MongoDB)

1. MongoDB 에 대해 알려진 사실들(?)

Page 11: Mongo db in use(naver)

11. Mon-goDB

+WiredTiger

Page 12: Mongo db in use(naver)

WiredTiger 3.0 release 부터 도입된

WiredTiger

mongodb 사용시 엔진 선택 가능 (--storageEngine=“wiredTiger”)

디폴트 설정시에는 MMAPv1 엔진 사용

3.2 release 부터는 WiredTiger 가 디폴트 !

11. MongoDB + WiredTiger

Page 15: Mongo db in use(naver)

WiredTiger vs TokuMX – Q&A 쿼리 성능 측면에서

TokuMX 가 유리함 ( 특히 insert, update)

두 제품의 data 구조 차이로 인해 성능 차이 발생WiredTiger : B-Tree 데이터 구조

TokuMX : Fractal tree Indexing

11. MongoDB + WiredTiger

Page 16: Mongo db in use(naver)

TokuMX per-formance TokuMX 2.0.1 vs

WiredTiger 3.0

11. MongoDB + WiredTigerhttp://benchmark-docs.readthedocs.org/en/latest/mongodb-sysbench-hppro2.html

Page 17: Mongo db in use(naver)

WiredTiger vs TokuMX – Q&A B-tree vs Fractal Tree

11. MongoDB + WiredTigerhttps://www.bnl.gov/csc/seminars/abstracts/Bender_Presentation.pdf

Page 18: Mongo db in use(naver)

WiredTiger vs TokuMX – Q&A 다만 TokuMX 를 써보니 ...

CPU 과부하 문제가 발생할 수 있으며 ,모니터링 & 조절 가능하다면 TokuMX 추천

TokuMX 는 도입시에 다양한 측면에서테스트가 필요함 (few ref-erence)

11. MongoDB + WiredTiger

Page 19: Mongo db in use(naver)

111. Mon-goDB 를 이용하며

느낀 점

Page 20: Mongo db in use(naver)

피할 수 없는 RDBMS와의 비교 – Q&A(1) 대용량 시스템 운영시

RDBMS 대비 주의할 점

- 제일 중요한 건 모니터링 ! ( 변수가 더 많음 )

- 그 다음 중요한 건 shard key 설정 ( 효과적인 shard key 설정은 서비스 데이터에 대한 이해가 충분히 있어야 함 )

11I. MongoDB 를 이용하며 느낀 점

Page 21: Mongo db in use(naver)

피할 수 없는 RDBMS와의 비교 – Q&A(2) 대용량 시스템 운영시

RDBMS 대비 주의할 점

- 장애시 Contingency Plan 이 명확해야 함

- 용량별 , 시기별 확장 계획이 있다면 좋음

- collection 별로 데이터를 구분하는 습관필요

11I. MongoDB 를 이용하며 느낀 점

Page 22: Mongo db in use(naver)

Script 언어를 알면 유리한 MongoDB script 언어를 알면 Mon-

goDB 활용성 ↑

- 모니터링 shell

- 개인에게 특화된 function 사용

- 다양한 driver 연동11I. MongoDB 를 이용하며 느낀 점

Page 23: Mongo db in use(naver)

MongoDB 를 관리하는 주체는 ...? (1) MongoDB 를 누가 관리할

것인가 ?

- 개발자가 이해하기 쉬운 구조

- 하지만 ~DB 가 붙고 data가 들어와서 DBA 느낌

- 왠지 모니터링도 잘해야 할 것 같으니 서버가이

11I. MongoDB 를 이용하며 느낀 점

Page 24: Mongo db in use(naver)

MongoDB 를 관리하는 주체는 ...? (2) MongoDB 를 누가 관리할

것인가 ?

- 앞서 열거한 역량을 고루 가진 운영자

- devops 성격을 가진 조직 ( 서비스 개발자들이 직접 운영도 수행 ) → flow 이해 빠르고 , bug fix 더 빠름

11I. MongoDB 를 이용하며 느낀 점

Page 25: Mongo db in use(naver)

1V. Mon-goDB 모니터링

Page 26: Mongo db in use(naver)

MongoDB Moni-toring(1) 내부 명령어를 이용한 방법 - mongotop (≒ top ) - mongostat (≒ vmstat )

Shell Scripting 의 조합( 능력자 ver.)

1V. MongoDB 모니터링

Page 27: Mongo db in use(naver)

MongoDB Moni-toring(2) 그 외 tool

1V. MongoDB 모니터링

Page 28: Mongo db in use(naver)

MongoDB Moni-toring(3) 돈을 쓰게 된다면 ...

- Cloud Manager 와 같은 Enterprise version 제품 사용 가능하지만 , - 생각보다 응답시간이 오래 걸림 .

- 이상적인 것은 자체 개발1V. MongoDB 모니터링

Page 29: Mongo db in use(naver)

MongoDB Moni-toring(4) 흥미 롭게 봤던 외부

tool(PandoraFMS)

- Open Source(GPL2) (Ent. Ver 가 따로 존재 )

- Ent. Ver 는 100 agent부터 비용이 책정됨 .1V. MongoDB 모니터링

Page 30: Mongo db in use(naver)

MongoDB Moni-toring(5) 흥미 롭게 봤던 외부

tool(PandoraFMS)

1V. MongoDB 모니터링

Page 31: Mongo db in use(naver)

MongoDB Moni-toring(6) 제가 시도해 보고 있는

방법은 ...

- 브라우저 / 서버 / 데이터베이스에 이르기까지 자바스크립트로 구성된 풀스택 플랫폼

- 실시간 업데이트 가능 ( 매번 빌드 하거나 , 서버를 내렸다 올리지 않아도 자동 갱신 )

1V. MongoDB 모니터링

Page 32: Mongo db in use(naver)

MongoDB Moni-toring(7) 제가 시도해 보고 있는

방법은 ...

- MongoDB 의 Oplog 를 이용한 Monitoring 수행 * oplog : 복제셋 형태로 운영되는 MongoDB 서버간의 동기화를 위해 DB 의 변경사항을 저장하는 로그 - app 구성하기에 따라서 vi-sualization 이 가능

1V. MongoDB 모니터링

Page 33: Mongo db in use(naver)

MongoDB Moni-toring(8) 제가 시도해 보고 있는

방법은 ...

- 해결책으로서 , Meteor 는 data 변화를 탐지하고 observer 를 작동시키기 위해 oplog 를 사용한다 .

- Meteor 는 Primary 를 tailing 하는 Secondary 처럼 행동함

1V. MongoDB 모니터링

Page 34: Mongo db in use(naver)

MongoDB Moni-toring(9) 제가 시도해 보고 있는

방법은 ...

1V. MongoDB 모니터링

Page 35: Mongo db in use(naver)

V. Mon-goDB 운영 Tips

Page 36: Mongo db in use(naver)

Tips 1. 충분한 메모리와 SSD, 그리고 CPU!!

V. 운영 Tips

Page 37: Mongo db in use(naver)

Tips 2. 성능을 고려한다면 동적 스키마를 배제할 것 .

V. 운영 Tips

Page 38: Mongo db in use(naver)

Tips 3. 복제는 필수지만 , 샤딩은 충분히 고려해 볼 것 .

V. 운영 Tips

Page 39: Mongo db in use(naver)

Tips 4. 데이터에 대한 이해가 없다면 , shard Key는 포기할 것 .

V. 운영 Tips

Page 40: Mongo db in use(naver)

Tips 5. 성능 향상을 위해 PageFault 를 최소화할 수 있는 구성을 할 것 .

V. 운영 Tips

Page 41: Mongo db in use(naver)

Tips 6. 필드 네이밍을 짧게할수록 속도 엄~~~청 빨라짐 . (Key-Value 구조에서 key 가 길수록 모두 비용이 됨 )

V. 운영 Tips

Page 42: Mongo db in use(naver)

Tips 7. document resiz-ing 은 엄청난 overhead 발생시키므로 , 더미 필드를 미리 만들어 놓는 것도 방법 중 하나 .V. 운영 Tips

Page 43: Mongo db in use(naver)

Tips 8. fragmentation 발생시 compact 보다‘ usePowerOf2Sizes’ 옵션을 사용하거나 , fragmentation 이 발생하지 않는 스키마 모델링을 할 것 .V. 운영 Tips

Page 44: Mongo db in use(naver)

Tips 9. 급하게 성능을 올려야 한다면 Scale out 보다는 Scale up! scale out 으로 인한 성능 변화가 생각보다 크지 않음 .

V. 운영 Tips

Page 45: Mongo db in use(naver)

Tips 10. release update 에 따른 API 변화 및 deprecated 확인 필요 !

V. 운영 Tips

Page 46: Mongo db in use(naver)

Q & A 추가 항목 : 기존에 shard key 재설정 하려면 Sharding 설정을 다시 해야 됐는데 .. 신규 release 에서도 같은 상황인지 ..V. 운영 Tips

Page 47: Mongo db in use(naver)

Q&A 추가항목Q. 기존에 shard key 재설정 하려면 Sharding 설정을 다시 해야 됐는데 .. 신규 release 에서도 같은 상황인지 ..

A. 우선 신규 release 에서도 기존과 같이 샤딩

재설정은 불가능 . (3.2 공식 매뉴얼 확인 : https://docs.mongodb.org/manual/faq/sharding/#can-i-change-the-shard-key-after-sharding-a-collection )

1V. MongoDB 모니터링

Page 49: Mongo db in use(naver)

참고할 만한 곳 DB 점유율 ranking(http://db-engines.com/en/ranking)

mongodb 학습 사이트(http://university.mongodb.com/)

1V. MongoDB 모니터링

Page 50: Mongo db in use(naver)

Q & A