๋ฌธ์„œ ๋ฉ”๋‰ด
๋ฌธ์„œ ํ™ˆ
/
MongoDB ๋งค๋‰ด์–ผ
/ / / /

์ž์ฒด ๊ด€๋ฆฌํ˜• ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ณต์›

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ

์ด ์ ˆ์ฐจ๋Š” LVM ์Šค๋ƒ…์ƒท ๊ณผ ๊ฐ™์€ ๊ธฐ์กด ๋ฐฑ์—… ์Šค๋ƒ…์ƒท์—์„œ ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ๋ฐ ๋Œ€์ƒ ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” ๋™์ผํ•œ ์ˆ˜์˜ ์ƒค๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ LVM ์Šค๋ƒ…์ƒท์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ ์Šค๋ƒ…์ƒท์œผ๋กœ ์ž์ฒด ๊ด€๋ฆฌํ˜• ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฑ์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ 

mongodump ๋ฐ mongorestore ๋ฅผ ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฐฑ์—… ์ „๋žต์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋คํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ๊ด€๋ฆฌํ˜• ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฑ์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋˜ํ•œ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ƒค๋“œ ๊ฐ„ ํŠธ๋žœ์žญ์…˜์˜ ์›์ž์„ฑ ๋ณด์žฅ์„ ์œ ์ง€ํ•˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ์ •๋œ ๋ฐฑ์—… ๋ฐ ๋ณต์› ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AES256-GCM ์•”ํ˜ธํ™” ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•”ํ˜ธํ™”๋œ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๊ฒฝ์šฐ AES256-GCM์€ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ‚ค์™€ ํ•จ๊ป˜ ๊ณ ์œ ํ•œ ์นด์šดํ„ฐ ๋ธ”๋ก ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

2} ์•”ํ˜ธ๋กœ ๊ตฌ์„ฑ๋œ ์•”ํ˜ธํ™”๋œ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๊ฒฝ์šฐ: AES256-GCM

  • ํ•ซ ๋ฐฑ์—…์—์„œ ๋ณต์›
    4.2๋ถ€ํ„ฐ "hot" ๋ฐฑ์—…์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ ํŒŒ์ผ์—์„œ ๋ณต์›ํ•˜๋Š” ๊ฒฝ์šฐ(์ฆ‰, mongod๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ), MongoDB๋Š” ์‹œ์ž‘ ์‹œ "๋”ํ‹ฐ" ํ‚ค๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ‚ค๋ฅผ ์ž๋™์œผ๋กœ ๋กค์˜ค๋ฒ„ํ•˜์—ฌ IV(์ดˆ๊ธฐํ™” ๋ฒกํ„ฐ) ์žฌ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝœ๋“œ ๋ฐฑ์—…์—์„œ ๋ณต์›

    ๊ทธ๋Ÿฌ๋‚˜ "cold" ๋ฐฑ์—…์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ ํŒŒ์ผ์—์„œ ๋ณต์›ํ•˜๋Š” ๊ฒฝ์šฐ(์ฆ‰, mongod๊ฐ€ ์‹คํ–‰ ์ค‘์ด ์•„๋‹Œ ๊ฒฝ์šฐ), MongoDB๋Š” ์‹œ์ž‘ ์‹œ "๋”ํ‹ฐ" ํ‚ค๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, IV๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ฐ€์„ฑ ๋ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์ฆ์ด ๋ฌดํšจํ™”๋ฉ๋‹ˆ๋‹ค.

    4.2๋ถ€ํ„ฐ ์ฝœ๋“œ ํŒŒ์ผ ์‹œ์Šคํ…œ ์Šค๋ƒ…์ƒท์—์„œ ๋ณต์›ํ•œ ํ›„ ํ‚ค ์žฌ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด MongoDB๋Š” ์ƒˆ๋กœ์šด ๋ช…๋ น์ค„ ์˜ต์…˜ --eseDatabaseKeyRollover๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. --eseDatabaseKeyRollover ์˜ต์…˜์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉด mongod ์ธ์Šคํ„ด์Šค๋Š” AES256-GCM ์•”ํ˜ธ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ‚ค๋ฅผ ๋กค์˜ค๋ฒ„ํ•˜๊ณ  ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

ํŒ

์ผ๋ฐ˜์ ์œผ๋กœ MongoDB Enterprise์— ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜ ๋ฐฑ์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€๋Šฅํ•˜๋ฉด ํ•ซ ๋ฐฑ์—… ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

์ด ์ ˆ์ฐจ๋Š” ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ ์„œ๋ฒ„ ๋ณต์ œ๋ณธ ์„ธํŠธ(CSRS) ๋ฐ ๊ฐ ์ƒค๋“œ ๋ณต์ œ๋ณธ ์„ธํŠธ์— ๋Œ€ํ•œ ์ƒˆ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์›๋œ CSRS ๋ฐ ์ƒค๋“œ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ์žฌ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ •์ƒ์ด๊ณ  ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ mongo ์…ธ์„ ๊ฐ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„์— ์—ฐ๊ฒฐํ•˜๊ณ  rs.conf()๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ณต์ œ ๊ตฌ์„ฑ ๋ฌธ์„œ๋ฅผ ๋ด…๋‹ˆ๋‹ค.

