Docs Menu

๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”

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

๊ณต์œ  ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ์‚ฌ๋ณธ์„ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„๋Š” ๋‹ค๋ฅธ ๋ฉค๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค. MongoDB๋Š” ์ „์ฒด ์„ธํŠธ๋กœ ์ƒˆ ๊ตฌ์„ฑ์›์„ ์ฑ„์šฐ๋Š” ์ดˆ๊ธฐ ๋™๊ธฐํ™”์™€ ์ „์ฒด ์„ธํŠธ์— ์ง€์†์ ์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” ๋ณต์ œ, ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค local ๋Š” ์ดˆ๊ธฐ ๋™๊ธฐํ™” ํ”„๋กœ์„ธ์Šค ์—์„œ ์‚ฌ์šฉํ•˜๋Š” oplog ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ๋ฉค๋ฒ„์˜ local ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์— ์ดˆ๊ธฐ ๋™๊ธฐํ™” ํ”„๋กœ์„ธ์Šค ๋ฅผ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ oplog ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ์ˆ˜ ์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ดˆ๊ธฐ ๋™๊ธฐํ™” ์ค‘์— MongoDB๋Š” ๋Œ€์ƒ ๋ฉค๋ฒ„์˜ oplog๋ฅผ ์ž˜๋ผ๋ƒ…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ oplog ์ž˜๋ฆผ์€ oplog ๋ฐ์ดํ„ฐ์— ์˜์กดํ•˜๋Š” ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ๊ณผ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

initialSyncSourceReadPreference ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํ˜ธํ•˜๋Š” ์ดˆ๊ธฐ ๋™๊ธฐํ™” ์†Œ์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” mongod์„(๋ฅผ) ์‹œ์ž‘ํ•  ๋•Œ๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MongoDB 5.2๋ถ€ํ„ฐ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋Š” ๋…ผ๋ฆฌ์  ๋™๊ธฐํ™” ๋˜๋Š” ํŒŒ์ผ ๋ณต์‚ฌ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™” ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ผ๋ฆฌ์  ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด MongoDB๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค. ๋ณต์ œํ•˜๋ ค๋ฉด mongod๊ฐ€ ๊ฐ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์„ ์Šค์บ”ํ•˜์—ฌ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด๋‹น ์ปฌ๋ ‰์…˜์˜ ์ž์ฒด ๋ณต์‚ฌ๋ณธ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ฐ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ๋ฌธ์„œ๊ฐ€ ๋ณต์‚ฌ๋  ๋•Œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์˜ ์ธ๋ฑ์Šค๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

  3. ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ ์ค‘์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ oplog ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋Œ€์ƒ ๋…ธ๋“œ์— ์ด ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ ๋‹จ๊ณ„ ๋™์•ˆ ์ด๋Ÿฌํ•œ oplog ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„์ด local ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. mongod๋Š” ์†Œ์Šค์˜ oplog๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•ด๋‹น ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋™๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋…ธ๋“œ๊ฐ€ STARTUP2์ƒํƒœ์—์„œSECONDARY๋กœ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ž์ฒด ๊ด€๋ฆฌํ˜• ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๋ฉค๋ฒ„ ์žฌ๋™๊ธฐํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

MongoDB Enterprise์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋ณต์‚ฌ ๊ธฐ๋ฐ˜ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ํŒŒ์ผ์„ ๋ณต์‚ฌ ๋ฐ ์ด๋™ํ•˜์—ฌ ์ดˆ๊ธฐ ๋™๊ธฐํ™” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋™๊ธฐํ™” ๋ฐฉ๋ฒ•์€ ๋…ผ๋ฆฌ์  ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ณด๋‹ค ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์š”

