์์ฒด ๊ด๋ฆฌํ ์ค๋ ํด๋ฌ์คํฐ๋ฅผ ๋ณต์ ๋ณธ ์ธํธ๋ก ๋ณํ
์ด ํ์ด์ง์ ๋ด์ฉ
์ด ํํ ๋ฆฌ์ผ์์๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๋น์ค๋ ๋ณต์ ๋ณธ ์ธํธ ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ๋ณต์ ๋ณธ ์ธํธ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๋ก ๋ณํํ๋ ค๋ฉด ์์ฒด ๊ด๋ฆฌ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ค๋ ํด๋ฌ์คํฐ๋ก ๋ณํ์ ์ฐธ์กฐํ์ธ์. ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค๋ฉ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์์ํ๊ธฐ ์ ์
MongoDB 8.0 ๋ถํฐ directShardOperations
์ญํ ์ ์ฌ์ฉํ์ฌ ์ค๋์ ๋ํด ์ง์ ๋ช
๋ น์ ์คํํด์ผ ํ๋ ์ ์ง ๊ด๋ฆฌ ์์
์ ์ํํ ์ ์์ต๋๋ค.
๊ฒฝ๊ณ
directShardOperations
์ญํ ์ ์ฌ์ฉํ์ฌ ๋ช
๋ น์ ์คํํ๋ฉด ํด๋ฌ์คํฐ ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์๊ณ ๋ฐ์ดํฐ๊ฐ ์์๋ ์ ์์ต๋๋ค. directShardOperations
์ญํ ์ ์ ์ง ๊ด๋ฆฌ ๋ชฉ์ ์ผ๋ก๋ง ์ฌ์ฉํ๊ฑฐ๋ MongoDB ์ง์ ์ ์ง์นจ ์ ๋ฐ๋ผ ์ฌ์ฉํ์ธ์. ์ ์ง ๊ด๋ฆฌ ์์
์ํ์ด ์๋ฃ๋๋ฉด directShardOperations
์ญํ ์ฌ์ฉ์ ์ค์งํฉ๋๋ค.
๋ฒ์ ํธํ์ฑ
์ด ํํ ๋ฆฌ์ผ์ ๋จ๊ณ์๋ MongoDB 6.0 ์ด์์ด ํ์ํฉ๋๋ค.
๊ถํ ๋ถ์ฌ
fsync
๋ฐ fsyncUnlock
๋ช
๋ น์๋ ๊ถํ ๋ถ์ฌ fsync
์กฐ์น ํ์ํ๋ฉฐ, ์ด๋ ์ญํ ๋๋ ์ฌ์ฉ์ ์ง์ ์ญํ ํตํด ํ ๋น๋ ์ ์์ต๋๋ค.hostManager
ํด๋ฌ์คํฐ ๋ณํ ์์ฝ
์ฒญํฌ ๋ง์ด๊ทธ๋ ์ด์ , ๋ฆฌ์ค๋ฉ ๋ฐ ์คํค๋ง ๋ณํ์ด ์ผ๋ฐ์ ์ผ๋ก ์ํ๋์ง ์๋ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ ๋ณํํฉ๋๋ค.
๋ฐธ๋ฐ์ ๋นํ์ฑํ ๋ฐ ํด๋ฌ์คํฐ ์ ๊ธ
๋ฐธ๋ฐ์ ๋นํ์ฑํํ๊ณ ํด๋ฌ์คํฐ ๋ฝ .
mongosh
mongos
๋ฅผ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์ ์ธ์คํด์ค ์ ์ฐ๊ฒฐํฉ๋๋ค.๋ฐธ๋ฐ์ ์ค์งํ๋ ค๋ฉด ์คํ.
sh.stopBalancer() ๋ฐธ๋ฐ์ ๋นํ์ฑํ๋์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํ ํ๊ณ ์ถ๋ ฅ์ด
false
์ธ์ง ํ์ธํฉ๋๋ค.sh.getBalancerState() ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ธฐ๋ฅผ ๋ฐฉ์งํ๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๋ฝ ์คํ.
db.getSiblingDB( "admin" ).fsyncLock() ๋ฝ ํ์ธํ๋ ค๋ฉด ์คํ.
db.getSiblingDB( "admin" ).aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } } ] } } ], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] ) ์ถ๋ ฅ์
fsyncLocked
์ด(๊ฐ)true
(์ด๋ ํด๋ฌ์คํฐ ๊ฐ ์ ๊ฒจ ์์์ ์๋ฏธํจ)๋ก ํ์๋๋์ง ํ์ธํฉ๋๋ค.[ { fsyncLocked: true }, { fsyncUnlocked: false } ]
๋จ์ผ ์ค๋๊ฐ ์๋ ํด๋ฌ์คํฐ๋ฅผ ๋ณต์ ๋ณธ ์ธํธ๋ก ๋ณํํ๊ธฐ
์ค๋๊ฐ ํ๋๋ฟ์ธ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ ํด๋น ์ค๋์ ์ ์ฒด ๋ฐ์ดํฐ ์ธํธ๊ฐ ํฌํจ๋ฉ๋๋ค. ๋ค์ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํด๋ฌ์คํฐ๋ฅผ ์ค๋ฉ๋์ง ์์ ๋ณต์ ๋ณธ ์ธํธ๋ก ๋ณํํฉ๋๋ค.
์์คํ ์ด ์ ๋ณต์ ๋ณธ ์ธํธ๊ฐ ๋ ๋จ์ผ ์ค๋๋ฅผ ํธ์คํ ํ๋ ๋ณต์ ๋ณธ ์ธํธ์ ํ๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ์ ์ฐ๊ฒฐํ๋๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๊ตฌ์ฑํฉ๋๋ค.
mongod
์์--shardsvr
์ต์ ์ ์ ๊ฑฐํฉ๋๋คํ
--shardsvr
์ต์ ์ ๋ณ๊ฒฝํ๋ฉดmongod
์ ์์ ์ฐ๊ฒฐ ํฌํธ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.
๋จ์ผ ์ค๋ ํด๋ฌ์คํฐ๋ ์ด์ ๋ฐ์ดํฐ ์ธํธ์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์ ์ ํ์ฉํ๋ ๋น์ค๋ํ ๋ณต์ ๋ณธ ์ธํธ ์ ๋๋ค.
์ค๋ฉ๋ ํด๋ฌ์คํฐ๋ฅผ ๋ณต์ ๋ณธ ์ธํธ๋ก ๋ณํ
๋ค์ ์ ์ฐจ์ ๋ฐ๋ผ ์ค๋๊ฐ ๋ ๊ฐ ์ด์์ธ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์์ ์์ ํ ์๋ก์ด ๋ณต์ ๋ณธ ์ธํธ๋ก ์ ํํ ์ ์์ต๋๋ค.
์ค๋ฉ๋ ํด๋ฌ์คํฐ ์ ๊ทธ๊ณ ๋ฐธ๋ฐ์ ๋นํ์ฑํํ ์ํ์์ ์ค๋ฉ๋ํด๋ฌ์คํฐ ์ ์ ๋ณต์ ๋ณธ ์ธํธ ๋ฐฐํฌ . ๋ณต์ ๋ณธ ์ธํธ ํ์ฌ ์ค๋์ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ผ์ ๊ฒฐํฉํ ์ํ๋ก ์ ์ฅํ ์ ์๋ ์ถฉ๋ถํ ์ฉ๋ ์์ด์ผ ํฉ๋๋ค. ๋ฐ์ดํฐ ์ ์ก ์ด ์๋ฃ๋ ๋๊น์ง ์ ๋ณต์ ๋ณธ ์ธํธ ์ ์ฐ๊ฒฐํ๋๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑํ์ง ๋ง์ธ์.
์ ํ๋ฆฌ์ผ์ด์ ์ฌ๊ตฌ์ฑํ๊ฑฐ๋ ๋ชจ๋ ์ธ์คํด์ค๋ฅผ
mongos
์ค์งํฉ๋๋ค. ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ์ค์งํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์คmongos
์์ ์ฝ์ ์ ์์ต๋๋ค. ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ์ค์งํ๋mongos
mongos
๊ฒฝ์ฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฐจ๋ฅผ ์ํด ์ก์ธ์ค ํ ์ ์๋ ์์ ์ธ์คํด์ค ์์ํฉ๋๋ค.mongodump ๋ฐ mongorestore๋ฅผ ์ฌ์ฉํ์ฌ
mongos
์ธ์คํด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ณต์ ๋ณธ ์ธํธ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค.config
๋ฅผ ์คํmongorestore
๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ธํฉ๋๋ค. ์ด ์์ ์ ๊ฐ์ด ์ต์ ์--nsExclude
์ฌ์ฉํฉ๋๋ค.mongorestore --nsExclude="config.*" <connection-string> /data/backup ์ฐธ๊ณ
๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ์ปฌ๋ ์ ์ด ๋ฐ๋์ ์ค๋๋๋ ๊ฒ์ ์๋๋๋ค. ์ค๋ ๋ ์ปฌ๋ ์ ๋ง ๋ง์ด๊ทธ๋ ์ด์ ํ์ง ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปฌ๋ ์ ๋ชจ๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ๋๋์ง ํ์ธํฉ๋๋ค.
mongos
์ธ์คํด์ค ๋์ ์ค๋ฉ๋์ง ์์ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ฌ์ฉํ๋๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ๊ตฌ์ฑํฉ๋๋ค.์ค๋ฉ๋ ํด๋ฌ์คํฐ๋ฅผ ๋ณต์ ๋ณธ ์ธํธ๋ก ๋ณํํ ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ์ฐ๊ฒฐ ๋ฌธ์์ด ๋ณต์ ๋ณธ ์ธํธ์ ์ฐ๊ฒฐ ๋ฌธ์์ด๋ก ์ ๋ฐ์ดํธํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์์ํฉ๋๋ค.
์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋ฉ๋์ง ์์ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ์ ์ฌ์ฉํฉ๋๋ค. ์ฌ์ฉํ์ง ์๋ ๋๋จธ์ง ์ค๋ ํด๋ฌ์คํฐ ์ธํ๋ผ๋ฅผ ํ๊ธฐํ ์ ์์ต๋๋ค.
๋ค์ ๋จ๊ณ
์ค๋ฉ๋ ํด๋ฌ์คํฐ ๋ณต์ ๋ณธ ์ธํธ ๋ก ๋ณํํ ํ ๋ค์ ๋จ๊ณ๋ฅผ ์ํํ์ฌ ํด๋ฌ์คํฐ ์ ๊ธ์ ํด์ ํฉ๋๋ค.
ํด๋ฌ์คํฐ ์ ๊ธ์ ํด์ ํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ธฐ๋ฅผ ์ฌ๊ฐํ๋ ค๋ฉด ๋ค์ ์คํ.
db.getSiblingDB( "admin" ).fsyncLock() ์ ๊ธ ํด์ ๋ฅผ ํ์ธํ๋ ค๋ฉด ์คํ.
db.getSiblingDB("admin").aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } } ] } } ], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] ) ์ถ๋ ฅ์
fsyncLocked
์ด(๊ฐ)false
(์ด๋ ํด๋ฌ์คํฐ ์ ์ ๊ธ์ด ํด์ ๋์์์ ์๋ฏธํจ)๋ก ํ์๋๋์ง ํ์ธํฉ๋๋ค.[ { fsyncLocked: false }, { fsyncUnlocked: true } ]