์†Œ์Šค ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ตฌ์„ฑ ์š”์†Œ ํ•˜๋‚˜ ์ด์ƒ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ๋‚ด๋ถ€ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๊ฐ ์ƒค๋“œ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฐ ๊ตฌ์„ฑ ์„œ๋ฒ„ ๋ณต์ œ๋ณธ ์„ธํŠธ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์š”๊ฑด์„ ์žฌ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ €์žฅ ๊ณต๊ฐ„ ์š”๊ตฌ ์‚ฌํ•ญ
๋Œ€์ƒ ํ˜ธ์ŠคํŠธ ํ•˜๋“œ์›จ์–ด์— ๋ณต์›๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์ถฉ๋ถ„ํ•œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํ† ๋ฆฌ์ง€ ๊ณต๊ฐ„์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ํ˜ธ์ŠคํŠธ์— ๋ณด๊ด€ํ•˜๋ ค๋Š” ๊ธฐ์กด ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ๋ฐ์ดํ„ฐ์™€ ๋ณต์›๋œ ๋ฐ์ดํ„ฐ ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์Šคํ† ๋ฆฌ์ง€ ๊ณต๊ฐ„์ด ์ถฉ๋ถ„ํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
LVM ์š”๊ตฌ ์‚ฌํ•ญ
LVM ์Šค๋ƒ…์ƒท์˜ ๊ฒฝ์šฐ, ์ถ”์ถœ๋œ ์Šค๋ƒ…์ƒท ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ์—ฌ์œ  ๊ณต๊ฐ„์ด ์žˆ๋Š” ๋…ผ๋ฆฌ ๋ณผ๋ฅจ๊ณผ LVM ๊ด€๋ฆฌ ๋ณผ๋ฅจ ๊ทธ๋ฃน์ด ํ•˜๋‚˜ ์ด์ƒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
MongoDB ๋ฒ„์ „ ์š”๊ฑด

๋Œ€์ƒ ํ˜ธ์ŠคํŠธ์™€ ์†Œ์Šค ํ˜ธ์ŠคํŠธ์˜ MongoDB ์„œ๋ฒ„ ๋ฒ„์ „์ด ๋™์ผํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” MongoDB์˜ ๋ฒ„์ „์„ ํ™•์ธํ•˜๋ ค๋ฉด ํ„ฐ๋ฏธ๋„ ๋˜๋Š” ์…ธ์—์„œ mongod --version์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜์— ๋Œ€ํ•œ ์ „์ฒด ๋ฌธ์„œ๋Š” MongoDB ์„ค์น˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹คํ–‰ ์ค‘์ธ MongoDB ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋ณต์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€์ƒ ํ˜ธ์ŠคํŠธ์—์„œ mongod ๋˜๋Š” mongos ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

mongos๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ˜ธ์ŠคํŠธ์˜ ๊ฒฝ์šฐ mongo ์…ธ์„ mongos์— ์—ฐ๊ฒฐํ•˜๊ณ  admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ db.shutdownServer()๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

use admin
db.shutdownServer()

mongod๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ˜ธ์ŠคํŠธ์˜ ๊ฒฝ์šฐ mongo ์…ธ์„ mongod์— ์—ฐ๊ฒฐํ•˜๊ณ  db.hello()๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  • isWritablePrimary๊ฐ€ false์ธ ๊ฒฝ์šฐ mongod๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„์ž…๋‹ˆ๋‹ค. admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ db.shutdownServer()๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • isWritablePrimary๊ฐ€ true์ธ ๊ฒฝ์šฐ, mongod๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ„์ž…๋‹ˆ๋‹ค. ๋จผ์ € ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. rs.status()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๋‹ค๋ฅธ ๋ฉค๋ฒ„๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

    ํ”„๋ผ์ด๋จธ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฉค๋ฒ„๊ฐ€ ์˜คํ”„๋ผ์ธ ์ƒํƒœ์ž„์„ ๊ฐ์ง€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ž‘๋™์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ๊ฐ€ ์ž‘๋™์„ ์ค‘๋‹จํ•œ ํ›„์—๋Š”(db.hello()๊ฐ€ isWritablePrimary: false๋ฅผ ๋ฐ˜ํ™˜) mongod๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ์ค€๋น„

๋ณต์›๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์— ๋Œ€ํ•ด ๋Œ€์ƒ ํ˜ธ์ŠคํŠธ์— ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. mongod๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ ๋ฐ ํ•˜์œ„ ํด๋”์— ๋Œ€ํ•œ ์ฝ๊ธฐ, ์“ฐ๊ธฐ ๋ฐ ์‹คํ–‰ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:

sudo mkdir /path/to/mongodb
sudo chown -R mongodb:mongodb /path/to/mongodb
sudo chmod -R 770 /path/to/mongodb

/path/to/mongodb๋ฅผ ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ๋กœ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. RHEL/CentOS, Amazon Linux ๋ฐ SUSE์—์„œ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ด๋ฆ„์€ mongod์ž…๋‹ˆ๋‹ค.

๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ ์ค€๋น„

๋Œ€์ƒ ํ˜ธ์ŠคํŠธ์— mongod ๋กœ๊ทธ ํŒŒ์ผ์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. mongod๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ ๋ฐ ํ•˜์œ„ ํด๋”์— ๋Œ€ํ•œ ์ฝ๊ธฐ, ์“ฐ๊ธฐ ๋ฐ ์‹คํ–‰ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

sudo mkdir /path/to/mongodb/logs
sudo chown -R mongodb:mongodb /path/to/mongodb/logs
sudo chmod -R 770 /path/to/mongodb/logs

/path/to/mongodb/logs๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. RHEL/CentOS, Amazon Linux ๋ฐ SUSE์—์„œ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ด๋ฆ„์€ mongod์ž…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

์ด ์ ˆ์ฐจ์—์„œ๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ๋กœ mongod๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ์œ„์น˜์— ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. mongod๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:

sudo touch /path/to/mongod.conf
sudo chown mongodb:mongodb /path/to/mongodb/mongod.conf
sudo chmod 644 /path/to/mongodb/mongod.conf

RHEL/CentOS, Amazon Linux ๋ฐ SUSE์—์„œ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ด๋ฆ„์€ mongod์ž…๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์—์„œ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์—ด๊ณ  ๋ฐฐํฌ์— ํ•„์š”ํ•œ ๋Œ€๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” mongod์˜ ์›๋ณธ ๊ตฌ์„ฑ ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํŒŒ์ผ์„ ๋Œ€์ƒ ํ˜ธ์ŠคํŠธ์˜ ์›ํ•˜๋Š” ์œ„์น˜์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

๊ตฌ์„ฑ ํŒŒ์ผ์— ๋‹ค์Œ ์„ค์ •์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • storage.dbPath ๋ฅผ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • systemLog.path ๋ฅผ ์›ํ•˜๋Š” ๋กœ๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • net.bindIp ์—๋Š” ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ IP ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • replication.replSetName ์€ ์ฃผ์–ด์ง„ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๊ฐ ๋ฉค๋ฒ„์—์„œ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

  • sharding.clusterRole ์€ ์ฃผ์–ด์ง„ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๊ฐ ๋ฉค๋ฒ„์—์„œ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

  • ๋˜ํ•œ ์Šค๋ƒ…์ƒท์— ์ง€์ •๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์‹œ์ž‘ ์˜ต์…˜์„ ์ƒˆ ๋ฐฐํฌ์„œ๋ฒ„์— ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1

์›ํ•˜๋Š” ๋ฐฑ์—… ๋ฐฉ๋ฒ•์— ํ•ด๋‹นํ•˜๋Š” ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  1. ๋Œ€์ƒ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— LVM ์Šค๋ƒ…์ƒท์„ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค. LVM ์Šค๋ƒ…์ƒท์„ ๋งˆ์šดํŠธํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋‹จ๊ณ„๋Š” LVM ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

    ๋‹ค์Œ ์˜ˆ์ œ์—์„œ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ์Šค๋ƒ…์ƒท์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ๊ด€๋ฆฌ ๋ฐฐํฌ์„œ๋ฒ„ ๋ฐฑ์—… ๋ฐ ๋ณต์› ์ ˆ์ฐจ ์˜ ์Šค๋ƒ… ์ƒท ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LVM ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

    lvcreate --size 250GB --name mongod-datafiles-snapshot vg0
    gzip -d -c mongod-datafiles-snapshot.gz | dd o/dev/vg0/mongod-datafiles-snapshot
    mount /dev/vg0/mongod-datafiles-snapshot /snap/mongodb

    ์ด ์˜ˆ์ œ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  LVM ๊ตฌ์„ฑ์— ์ ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. LVM ๋ณต์›์— ๊ด€ํ•œ ์ž์„ธํ•œ ์ง€์นจ์€ ํ•ด๋‹น ์‹œ์Šคํ…œ์˜ LVM ์„ค๋ช…์„œ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

  2. ์Šค๋ƒ…์ƒท ๋งˆ์šดํŠธ์˜ mongod ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ B. Prepare the Target Host for Restoration ์—์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    cp -a /snap/mongodb/path/to/mongodb /path/to/mongodb

    -a ์˜ต์…˜์€ ํด๋” ๋ฐ ํŒŒ์ผ ๊ถŒํ•œ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์†Œ์Šค ๊ฒฝ๋กœ์˜ ๋‚ด์šฉ์„ ๋Œ€์ƒ ๊ฒฝ๋กœ์— ์žฌ๊ท€์ ์œผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  3. ๋‹ค์Œ ๊ตฌ์„ฑ ํŒŒ์ผ ์„ค์ •์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.

    #replication
    # replSetName: myCSRSName
    #sharding
    # clusterRole: configsvr

    ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ mongod์„(๋ฅผ) ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋ช…๋ น์ค„์— ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” --config ์˜ต์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    mongod --config /path/to/mongodb/mongod.conf

    mongod๋ฅผ ์‹œ์Šคํ…œ ์„œ๋น„์Šค๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž์—๊ฒŒ ๊ถŒ์žฅ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•˜์„ธ์š”.

    mongod๊ฐ€ ์‹œ์ž‘๋˜๋ฉด mongo ์…ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  1. ์„ ํƒํ•œ ๋ฐฑ์—… ๋ฏธ๋””์–ด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ํ˜ธ์ŠคํŠธ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ฐฑ์—… ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๊ฑฐ๋‚˜, ์†Œํ”„ํŠธ์›จ์–ด ์œ ํ‹ธ๋ฆฌํ‹ฐ์—์„œ ๋ฐฑ์—…์„ ์—ด๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์—์„œ ์ถ”์ถœํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—…์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ์„ ํ˜ธํ•˜๋Š” ๋ฐฑ์—… ๋„๊ตฌ์˜ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ๋ฐฑ์—… ๋ฐ์ดํ„ฐ ์œ„์น˜์˜ mongod ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ B. Prepare the Target Host for Restoration ์—์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    cp -a /backup/mongodb/path/to/mongodb /path/to/mongodb

    -a ์˜ต์…˜์€ ํด๋” ๋ฐ ํŒŒ์ผ ๊ถŒํ•œ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์†Œ์Šค ๊ฒฝ๋กœ์˜ ๋‚ด์šฉ์„ ๋Œ€์ƒ ๊ฒฝ๋กœ์— ์žฌ๊ท€์ ์œผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  3. ๋‹ค์Œ ๊ตฌ์„ฑ ํŒŒ์ผ ์„ค์ •์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.

    #replication
    # replSetName: myCSRSName
    #sharding
    # clusterRole: configsvr
  4. ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ mongod์„(๋ฅผ) ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋ช…๋ น์ค„์— ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” --config ์˜ต์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    mongod --config /path/to/mongodb/mongod.conf

    ์ฐธ๊ณ 

    Cloud Manager ๋˜๋Š” Ops Manager ์ „์šฉ

    Cloud Manager ๋˜๋Š” Ops Manager ๋ฐฑ์—…์˜ ์ˆ˜๋™ ๋ณต์›์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— disableLogicalSessionCacheRefresh ์„œ๋ฒ„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    mongod --config /path/to/mongodb/mongod.conf \
    --setParameter disableLogicalSessionCacheRefresh=true

    mongod๋ฅผ ์‹œ์Šคํ…œ ์„œ๋น„์Šค๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž์—๊ฒŒ ๊ถŒ์žฅ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•˜์„ธ์š”.

    mongod๊ฐ€ ์‹œ์ž‘๋˜๋ฉด mongo ์…ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