ํŒŒ์ผ ๋ณต์‚ฌ๋ณธ ๊ธฐ๋ฐ˜ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋กœ ์ธํ•ด ๋ถ€์ •ํ™•ํ•œ ์นด์šดํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋ณต์‚ฌ ๊ธฐ๋ฐ˜ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ž ์—†์ด count() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ˜ํ™˜๋˜๋Š” ๋ฌธ์„œ ์ˆ˜๊ฐ€ ์ •ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ์กฐ๊ฑด์ž๊ฐ€ ์—†๋Š” count ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค: db.<collection>.count().

์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ์ฟผ๋ฆฌ ์กฐ๊ฑด์ž(predicate)๊ฐ€ ์—†๋Š” ๋ถ€์ •ํ™•ํ•œ ์นด์šดํŠธ๋ฅผ์ฐธ์กฐํ•˜์„ธ์š”.

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

ํŒŒ์ผ ๋ณต์‚ฌ ๊ธฐ๋ฐ˜ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋Š” ๋™๊ธฐํ™” ์‹œ ๋Œ€์ƒ ๋…ธ๋“œ์˜ local ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์†Œ์Šค ๋…ธ๋“œ์˜ local ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • ํŒŒ์ผ ๋ณต์‚ฌ ๊ธฐ๋ฐ˜ ์ดˆ๊ธฐ ๋™๊ธฐํ™” ์ค‘์ž…๋‹ˆ๋‹ค:

    • ๋™๊ธฐํ™” ์ค‘์ธ ๋…ธ๋“œ ๋˜๋Š” ๋™๊ธฐํ™” ์›๋ณธ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐฑ์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    • ๋™๊ธฐํ™”๋˜๋Š” ๋ฉค๋ฒ„์˜ local ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋Š” ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ์ง€์ •๋œ ๋ฉค๋ฒ„์—์„œ๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์•”ํ˜ธํ™”๋œ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์‚ฌ์šฉํ•  ๋•Œ MongoDB๋Š” ์†Œ์Šค ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ์„ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

Atlas ์ž๋™ ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋กœ์ปฌ NVMe(Non-Volatile Memory Express) SSD ์ €์žฅ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Atlas NVMe ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ €์žฅ ๊ณต๊ฐ„์˜ 90%๊ฐ€ ๊ฐ€๋“ ์ฐจ๋ฉด ๋‹ค์Œ ์ƒ์œ„ ๊ณ„์ธต์œผ๋กœ ์ž๋™ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋Š” ํ›„์† ๋™๊ธฐํ™”์— ๋น„ํ•ด ์™„๋ฃŒํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ ๋™๊ธฐํ™”์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์„ธ์ปจ๋”๋ฆฌ ๋…ธ๋“œ๊ฐ€ ์ผ์‹œ์ ์ด์ง€ ์•Š์€ ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚˜๋ฉด, ์„ธ์ปจ๋”๋ฆฌ ๋…ธ๋“œ๋Š” ์ดˆ๊ธฐ ๋™๊ธฐํ™” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์„ธ์ปจ๋”๋ฆฌ๋Š” ๋™๊ธฐํ™” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ผ์‹œ์ ์ธ(์ฆ‰, ์ž„์‹œ) ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜, ์ปฌ๋ ‰์…˜ ์ œ๊ฑฐ ๋˜๋Š” ์ปฌ๋ ‰์…˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์ค‘๋‹จ๋œ ๊ฒฝ์šฐ ๋™๊ธฐํ™”๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์„ธ์ปจ๋”๋ฆฌ๋Š” ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— ์ตœ๋Œ€ 10๋ฒˆ๊นŒ์ง€ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋™๊ธฐํ™” ์†Œ์Šค ์„ ํƒ์€ mongod ์Šคํƒ€ํŠธ์—… ๋งค๊ฐœ ๋ณ€์ˆ˜ initialSyncSourceReadPreference์˜ ๊ฐ’์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

  • primary๋กœ ์„ค์ •๋œ initialSyncSourceReadPreference์˜ ๊ฒฝ์šฐ(chaining์ด ๋น„ํ™œ์„ฑ๋œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’) ํ”„๋ผ์ด๋จธ๋ฆฌ ํ•ญ๋ชฉ์„ ๋™๊ธฐํ™” ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ๋กœ๊น…ํ•˜๊ณ  ์ •๊ธฐ์ ์œผ๋กœ ํ”„๋ผ์ด๋จธ๋ฆฌ ๊ฐ€์šฉ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • initialSyncSourceReadPreference๊ฐ€ primaryPreferred๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด(ํˆฌํ‘œํ•˜๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ ๋…ธ๋“œ์˜ ๊ธฐ๋ณธ ์„ค์ •), ํ”„๋ผ์ด๋จธ๋ฆฌ๋ฅผ ๋™๊ธฐํ™” ์†Œ์Šค๋กœ ์„ ํƒํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ๋‚˜๋จธ์ง€ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋…ธ๋“œ ์ค‘์—์„œ ๋™๊ธฐํ™” ์†Œ์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  • ์ง€์›๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์ฝ๊ธฐ ๋ชจ๋“œ์˜ ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋…ธ๋“œ์—์„œ ๋™๊ธฐํ™” ์†Œ์Šค ์„ ํƒ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋™๊ธฐํ™” ์†Œ์Šค ์„ ํƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉค๋ฒ„๋“ค์€ ๋ชจ๋“  ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„ ๋ชฉ๋ก์„ ๋‘ ๋ฒˆ ํ›‘์Šต๋‹ˆ๋‹ค:

๋ฉค๋ฒ„๋Š” ์ดˆ๊ธฐ ๋™๊ธฐํ™” ์†Œ์Šค๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ์ฒซ ๋ฒˆ์งธ ์ „๋‹ฌ์„ ๋งŒ๋“ค ๋•Œ ๊ฐ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„์— ๋‹ค์Œ ๊ธฐ์ค€์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œ PRIMARY ๋˜๋Š” SECONDARY ๋ณต์ œ ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์˜จ๋ผ์ธ ์ƒํƒœ์ด๊ณ  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • initialSyncSourceReadPreference๊ฐ€ secondary ๋˜๋Š” secondaryPreferred ์ธ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์„ธ์ปจ๋”๋ฆฌ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œvisible์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ์˜ ์ตœ์‹  oplog ํ•ญ๋ชฉ์—์„œ 30์ดˆ ์ด๋‚ด์— ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • builds indexes๋…ธ๋“œ์ธ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • votes ๋ฉค๋ฒ„๊ฐ€ ๋ณต์ œ๋ณธ ์„ธํŠธ ํˆฌํ‘œ์— ์†ํ•ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค๋„ ํˆฌํ‘œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ๋ฉค๋ฒ„๊ฐ€ delayed member์ด(๊ฐ€) ์•„๋‹Œ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค ๊ตฌ์„ฑ ์‹œ๊ฐ„์ด ์ง€์—ฐ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ๋ฉค๋ฒ„๊ฐ€ delayed member์ผ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค์˜ ๊ตฌ์„ฑ ์‹œ๊ฐ„ ์ง€์—ฐ์ด ๋‹จ์ถ•๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ๋™๊ธฐํ™” ์†Œ์Šค์˜ ๊ตฌ์„ฑ ์‹œ๊ฐ„์€ ํ˜„์žฌ ์ตœ๊ณ  ๋™๊ธฐํ™” ์†Œ์Šค๋ณด๋‹ค ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ์ง€์—ฐ ์‹œ๊ฐ„์ด ๋‚ฎ์•„์•ผ ํ•จ).

