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

๋ถ„ํ• ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋กค๋ง ์ธ๋ฑ์Šค ๋นŒ๋“œ

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

  • ๊ณ ๋ ค ์‚ฌํ•ญ
  • ์ „์ œ ์กฐ๊ฑด
  • ์ ˆ์ฐจ
  • ์ถ”๊ฐ€ ์ •๋ณด

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

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

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

์ด ์ ˆ์ฐจ๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ์“ฐ๊ธฐ ์ž‘์—…์„ ์ค‘๋‹จํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ํŽ˜์ด์ง€์— ์ด ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ , ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ mongos์—์„œ db.collection.createIndex()๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ปฌ๋ ‰์…˜์— ๊ณ ์œ ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ๋’ค์ณ์ ธ ๋’ค์ณ์ง€์ง€ ์•Š์œผ๋ฉด์„œ ์ธ๋ฑ์‹ฑ ๋˜๋Š” ์žฌ์ธ๋ฑ์‹ฑ ์ž‘์—…์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ Oplog๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ปค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Oplog ํฌ๊ธฐ ์กฐ์ • ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ณ ์œ  ์ธ๋ฑ์Šค ๊ตฌ์ถ•์šฉ
  1. ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์œ  ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์ธ๋ฑ์Šค ๋นŒ๋“œ ์ค‘์— ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ๋ชจ๋“  ์“ฐ๊ธฐ๋ฅผ ์ค‘์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„ ๊ฐ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ๊ด€๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ๋ชจ๋“  ์“ฐ๊ธฐ๋ฅผ ์ค‘์ง€ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์œ  ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”.

    ๊ฒฝ๊ณ 

    ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ๋ชจ๋“  ์“ฐ๊ธฐ๋ฅผ ์ค‘์ง€ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์œ  ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

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

์ค‘์š”

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

mongosh ๋ฅผ ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ mongos ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  sh.stopBalancer() ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค: [1]

sh.stopBalancer()

์ฐธ๊ณ 

์ง„ํ–‰ ์ค‘์ธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์žˆ๋‹ค๋ฉด, ์‹œ์Šคํ…œ์€ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ค‘์ง€ํ•˜๊ธฐ ์ „์— ์ง„ํ–‰ ์ค‘์ธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์™„๋ฃŒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐธ๋Ÿฐ์„œ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด sh.getBalancerState()๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

sh.getBalancerState()
[1] MongoDB์—์„œ ์‹œ์ž‘ํ•˜๊ธฐ 6.0.3๋ถ€ํ„ฐ ์ž๋™ ์ฒญํฌ ๋ถ„ํ• ์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐธ๋Ÿฐ์‹ฑ ์ •์ฑ… ๊ฐœ์„  ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ž๋™ ๋ถ„ํ•  ๋ช…๋ น์€ ์—ฌ์ „ํžˆ ์กด์žฌํ•˜์ง€๋งŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. MongoDB 6.0.3 ์ด์ „ ๋ฒ„์ „์—์„œ sh.stopBalancer()๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ž๋™ ๋ถ„ํ• ๋„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

mongos์— ์—ฐ๊ฒฐ๋œ mongosh์—์„œ ํ•ด๋‹น mongos์˜ ์บ์‹œ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ์ƒˆ๋กœ ๊ณ ์นจํ•˜์—ฌ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์˜ค๋ž˜๋œ ๋ถ„์‚ฐ ์ •๋ณด ๋ฐ˜ํ™˜์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ ๊ณ ์นจ์ด ์™„๋ฃŒ๋˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ๋นŒ๋“œํ•˜๋ ค๋Š” ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด db.collection.getShardDistribution()์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, test ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ records ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์˜ค๋ฆ„์ฐจ์ˆœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

db.adminCommand( { flushRouterConfig: "test.records" } );
db.records.getShardDistribution();