2

db.dropDatabase()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ local ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

use local
db.dropDatabase()
3

๋‹ค์Œ ์‚ฌํ•ญ์ด ๋ชจ๋‘ ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ด ์ ˆ์ฐจ ์ค‘์—๋Š” ์ƒค๋“œ ๊ตฌ์„ฑ์› ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์ด ์ ˆ์ฐจ ์ค‘์—๋Š” ์ƒค๋“œ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ shards ์ปฌ๋ ‰์…˜์—์„œ ๋‹ค์Œ find() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. <shardName>์„ ์ƒค๋“œ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒค๋“œ ์ด๋ฆ„์€ ํ•ด๋‹น ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. addShard ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋™์‹œ์— ์‚ฌ์šฉ์ž ์ง€์ • name์„ ์ง€์ •ํ•œ ๊ฒฝ์šฐ, <shardName>์—์„œ ํ•ด๋‹น name์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

use config
db.shards.find( { "_id" : "<shardName>" } )

์ด ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{
"_id" : "shard1",
"host" : "myShardName/alpha.example.net:27018,beta.example.net:27018,charlie.example.net:27018",
"state" : 1
}

์ค‘์š”

_id ๊ฐ’์€ ํ•ด๋‹น ์ƒค๋“œ์— ์žˆ๋Š” _id : "shardIdentity" ๋ฌธ์„œ์˜ shardName ๊ฐ’๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ˆ์ฐจ์˜ ํ›„๋ฐ˜๋ถ€์—์„œ ์ƒค๋“œ๋ฅผ ๋ณต์›ํ•  ๋•Œ shards์˜ _id ํ•„๋“œ๊ฐ€ ์ƒค๋“œ์˜ shardName ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

updateOne() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ hosts ๋ฌธ์ž์—ด์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ƒค๋“œ์˜ ๊ณ„ํš๋œ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„ ๋ฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋ชฉ๋ก์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์ž‘์—…์€ ์ƒค๋“œ์˜ host ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ "_id" : "shard1"๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

db.shards.updateOne(
{ "_id" : "shard1" },
{ $set : { "host" : "myNewShardName/repl1.example.net:27018,repl2.example.net:27018,repl3.example.net:27018" } }
)

๋ชจ๋“  ์ƒค๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ์ƒค๋“œ์— ๋Œ€ํ•ด ๊ณ„ํš๋œ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„๊ณผ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋ชฉ๋ก์„ ์ •ํ™•ํ•˜๊ฒŒ ๋ฐ˜์˜ํ•  ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ƒค๋“œ ์ด๋ฆ„์„ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ, ๋นˆ ํ•„ํ„ฐ ๋ฌธ์„œ {}๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ shards ์ปฌ๋ ‰์…˜์—์„œ find() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