์ฒซ ๋ฒˆ์งธ ์ „๋‹ฌ ์ดํ›„์— ํ›„๋ณด ๋™๊ธฐํ™” ์†Œ์Šค๊ฐ€ ๋‚จ์•„ ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋…ธ๋“œ๋Š” ์™„ํ™”๋œ ๊ธฐ์ค€์œผ๋กœ ๋‘ ๋ฒˆ์งธ ์‹œ๋„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Sync Source Selection (Second Pass)์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

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

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œ PRIMARY ๋˜๋Š” SECONDARY ๋ณต์ œ ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์˜จ๋ผ์ธ ์ƒํƒœ์ด๊ณ  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • initialSyncSourceReadPreference์ด(๊ฐ€) secondary์ธ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์›๋ณธ์€ ์„ธ์ปจ๋”๋ฆฌ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋…ธ๋“œ builds indexes์ธ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ๋™๊ธฐํ™” ์†Œ์Šค์˜ ๊ตฌ์„ฑ ์‹œ๊ฐ„์€ ํ˜„์žฌ ์ตœ๊ณ  ๋™๊ธฐํ™” ์†Œ์Šค๋ณด๋‹ค ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ์ง€์—ฐ ์‹œ๊ฐ„์ด ๋‚ฎ์•„์•ผ ํ•จ).

๋‘ ๋ฒˆ ํ†ต๊ณผํ•œ ํ›„์—๋„ ๋…ธ๋“œ๊ฐ€ ์ดˆ๊ธฐ ๋™๊ธฐํ™” ์†Œ์Šค๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ๋กœ๊น…ํ•˜๊ณ  1์ดˆ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ ํ›„ {0}ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์„ธ์ปจ๋”๋ฆฌ mongod๋Š” ์˜ค๋ฅ˜๋กœ ์ข…๋ฃŒ๋˜๊ธฐ ์ „์— ์ดˆ๊ธฐ ๋™๊ธฐํ™” ์†Œ์Šค ์„ ํƒ ๊ณผ์ •์„ ์ตœ๋Œ€ 10 ๋ฒˆ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Oplog window๋Š” ์„ธ์ปจ๋”๋ฆฌ๊ฐ€ ๋…ผ๋ฆฌ์  ์ดˆ๊ธฐ ๋™๊ธฐํ™” ํ”„๋กœ์„ธ์Šค์˜ ์‹œ์ž‘๊ณผ ๋ ์‚ฌ์ด์— ๋ฐœ์ƒํ•˜๋Š” ์ƒˆ oplog ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๊ธธ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฐฝ์ด ์ถฉ๋ถ„ํžˆ ๊ธธ์ง€ ์•Š์œผ๋ฉด ์ผ๋ถ€ ํ•ญ๋ชฉ์ด ์„ธ์ปจ๋”๋ฆฌ๊ฐ€ ์ ์šฉํ•˜๊ธฐ ์ „์— oplog์—์„œ ๋–จ์–ด์งˆ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

oplog๊ฐœ ํ•ญ๋ชฉ์„ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก oplog์˜ ํฌ๊ธฐ๋ฅผ ๋„‰๋„‰ํ•˜๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ดˆ๊ธฐ ๋™๊ธฐํ™” ๋™์•ˆ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€๋น„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Oplog ํฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„๋Š” ์ดˆ๊ธฐ ๋™๊ธฐํ™” ํ›„ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค. ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„๋Š” ์†Œ์Šค์—์„œ ๋™๊ธฐํ™”๋œ oplog๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋น„๋™๊ธฐ ํ”„๋กœ์„ธ์Šค์—์„œ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. [1]

์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„๋Š” ๋‹ค๋ฅธ ๋ฉค๋ฒ„์˜ ํ•‘ ์‹œ๊ฐ„ ๋ฐ ๋ณต์ œ ์ƒํƒœ์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ ํ•„์š”์— ๋”ฐ๋ผ ์†Œ์Šค์—์„œ ๋™๊ธฐํ™”๋ฅผ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™๊ธฐํ™” ์†Œ์Šค ์„ ํƒ ๊ธฐ์ค€์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ณต์ œ ๋™๊ธฐํ™” ์†Œ์Šค ์„ ํƒ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