์ด ๋ฉ”์„œ๋“œ๋Š” ์ƒค๋“œ ๋ถ„ํฌ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 3๊ฐœ์˜ ์ƒค๋“œ shardA, shardB, shardC๊ฐ€ ์žˆ๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๊ณ  db.collection.getShardDistribution()์ด ๋‹ค์Œ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Shard shardA at shardA/s1-mongo1.example.net:27018,s1-mongo2.example.net:27018,s1-mongo3.example.net:27018
data : 1KiB docs : 50 chunks : 1
estimated data per chunk : 1KiB
estimated docs per chunk : 50
Shard shardC at shardC/s3-mongo1.example.net:27018,s3-mongo2.example.net:27018,s3-mongo3.example.net:27018
data : 1KiB docs : 50 chunks : 1
estimated data per chunk : 1KiB
estimated docs per chunk : 50
Totals
data : 3KiB docs : 100 chunks : 2
Shard shardA contains 50% data, 50% docs in cluster, avg obj size on shard : 40B
Shard shardC contains 50% data, 50% docs in cluster, avg obj size on shard : 40B

์ถœ๋ ฅ์—์„œ๋Š” shardA ๋ฐ shardC์— test.records์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋งŒ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์„ ์œ„ํ•ด ์ฒญํฌ๊ฐ€ ํฌํ•จ๋œ ๊ฐ ์ƒค๋“œ์˜ ๊ฒฝ์šฐ, ์ƒค๋“œ์— ์ธ๋ฑ์Šค๋ฅผ ๋นŒ๋“œํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

[2](1, 2) ๋‹ค๋ฅธ ํฌํŠธ์—์„œ mongod๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋™์•ˆ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์›๊ณผ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ๊ตฌ์„ฑ์›๊ณผ ์ ‘์ด‰ํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ํฌํŠธ์—์„œ ๋…๋ฆฝ ์‹คํ–‰ํ˜•์œผ๋กœ ์‹คํ–‰ ์ค‘์ธ mongod ์ธ์Šคํ„ด์Šค์— ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๊ณ  ์ด ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ƒˆ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด mongosh๋ฅผ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ , db.collection.createIndex() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ records ์ปฌ๋ ‰์…˜์˜ username ํ•„๋“œ์— ์˜ค๋ฆ„์ฐจ์ˆœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

db.records.createIndex( { username: 1 } )

์ธ๋ฑ์Šค ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด mongod ์ธ์Šคํ„ด์Šค๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๋…๋ฆฝํ˜•์œผ๋กœ ์‹œ์ž‘ํ•  ๋•Œ์˜ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹คํ–‰ ์ทจ์†Œํ•˜์—ฌ ์›๋ž˜ ๊ตฌ์„ฑ์œผ๋กœ ๋Œ์•„๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

skipShardingConfigurationChecks ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ disableLogicalSessionCacheRefresh ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ณต์ œ๋ณธ ์„ธํŠธ ์ƒค๋“œ ๋ฉค๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๊ฐ€ ์ด ๋ฉค๋ฒ„๋ฅผ ๋”ฐ๋ผ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

  1. C1. ์„ธ์ปจ๋”๋ฆฌ ์žฅ์น˜ ํ•˜๋‚˜๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ๋…๋ฆฝํ˜•์œผ๋กœ ์žฌ์‹œ์ž‘

  2. C2. ์ธ๋ฑ์Šค ๋นŒ๋“œ

  3. C3. ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„๋กœ ํ”„๋กœ๊ทธ๋žจ mongod ์žฌ์‹œ์ž‘

์ƒค๋“œ์˜ ๋ชจ๋“  ์„ธ์ปจ๋”๋ฆฌ์— ์ƒˆ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์ƒค๋“œ์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ๋ฅผ ๊ฐ•๋“ฑํ•˜๊ณ  ์œ„์—์„œ ์„ค๋ช…ํ•œ ์ ˆ์ฐจ์— ๋”ฐ๋ผ ๋…๋ฆฝํ˜•์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ๋‹ค์Œ ์ด์ „ ํ”„๋ผ์ด๋จธ๋ฆฌ์— ์ธ๋ฑ์Šค๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

  1. rs.stepDown()์—์„œ mongosh ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ๊ฐ’์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ๊ณ„์  ํ•˜ํ–ฅ์— ์„ฑ๊ณตํ•˜๋ฉด ํ˜„์žฌ ํ”„๋ผ์ด๋จธ๋ฆฌ์ด ์„ธ์ปจ๋”๋ฆฌ๊ฐ€ ๋˜๊ณ  ๋ณต์ œ ์„ธํŠธ ๊ตฌ์„ฑ์›์€ ์ƒˆ ํ”„๋ผ์ด๋จธ๋ฆฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  2. C1. ์„ธ์ปจ๋”๋ฆฌ ์žฅ์น˜ ํ•˜๋‚˜๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ๋…๋ฆฝํ˜•์œผ๋กœ ์žฌ์‹œ์ž‘

  3. C2. ์ธ๋ฑ์Šค ๋นŒ๋“œ

  4. C3. ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„๋กœ ํ”„๋กœ๊ทธ๋žจ mongod ์žฌ์‹œ์ž‘