use config
db.shards.find({})

๊ฒฐ๊ณผ ์„ธํŠธ์˜ ๊ฐ ๋ฌธ์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒค๋“œ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ฐ ๋ฌธ์„œ์— ๋Œ€ํ•ด host ํ•„๋“œ์—์„œ ํ•ด๋‹น ์ƒค๋“œ์™€ ์ผ์น˜ํ•˜๋Š” ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด, ์ฆ‰ ์ผ์น˜ํ•˜๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„๊ณผ ๋ฉค๋ฒ„ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋ชฉ๋ก์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. <shardName> ๋Œ€์‹  ํ•ด๋‹น ๋ฌธ์„œ์˜ _id๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

4

mongod๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ตฌ์„ฑ ํŒŒ์ผ ์˜ต์…˜์˜ ์ฃผ์„์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

replication
replSetName: myNewCSRSName
sharding
clusterRole: configsvr

๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— replSetName ํ•„๋“œ๋ฅผ ์ƒˆ ์ด๋ฆ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ๋œ ๊ตฌ์„ฑ ํŒŒ์ผ๋กœ mongod๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

mongod --config /path/to/mongodb/mongod.conf

mongod๋ฅผ ์‹œ์Šคํ…œ ์„œ๋น„์Šค๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž์—๊ฒŒ ๊ถŒ์žฅ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•˜์„ธ์š”.

mongod๊ฐ€ ์‹œ์ž‘๋˜๋ฉด mongo ์…ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

5

๊ธฐ๋ณธ ์„ค์ • ๋ฐ rs.initiate()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

rs.initiate()

์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด rs.status()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉค๋ฒ„๊ฐ€ ํ”„๋ผ์ด๋จธ๋ฆฌ๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

6

CSRS์˜ ๊ฐ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„์— ๋Œ€ํ•ด ํ•ด๋‹น ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ mongod๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‚˜๋จธ์ง€ ๋ฉค๋ฒ„๋ฅผ ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด mongo ์…ธ์„ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ์—์„œ rs.add() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๊ฐ ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ๋กœ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์„ ํฌํ•จํ•˜๊ณ , ๊ทธ ๋’ค์— ๋ฉค๋ฒ„์˜ mongod ํ”„๋กœ์„ธ์Šค์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ํฌํŠธ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

rs.add("config2.example.net:27019")
rs.add("config3.example.net:27019")

ํŠน์ • ๋ณต์ œ๋ณธ member ๊ตฌ์„ฑ ์„ค์ •์ด ์žˆ๋Š” ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ฉค๋ฒ„ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ๋ฐฐํฌ์— ํ•„์š”ํ•œ members ์„ค์ •์„ ์ •์˜ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ rs.add()์— ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

rs.add(
{
"host" : "config2.example.net:27019",
priority: <int>,
votes: <int>,
tags: <int>
}
)

๊ฐ๊ฐ์˜ ์ƒˆ ๋ฉค๋ฒ„๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ๋ฅผ ๋”ฐ๋ผ์žก๊ธฐ ์œ„ํ•ด ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋™๊ธฐํ™”ํ•  ๋ฐ์ดํ„ฐ์˜ ์–‘, ๋„คํŠธ์›Œํฌ ํ† ํด๋กœ์ง€ ๋ฐ ์ƒํƒœ, ๊ฐ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ ์ „์› ๋“ฑ์˜ ์š”์ธ์— ๋”ฐ๋ผ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋™์•ˆ ๋ณต์ œ๋ณธ ์„ธํŠธ๊ฐ€ ์ƒˆ ํ”„๋ผ์ด๋จธ๋ฆฌ๋ฅผ ์„ ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. rs.status()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ํ”„๋ผ์ด๋จธ๋ฆฌ์ธ ๋ฉค๋ฒ„๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ์—์„œ๋Š” rs.add()๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7

rs.reconfig() ๋ฉ”์„œ๋“œ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๊ตฌ์„ฑ ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ„์— ๋Œ€ํ•ด reconfig()๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

A. Review Replica Set Configurations ๋‹จ๊ณ„์—์„œ ์‹๋ณ„ํ•œ ๋Œ€๋กœ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์›๋ž˜ ๊ตฌ์„ฑ ํŒŒ์ผ ์ถœ๋ ฅ์„ ์ฐธ์กฐํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์„ค์ •์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

1