[1] ์ด์ œ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„๊ฐ€ ๋Š๋ฆฐ ์ž‘์—… ์ž„๊ณ—๊ฐ’๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” oplog ํ•ญ๋ชฉ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋Š๋ฆฐ oplog ๋ฉ”์‹œ์ง€์˜ ํŠน์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • diagnostic log์— ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„์— ๋Œ€ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • ํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ๊ตฌ์„ฑ ์š”์†Œ ์•„๋ž˜์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ ์ˆ˜์ค€(์‹œ์Šคํ…œ ๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์ˆ˜์ค€)์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • slowOpSampleRate์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ์— ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„์— ๋Œ€ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” ๋Š๋ฆฐ oplog ํ•ญ๋ชฉ์„ ์บก์ฒ˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์†Œ์Šค๋กœ๋ถ€ํ„ฐ์˜ ๋™๊ธฐํ™”๋Š” oplog ํ•ญ๋ชฉ์˜ ์—ฐ์† ์ŠคํŠธ๋ฆผ์„ ๋™๊ธฐํ™” ์„ธ์ปจ๋”๋ฆฌ ํ•ญ๋ชฉ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆฌ๋ฐ ๋ณต์ œ๋Š” ๋ถ€ํ•˜๊ฐ€ ๋†’๊ณ  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ธด ๋„คํŠธ์›Œํฌ์—์„œ ๋ณต์ œ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค์Œ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋ณด์กฐ ๋ฐ์ดํ„ฐ์—์„œ ์ฝ์€ ๋ฐ์ดํ„ฐ์˜ ๋ถ€์‹คํ•จ์„ ๊ฐ์†Œ.

  • ํ”„๋ผ์ด๋จธ๋ฆฌ ํŽ˜์ผ์˜ค๋ฒ„๋กœ ์ธํ•ด w: 1 ์„ค์ •์œผ๋กœ ์“ฐ๊ธฐ ์ž‘์—…์ด ์†์‹ค๋  ์œ„ํ—˜์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

  • w: "majority" ๋ฐ w: >1(์ฆ‰, ๋ณต์ œ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๋ชจ๋“  ์“ฐ๊ธฐ ๊ณ ๋ ค)์„ ์‚ฌ์šฉํ•œ ์“ฐ๊ธฐ ์ž‘์—…์˜ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ž…๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆฌ๋ฐ ๋ณต์ œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ด์ „ ๋ณต์ œ ๋™์ž‘์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด oplogFetcherUsesExhaust ์‹œ์ž‘ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค์—์„œ ๋™๊ธฐํ™”์— ๋ฆฌ์†Œ์Šค ์ œ์•ฝ์ด ์žˆ๊ฑฐ๋‚˜ ๋ณต์ œ๋ฅผ ์œ„ํ•œ MongoDB์˜ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ ์‚ฌ์šฉ์„ ์ œํ•œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ oplogFetcherUsesExhaust ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ false๋กœ ์„ค์ •ํ•˜์„ธ์š”.

MongoDB๋Š” ๋™์‹œ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์“ฐ๊ธฐ ์ž‘์—…์„ ๋ฐฐ์น˜๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. MongoDB๋Š” ๋ฌธ์„œ ID(WiredTiger)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์น˜๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๊ณ , ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์ž‘์—… ๊ทธ๋ฃน์„ ๋™์‹œ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. MongoDB๋Š” ํ•ญ์ƒ ํŠน์ • ๋ฌธ์„œ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์ž‘์—…์„ ์›๋ž˜ ์“ฐ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฝ๊ธฐ ์ž‘์—…์ด ์„ธ์ปจ๋”๋ฆฌ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ  "local" ๋˜๋Š” "majority"์˜ ์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ, ๋ณต์ œ ๋ฐฐ์น˜๊ฐ€ ์ ์šฉ๋˜๋Š” ์„ธ์ปจ๋”๋ฆฌ์— ์ฝ๊ธฐ๊ฐ€ ์ˆ˜ํ–‰๋  ๋•Œ ๋ฐ์ดํ„ฐ์˜ WiredTiger ์Šค๋ƒ…์ƒท์—์„œ ์ฝ์Šต๋‹ˆ๋‹ค.

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