์ƒค๋“œ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค ๋นŒ๋“œ๋ฅผ ์™„๋ฃŒํ•˜๋ฉด ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋‹ค๋ฅธ ์ƒค๋“œ์— ๋Œ€ํ•ด C. ์ปฌ๋ ‰์…˜ ์ฒญํฌ๊ฐ€ ํฌํ•จ๋œ ์ƒค๋“œ์— ์ธ๋ฑ์Šค ๋นŒ๋“œ๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ƒค๋“œ์— ๋Œ€ํ•œ ๋กค๋ง ์ธ๋ฑ์Šค ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

mongosh๋ฅผ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ mongos ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  sh.startBalancer(): [3]๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

sh.startBalancer()
[3] MongoDB 6.0.3๋ถ€ํ„ฐ๋Š” ๋ฐธ๋Ÿฐ์‹ฑ ์ •์ฑ…์˜ ๊ฐœ์„ ์œผ๋กœ ์ธํ•ด ์ž๋™ ์ฒญํฌ ๋ถ„ํ• ์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž๋™ ๋ถ„ํ•  ๋ช…๋ น์€ ์—ฌ์ „ํžˆ ์กด์žฌํ•˜์ง€๋งŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. MongoDB 6.0.3 ์ด์ „ ๋ฒ„์ „์—์„œ sh.startBalancer()๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ž๋™ ๋ถ„ํ• ๋„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ƒค๋“œ๋œ ์ปฌ๋ ‰์…˜์ด ์ผ๊ด€์„ฑ ์—†๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ฒญํฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ ์ƒค๋“œ์— ์ •ํ™•ํžˆ ๋™์ผํ•œ ์ธ๋ฑ์Šค(์ธ๋ฑ์Šค ์˜ต์…˜ ํฌํ•จ)๊ฐ€ ์—†์„ ๋•Œ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์ž‘์—… ์ค‘์—๋Š” ์ผ๊ด€์„ฑ ์—†๋Š” ์ธ๋ฑ์Šค๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„์•ผ ํ•˜์ง€๋งŒ,

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

  • ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ ์ƒค๋“œ์— ๊ฑธ์ณ ์ธ๋ฑ์Šค๋ฅผ ๋กค๋ง ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์ง€๋งŒ ์—ฐ๊ฒฐ๋œ ์ƒค๋“œ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋นŒ๋“œํ•˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์–‘์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ž˜๋ชป ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

config ์„œ๋ฒ„ ํ”„๋ผ์ด๋จธ๋ฆฌ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์ƒค๋”ฉ๋œ ์ปฌ๋ ‰์…˜์˜ ์ƒค๋“œ ๊ฐ„ ์ธ๋ฑ์Šค ๋ถˆ์ผ์น˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฃผ๊ธฐ์  ๊ฒ€์‚ฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด enableShardedIndexConsistencyCheck ๋ฐ shardedIndexConsistencyCheckIntervalMS๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

serverStatus ๋ช…๋ น์€ config ์„œ๋ฒ„ ํ”„๋ผ์ด๋จธ๋ฆฌ์—์„œ ์‹คํ–‰๋  ๋•Œ ์ธ๋ฑ์Šค ๋ถˆ์ผ์น˜๋ฅผ ๋ณด๊ณ ํ•˜๊ธฐ ์œ„ํ•ด shardedIndexConsistency ํ•„๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ƒค๋“œ ์ปฌ๋ ‰์…˜์— ์ธ๋ฑ์Šค๊ฐ€ ์ผ๊ด€๋˜์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ์ƒค๋“œ์—์„œ ์ผ๊ด€๋˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค ์ฐพ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

โ†ย ๋ณต์ œ๋ณธ ์„ธํŠธ์— ๋Œ€ํ•œ ๋กค๋ง ์ธ๋ฑ์Šค ๋นŒ๋“œ