์›ํ•˜๋Š” ๋ฐฑ์—… ๋ฐฉ๋ฒ•์— ํ•ด๋‹นํ•˜๋Š” ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  1. ๋Œ€์ƒ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— LVM ์Šค๋ƒ…์ƒท์„ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค. LVM ์Šค๋ƒ…์ƒท์„ ๋งˆ์šดํŠธํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋‹จ๊ณ„๋Š” LVM ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

    ๋‹ค์Œ ์˜ˆ์ œ์—์„œ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ์Šค๋ƒ…์ƒท์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ๊ด€๋ฆฌ ๋ฐฐํฌ์„œ๋ฒ„ ๋ฐฑ์—… ๋ฐ ๋ณต์› ์ ˆ์ฐจ ์˜ ์Šค๋ƒ… ์ƒท ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LVM ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

    lvcreate --size 250GB --name mongod-datafiles-snapshot vg0
    gzip -d -c mongod-datafiles-snapshot.gz | dd o/dev/vg0/mongod-datafiles-snapshot
    mount /dev/vg0/mongod-datafiles-snapshot /snap/mongodb

    ์ด ์˜ˆ์ œ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  LVM ๊ตฌ์„ฑ์— ์ ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. LVM ๋ณต์›์— ๊ด€ํ•œ ์ž์„ธํ•œ ์ง€์นจ์€ ํ•ด๋‹น ์‹œ์Šคํ…œ์˜ LVM ์„ค๋ช…์„œ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

  2. mongod ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์Šค๋ƒ…์ƒท ๋งˆ์šดํŠธ์—์„œ B. Prepare the Target Host for Restoration์— ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    cp -a /snap/mongodb/path/to/mongodb /path/to/mongodb

    -a ์˜ต์…˜์€ ํด๋” ๋ฐ ํŒŒ์ผ ๊ถŒํ•œ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์†Œ์Šค ๊ฒฝ๋กœ์˜ ๋‚ด์šฉ์„ ๋Œ€์ƒ ๊ฒฝ๋กœ์— ์žฌ๊ท€์ ์œผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  3. ๋‹ค์Œ ๊ตฌ์„ฑ ํŒŒ์ผ ์„ค์ •์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.

    #replication
    # replSetName: myShardName
    #sharding
    # clusterRole: shardsvr

    ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ mongod์„(๋ฅผ) ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋ช…๋ น์ค„์— ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” --config ์˜ต์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    mongod --config /path/to/mongodb/mongod.conf

    mongod๋ฅผ ์‹œ์Šคํ…œ ์„œ๋น„์Šค๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž์—๊ฒŒ ๊ถŒ์žฅ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•˜์„ธ์š”.

    mongod๊ฐ€ ์‹œ์ž‘๋˜๋ฉด mongo ์…ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  1. ์„ ํƒํ•œ ๋ฐฑ์—… ๋ฏธ๋””์–ด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ํ˜ธ์ŠคํŠธ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ฐฑ์—… ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๊ฑฐ๋‚˜, ์†Œํ”„ํŠธ์›จ์–ด ์œ ํ‹ธ๋ฆฌํ‹ฐ์—์„œ ๋ฐฑ์—…์„ ์—ด๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์—์„œ ์ถ”์ถœํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—…์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ์„ ํ˜ธํ•˜๋Š” ๋ฐฑ์—… ๋„๊ตฌ์˜ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ๋ฐฑ์—… ๋ฐ์ดํ„ฐ ์œ„์น˜์˜ mongod ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ B. Prepare the Target Host for Restoration ์—์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    cp -a /backup/mongodb/path/to/mongodb /path/to/mongodb

    -a ์˜ต์…˜์€ ํด๋” ๋ฐ ํŒŒ์ผ ๊ถŒํ•œ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์†Œ์Šค ๊ฒฝ๋กœ์˜ ๋‚ด์šฉ์„ ๋Œ€์ƒ ๊ฒฝ๋กœ์— ์žฌ๊ท€์ ์œผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  3. ๋‹ค์Œ ๊ตฌ์„ฑ ํŒŒ์ผ ์„ค์ •์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.

    #replication
    # replSetName: myShardName
    #sharding
    # clusterRole: shardsvr
  4. ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ mongod์„(๋ฅผ) ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋ช…๋ น์ค„์— ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” --config ์˜ต์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    mongod --config /path/to/mongodb/mongod.conf

    ์ฐธ๊ณ 

    Cloud Manager ๋˜๋Š” Ops Manager ์ „์šฉ

    Cloud Manager ๋˜๋Š” Ops Manager ๋ฐฑ์—…์˜ ์ˆ˜๋™ ๋ณต์›์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— disableLogicalSessionCacheRefresh ์„œ๋ฒ„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    mongod --config /path/to/mongodb/mongod.conf \
    --setParameter disableLogicalSessionCacheRefresh=true

    mongod๋ฅผ ์‹œ์Šคํ…œ ์„œ๋น„์Šค๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž์—๊ฒŒ ๊ถŒ์žฅ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•˜์„ธ์š”.

    mongod๊ฐ€ ์‹œ์ž‘๋˜๋ฉด mongo ์…ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

2

์ด ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ admin.system.version ์ปฌ๋ ‰์…˜์˜ ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„ ์ ์šฉํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒฝ์šฐ __system ์—ญํ• ์—๋งŒ ์ด ์ปฌ๋ ‰์…˜์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ธ์ฆ์„ ์ ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 

__system ์—ญํ• ์€ ์†Œ์œ ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ˆ์ฐจ์—๋Š” ์ด ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•œ ์‚ฌ์šฉ์ž๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ˆ์ฐจ์˜ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ์ด ์‚ฌ์šฉ์ž๋ฅผ ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์ง€ ๋งˆ์„ธ์š”.