MongoDB 4.2๋ถ€ํ„ฐ ๊ด€๋ฆฌ์ž๋Š” majority committed ์ง€์—ฐ์„ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€๊ฐ’ flowControlTargetLagSeconds์ดํ•˜๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ๊ธฐ๋ณธ์ด ์“ฐ๊ธฐ๋ฅผ ์ ์šฉํ•˜๋Š” ์†๋„๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ํ๋ฆ„ ์ œ์–ด๋Š” enabled ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ 

ํ๋ฆ„ ์ œ์–ด๊ฐ€ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋ณต์ œ๋ณธ ์„ธํŠธ/์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์— 4.2 ์˜ featureCompatibilityVersion(fCV) ๊ณผ majority enabled์˜ ์ฝ๊ธฐ ์šฐ๋ ค ์‚ฌํ•ญ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, fCV๊ฐ€ 4.2 ๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜ ์ฝ๊ธฐ ๋ฌธ์ œ ๊ณผ๋ฐ˜์ˆ˜๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ํ™œ์„ฑํ™”๋œ ํ๋ฆ„ ์ œ์–ด๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ๋ฆ„ ์ œ์–ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ณต์ œ ๋™๊ธฐํ™” ์†Œ์Šค ์„ ํƒ์€ ๋ณต์ œ๋ณธ ์„ธํŠธ chaining ์„ค์ •์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

  • ์ฒด์ธ์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ(๊ธฐ๋ณธ๊ฐ’)์—์„œ๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„๋“ค ์ค‘์—์„œ ๋™๊ธฐํ™” ์†Œ์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  • ์ฒด์ธ์ด ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ ํ”„๋ผ์ด๋จธ๋ฆฌ ์†Œ์Šค๋ฅผ ๋™๊ธฐํ™” ์†Œ์Šค๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ๋กœ๊น…ํ•˜๊ณ  ์ •๊ธฐ์ ์œผ๋กœ ํ”„๋ผ์ด๋จธ๋ฆฌ ๊ฐ€์šฉ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ณต์ œ ๋™๊ธฐํ™” ์†Œ์Šค ์„ ํƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋…ธ๋“œ๋Š” ๋ชจ๋“  ๋ณต์ œ๋ณธ ์„ธํŠธ ๋…ธ๋“œ์˜ ๋ชฉ๋ก์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๋ฒˆ ํ›‘์Šต๋‹ˆ๋‹ค.

๋ฉค๋ฒ„๋Š” ๋ณต์ œ ๋™๊ธฐํ™” ์†Œ์Šค๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ์ฒซ ๋ฒˆ์งธ ์ „๋‹ฌ์„ ๋งŒ๋“ค ๋•Œ ๊ฐ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„์— ๋‹ค์Œ ๊ธฐ์ค€์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œ PRIMARY ๋˜๋Š” SECONDARY ๋ณต์ œ ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์˜จ๋ผ์ธ ์ƒํƒœ์ด๊ณ  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฉค๋ฒ„๋ณด๋‹ค ์ตœ์‹ ์˜ oplog ํ•ญ๋ชฉ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰ ๋™๊ธฐํ™” ์†Œ์Šค๊ฐ€ ๋ฉค๋ฒ„๋ณด๋‹ค ์•ž์„œ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค).

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œvisible์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ์˜ ์ตœ์‹  oplog ํ•ญ๋ชฉ์—์„œ 30์ดˆ ์ด๋‚ด์— ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • builds indexes๋…ธ๋“œ์ธ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • votes ๋ฉค๋ฒ„๊ฐ€ ๋ณต์ œ๋ณธ ์„ธํŠธ ํˆฌํ‘œ์— ์†ํ•ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค๋„ ํˆฌํ‘œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ๋ฉค๋ฒ„๊ฐ€ delayed member์ด(๊ฐ€) ์•„๋‹Œ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค ๊ตฌ์„ฑ ์‹œ๊ฐ„์ด ์ง€์—ฐ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ๋ฉค๋ฒ„๊ฐ€ delayed member์ผ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค์˜ ๊ตฌ์„ฑ ์‹œ๊ฐ„ ์ง€์—ฐ์ด ๋‹จ์ถ•๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ๋™๊ธฐํ™” ์†Œ์Šค์˜ ๊ตฌ์„ฑ ์‹œ๊ฐ„์€ ํ˜„์žฌ ์ตœ๊ณ  ๋™๊ธฐํ™” ์†Œ์Šค๋ณด๋‹ค ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ์ง€์—ฐ ์‹œ๊ฐ„์ด ๋‚ฎ์•„์•ผ ํ•จ).