์ง€์ •๋œ ํ˜ธ์ŠคํŠธ๋งŒ ๊ถŒํ•œ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋กœ ์ธ์ฆํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ๋œ clientSource ์ธ์ฆ ์ œํ•œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

  1. admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ userAdmin ์—ญํ•  ๋˜๋Š” userAdminAnyDatabase ์—ญํ• ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋กœ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค:

    use admin
    db.auth("myUserAdmin","mySecurePassword")
  2. __system ์—ญํ• ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    db.createUser(
    {
    user: "mySystemUser",
    pwd: "<replaceMeWithAStrongPassword>",
    roles: [ "__system" ]
    }
    )

    ์‹œ์Šคํ…œ ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๊ณ  ์•…์˜์ ์ธ ์•ก์„ธ์Šค๋ฅผ ๋ฐฉ์ง€ํ•˜๊ฑฐ๋‚˜ ์ง€์—ฐํ•˜๋ ค๋ฉด ์•”ํ˜ธ๋Š” ์ž„์˜์ ์ด๊ณ  ๊ธธ๋ฉฐ ๋ณต์žกํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  3. ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž๋กœ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค:

    db.auth("mySystemUser","<replaceMeWithAStrongPassword>")
3

db.dropDatabase()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ local ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

use local
db.dropDatabase()
4

์ƒค๋“œ ๋‚ด๋ถ€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ system.version ์ปฌ๋ ‰์…˜์—์„œ ๋‹ค์Œ deleteOne() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

use admin
db.system.version.deleteOne( { _id: "minOpTimeRecovery" } )

์ฐธ๊ณ 

system.version ์ปฌ๋ ‰์…˜์€ ๋‚ด๋ถ€ ์‹œ์Šคํ…œ ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๊ตฌ์ฒด์ ์ธ ์ง€์นจ์ด ์žˆ์„ ๋•Œ๋งŒ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

5

๋‹ค์Œ ์‚ฌํ•ญ์ด ๋ชจ๋‘ ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ด ์ ˆ์ฐจ ์ค‘์— CSRS ํ˜ธ์ŠคํŠธ์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

  • ์ด ์ ˆ์ฐจ ์ค‘์— CSRS ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ system.version ์ปฌ๋ ‰์…˜์— CSRS ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜์—ฌ ์ƒค๋“œ์™€ ๊ด€๋ จ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. CSRS๋ฅผ ๋ณต์›ํ•˜๋Š” ๋™์•ˆ CSRS ์ด๋ฆ„ ๋˜๋Š” ๋ฉค๋ฒ„ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ system.version ์ปฌ๋ ‰์…˜์—์„œ ๋‹ค์Œ find() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

use admin
db.system.version.find( {"_id" : "shardIdentity" } )

find() ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค:

{
"_id" : "shardIdentity",
"clusterId" : ObjectId("2bba123c6eeedcd192b19024"),
"shardName" : "shard1",
"configsvrConnectionString" : "myCSRSName/alpha.example.net:27019,beta.example.net:27019,charlie.example.net:27019" }

๋‹ค์Œ updateOne() ๋ฉ”์„œ๋“œ๋Š” host ๋ฌธ์ž์—ด์ด ๊ฐ€์žฅ ์ตœ์‹  CSRS ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ ๋‚˜ํƒ€๋‚ด๋„๋ก ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค:

db.system.version.updateOne(
{ "_id" : "shardIdentity" },
{ $set :
{ "configsvrConnectionString" : "myNewCSRSName/config1.example.net:27019,config2.example.net:27019,config3.example.net:27019"}
}
)

์ค‘์š”

shardName ๊ฐ’์€ CSRS์˜ shards ์ปฌ๋ ‰์…˜์— ์žˆ๋Š” _id ๊ฐ’๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CSRS์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ƒค๋“œ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. CSRS ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ์ด ์ ˆ์ฐจ์˜ C. Restore Config Server Replica Set ๋ถ€๋ถ„์— ์žˆ๋Š” 3 ํ•˜์œ„ ๋‹จ๊ณ„๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

6

mongod๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ตฌ์„ฑ ํŒŒ์ผ ์˜ต์…˜์˜ ์ฃผ์„์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

replication
replSetName: myNewShardName
sharding
clusterRole: shardsvr

๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— replSetName ํ•„๋“œ๋ฅผ ์ƒˆ ์ด๋ฆ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ๋œ ๊ตฌ์„ฑ ํŒŒ์ผ๋กœ mongod๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

mongod --config /path/to/mongodb/mongod.conf

mongod๋ฅผ ์‹œ์Šคํ…œ ์„œ๋น„์Šค๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž์—๊ฒŒ ๊ถŒ์žฅ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•˜์„ธ์š”.

mongod๊ฐ€ ์‹œ์ž‘๋˜๋ฉด mongo ์…ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

7

๊ธฐ๋ณธ ์„ค์ • ๋ฐ rs.initiate()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

rs.initiate()

์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด rs.status()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉค๋ฒ„๊ฐ€ ํ”„๋ผ์ด๋จธ๋ฆฌ๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

8

์ƒค๋“œ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๊ฐ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„์— ๋Œ€ํ•ด ํ•ด๋‹น ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ mongod๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‚˜๋จธ์ง€ ๋ฉค๋ฒ„๋ฅผ ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด mongo ์…ธ์„ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ์—์„œ rs.add() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๊ฐ ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ๋กœ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์„ ํฌํ•จํ•˜๊ณ , ๊ทธ ๋’ค์— ๋ฉค๋ฒ„์˜ mongod ํ”„๋กœ์„ธ์Šค์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ํฌํŠธ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

rs.add("repl2.example.net:27018")
rs.add("repl3.example.net:27018")

ํŠน์ • ๋ณต์ œ๋ณธ member ๊ตฌ์„ฑ ์„ค์ •์ด ์žˆ๋Š” ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ฉค๋ฒ„ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ๋ฐฐํฌ์— ํ•„์š”ํ•œ members ์„ค์ •์„ ์ •์˜ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ rs.add()์— ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

rs.add(
{
"host" : "repl2.example.net:27018",
priority: <int>,
votes: <int>,
tags: <int>
}
)

๊ฐ๊ฐ์˜ ์ƒˆ ๋ฉค๋ฒ„๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ๋ฅผ ๋”ฐ๋ผ์žก๊ธฐ ์œ„ํ•ด ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋™๊ธฐํ™”ํ•  ๋ฐ์ดํ„ฐ์˜ ์–‘, ๋„คํŠธ์›Œํฌ ํ† ํด๋กœ์ง€ ๋ฐ ์ƒํƒœ, ๊ฐ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ ์ „์› ๋“ฑ์˜ ์š”์ธ์— ๋”ฐ๋ผ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋™์•ˆ ๋ณต์ œ๋ณธ ์„ธํŠธ๊ฐ€ ์ƒˆ ํ”„๋ผ์ด๋จธ๋ฆฌ๋ฅผ ์„ ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. rs.status()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ํ”„๋ผ์ด๋จธ๋ฆฌ์ธ ๋ฉค๋ฒ„๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ์—์„œ๋Š” rs.add()๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

9

rs.reconfig() ๋ฉ”์„œ๋“œ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๊ตฌ์„ฑ ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ„์— ๋Œ€ํ•ด reconfig()๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

A. Review Replica Set Configurations ๋‹จ๊ณ„์—์„œ ์‹๋ณ„ํ•œ ๋Œ€๋กœ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์›๋ž˜ ๊ตฌ์„ฑ ํŒŒ์ผ ์ถœ๋ ฅ์„ ์ฐธ์กฐํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์„ค์ •์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

10

์ธ์ฆ์„ ์‹œํ–‰ํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒฝ์šฐ ์ด ์ ˆ์ฐจ์˜ ์•ž๋ถ€๋ถ„์—์„œ ์ƒ์„ฑ๋œ ๊ถŒํ•œ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

  1. admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ userAdmin ์—ญํ•  ๋˜๋Š” userAdminAnyDatabase ์—ญํ• ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋กœ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค:

    use admin
    db.auth("myUserAdmin","mySecurePassword")
  2. ๊ถŒํ•œ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค:

    db.removeUser("mySystemUser")

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ฐ mongos๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

mongos --config /path/to/config/mongos.conf

๋ฐฐํฌ์— ํ•„์š”ํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ช…๋ น์ค„ ์˜ต์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

CSRS ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„ ๋˜๋Š” ๋ฉค๋ฒ„ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ mongos ๊ตฌ์„ฑ ํŒŒ์ผ ์„ค์ • sharding.configDB๋ฅผ ์—…๋ฐ์ดํŠธ๋œ ๊ตฌ์„ฑ ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค:

sharding:
configDB: "myNewCSRSName/config1.example.net:27019,config2.example.net:27019,config3.example.net:27019"

mongo ์…ธ์„ ํด๋Ÿฌ์Šคํ„ฐ์˜ mongos ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. sh.status()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. sh.status()๊ฐ€ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ด๋ฉด sh.startBalancer()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. [1]

๋ชจ๋“  ์ƒค๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ณ  ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ์ž„์‹œ ์ƒค๋“œ ์ปฌ๋ ‰์…˜์— ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ์ƒค๋“œ ๊ฐ„์— ๋ถ„ํ•  ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. mongo ์…ธ์„ ๊ฐ ์ƒค๋“œ ํ”„๋ผ์ด๋จธ๋ฆฌ์— ์—ฐ๊ฒฐํ•˜๊ณ  db.collection.find()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ƒค๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[1] MongoDB 4.2๋ถ€ํ„ฐ sh.startBalancer() ๋Š” ์ƒค๋”ฉ๋œ cluster์— ๋Œ€ํ•œ ์ž๋™ ๋ถ„ํ• ๋„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋Œ์•„๊ฐ€๊ธฐ

๋ฐฑ์—… ์˜ˆ์•ฝ

๋‹ค์Œ

๋…๋ฆฝํ˜• ๋ณต๊ตฌ