์ฒซ ๋ฒˆ์งธ ์ „๋‹ฌ ์ดํ›„์— ํ›„๋ณด ๋™๊ธฐํ™” ์†Œ์Šค๊ฐ€ ๋‚จ์•„ ์žˆ์ง€ ์•Š์œผ๋ฉด ๋ฉค๋ฒ„๋Š” ์™„ํ™”๋œ ๊ธฐ์ค€์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๋ฒˆ์งธ ์ „๋‹ฌ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Sync Source Selection (Second Pass)์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋…ธ๋“œ๋Š” ๋ณต์ œ ๋™๊ธฐํ™” ์†Œ์Šค๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๋ฒˆ์งธ ์ „๋‹ฌ์„ ๋งŒ๋“ค ๋•Œ ๊ฐ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋…ธ๋“œ์— ๋‹ค์Œ ๊ธฐ์ค€์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œ PRIMARY ๋˜๋Š” SECONDARY ๋ณต์ œ ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์˜จ๋ผ์ธ ์ƒํƒœ์ด๊ณ  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋…ธ๋“œ builds indexes์ธ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์†Œ์Šค๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ๋™๊ธฐํ™” ์†Œ์Šค์˜ ๊ตฌ์„ฑ ์‹œ๊ฐ„์€ ํ˜„์žฌ ์ตœ๊ณ  ๋™๊ธฐํ™” ์†Œ์Šค๋ณด๋‹ค ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ์ง€์—ฐ ์‹œ๊ฐ„์ด ๋‚ฎ์•„์•ผ ํ•จ).

๋‘ ๋ฒˆ ํ†ต๊ณผํ•œ ํ›„์—๋„ ๋ฉค๋ฒ„๊ฐ€ ๋™๊ธฐํ™” ์†Œ์Šค๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ๋กœ๊น…ํ•˜๊ณ  1์ดˆ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์„ ํƒ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„๋‹น ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํšŸ์ˆ˜๋Š” maxNumSyncSourceChangesPerHour ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ดˆ๊ธฐ ๋™๊ธฐํ™” ์†Œ์Šค๋ฅผ ์„ ํƒํ•  ๋•Œ ์‹œ์ž‘ ๋งค๊ฐœ๋ณ€์ˆ˜ initialSyncSourceReadPreference๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ settings.chainingAllowed ์„ค์ •๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„๊ฐ€ ์ดˆ๊ธฐ ๋™๊ธฐํ™”๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ํ›„์—๋Š” ๋ณต์ œ ๋™๊ธฐํ™” ์†Œ์Šค๋ฅผ ์„ ํƒํ•  ๋•Œ chainingAllowed ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋™๊ธฐํ™” ์†Œ์Šค ์„ ํƒ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ดˆ๊ธฐ ๋™๊ธฐํ™” ์†Œ์Šค ์„ ํƒ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

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