์์ญ์ ์ฌ์ฉํ์ฌ ์ปฌ๋ ์ ๋ฐฐํฌํ๊ธฐ
์ด ํ์ด์ง์ ๋ด์ฉ
์ค๋ฉ๋ ํด๋ฌ์คํฐ์์๋ ์ค๋ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค๋ ๋ฐ์ดํฐ์ ์์ญ์ ๋ง๋ค ์ ์์ต๋๋ค. ๊ฐ ์์ญ์ ํด๋ฌ์คํฐ์ ์๋ ํ๋ ์ด์์ ์ค๋์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ค๋๋ ์ฌ๋ฌ ๊ฐ์ ์์ญ๊ณผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ๊ท ํ ์กํ ํด๋ฌ์คํฐ์์ MongoDB๋ ์์ญ์ ํฌํจ๋ ์ฒญํฌ๋ฅผ ํด๋น ์์ญ๊ณผ ๊ด๋ จ๋ ์ค๋๋ก๋ง ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค.
๊ตฌ์ญ ์ค๋ฉ์ ์ฌ์ฉํ์ฌ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์ ์ฒด์ ์ปฌ๋ ์ ์ ๋ฐฐํฌํ๊ณ ๊ฐ ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ค๋๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค ๋ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ค๋ ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ปฌ๋ ์ ์ ๋ฐฐํฌํ์ฌ ๊ฐ ์ปฌ๋ ์ ์ด ํด๋น ๋ฐ์ดํฐ์ ๋ํ ์ต์ ์ ์ค๋์ ์ ์ฅ๋๋๋ก ํ ์ ์์ต๋๋ค.
์ ์ ์กฐ๊ฑด
์ด ํํ ๋ฆฌ์ผ์ ์๋ฃํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
์ค๋ฉ๋ ํด๋ฌ์คํฐ ๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋ ์ธ ๊ฐ์ ์ค๋๊ฐ ์๋ ์ค๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
mongos
์ ์ฐ๊ฒฐํฉ๋๋ค. ์ค๋์ ์ง์ ์ฐ๊ฒฐํ์ฌ ๊ตฌ์ญ ๋๋ ๊ตฌ์ญ ๋ฒ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ต์ํ
clusterManager
์ญํ ์ ๊ฐ์ง ์ฌ์ฉ์๋ก ์ธ์ฆํฉ๋๋ค. ์ฌ์ฉ์ ๊ถํ์ ๋ณด๋ ค๋ฉด
db.getUser()
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Scenario
๋ ๊ฐ์ ์ค๋ฉ๋ ์ปฌ๋ ์
์ด ํฌํจ๋ shardDistributionDB
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ ์์ต๋๋ค.
bigData
, ๋ง์ ์์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.manyIndexes
, ๋ง์ ํฐ ์ธ๋ฑ์ค๋ฅผ ํฌํจํฉ๋๋ค.
๊ฐ ์ปฌ๋ ์ ์ด ์ค๋์ ์๋ก ๋ค๋ฅธ ๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ ์ปฌ๋ ์ ์ ์ค๋์ ํ์ ์งํฉ์ผ๋ก ์ ํํ๋ ค๊ณ ํฉ๋๋ค.
์ํคํ ์ฒ
์ค๋ฉ๋ ํด๋ฌ์คํฐ๋ 3๊ฐ์ ์ค๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ ์ค๋์๋ ๊ณ ์ ํ ๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค๊ฐ ์์ต๋๋ค.
์ค๋ ์ด๋ฆ | ๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค |
---|---|
| ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋ |
| ๋น ๋ฅธ ํ๋์ ์ ์ฅ |
| ๊ณ ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋น ๋ฅธ ํ๋์ ์คํ ๋ฆฌ์ง |
Zones
๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปฌ๋ ์ ์ ๋ฐฐํฌํ๋ ค๋ฉด ์ค๋ ์์ญ์ ์ฌ์ฉํฉ๋๋ค. ์ค๋ ์์ญ์ ์ปฌ๋ ์ ์ ํน์ ์ค๋ ํ์ ์งํฉ๊ณผ ์ฐ๊ฒฐํ์ฌ ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ค๋๋ฅผ ์ ํํฉ๋๋ค. ์ด ์์์์๋ ๋ ๊ฐ์ ์ค๋ ์์ญ์ด ํ์ํฉ๋๋ค.
๊ตฌ์ญ ์ด๋ฆ | ์ค๋ช
| ์ด ๊ตฌ์ญ์ ์ปฌ๋ ์
|
---|---|---|
| ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ด ํฐ ์๋ฒ์ ๋๋ค. | ์ธ๋ฑ์ค๊ฐ ํฐ ์ปฌ๋ ์
๊ณผ ๊ฐ์ด ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ ์ปฌ๋ ์
์ |
| ๋น ๋ฅธ ์ ์ฅ ์๋๋ฅผ ์ํ ํ๋์ ๋๋ผ์ด๋ธ๊ฐ ์ฅ์ฐฉ๋ ์๋ฒ. | ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์์ด ํ์ํ ๋๊ท๋ชจ collection์ |
์ค๋ ํค
์ด ํํ ๋ฆฌ์ผ์์ ๊ฐ ์ปฌ๋ ์
์ ์ค๋ ํ๋ ๋ฐ ์ฌ์ฉํ ์ค๋ ํค ๋ { _id: "hashed" }
์
๋๋ค. ์ปฌ๋ ์
์ ์ค๋ ํ๊ธฐ ์ ์ ์ค๋ ์์ญ์ ๊ตฌ์ฑํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ ์ปฌ๋ ์
์ ๋ฐ์ดํฐ๋ ํด๋น ๊ตฌ์ญ ์ ์ค๋์๋ง ์กด์ฌํฉ๋๋ค.
ํด์๋ ์ค๋ฉ์ ๊ฒฝ์ฐ ์์ญ์ ๊ตฌ์ฑํ๊ธฐ ์ ์ ์ปฌ๋ ์ ์ ์ค๋ฉํ๋ฉด ์ค๋ฉ์ด ํ์ฑํ๋๋ฉด MongoDB๋ ๋ชจ๋ ์ค๋ ๊ฐ์ ์ฒญํฌ๋ฅผ ๊ท ๋ฑํ๊ฒ ํ ๋นํฉ๋๋ค. ์ฆ, ์ฒญํฌ๊ฐ ํด๋น ์ฒญํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ์ ์ ํฉํ์ง ์์ ์ค๋์ ์ผ์์ ์ผ๋ก ํ ๋น๋ ์ ์์ต๋๋ค.
๋ฐธ๋ฐ์
๋ฐธ๋ฐ์๋ ๊ตฌ์ฑ๋ ๋ชจ๋ ์์ญ๊ณผ ๊ด๋ จํ์ฌ ์ฒญํฌ๋ฅผ ์ ์ ํ ๋ถํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค. ๋ฐธ๋ฐ์ฑ์ด ์๋ฃ๋๋ฉด ์ค๋์๋ ํ ๋น๋ ์์ญ๊ณผ ๋ฒ์๊ฐ ์ผ์นํ๋ ์ฒญํฌ๋ง ํฌํจ๋ฉ๋๋ค.
์ค์
์ฑ๋ฅ
๊ตฌ์ญ ๋ฒ์๋ฅผ ์ถ๊ฐ, ์ ๊ฑฐ ๋๋ ๋ณ๊ฒฝํ๋ฉด ์ฒญํฌ ๋ง์ด๊ทธ๋ ์ด์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ฐ์ดํฐ ์ธํธ์ ํฌ๊ธฐ์ ๊ตฌ์ญ ๋ฒ์๊ฐ ์ํฅ์ ๋ฏธ์น๋ ์ฒญํฌ์ ์์ ๋ฐ๋ผ ํด๋ฌ์คํฐ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ํน์ ์์ฝ ๊ธฐ๊ฐ์ ๋ฐธ๋ฐ์ ์คํ์ ๊ณ ๋ คํด๋ณด์ธ์. ์์ธํ ์์ฝ ๊ธฐ๊ฐ ์ค์ ๋ฐฉ๋ฒ์ ๋ฐธ๋ฐ์ฑ ๊ธฐ๊ฐ ์์ฝ์์ ํ์ธํ์ธ์.
๋จ๊ณ
๋ค์ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ ๊ตฌ์ญ์ ๊ตฌ์ฑํ๊ณ ์ค๋ ๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปฌ๋ ์ ์ ๋ฐฐํฌํฉ๋๋ค.
๊ฐ ์ค๋๋ฅผ ์ ์ ํ ๊ตฌ์ญ์ ์ถ๊ฐํฉ๋๋ค.
๊ฐ ๊ตฌ์ญ ์์ ์ค๋๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด addShardToZone
๋ช
๋ น์ ์ฌ์ฉํฉ๋๋ค.
HI_RAM
๊ตฌ์ญ์ shard0
๋ฐ shard2
์ถ๊ฐ:
sh.addShardToZone("shard0", "HI_RAM") sh.addShardToZone("shard2", "HI_RAM")
FLASH
๊ตฌ์ญ์ shard1
๋ฐ shard2
์ถ๊ฐ:
sh.addShardToZone("shard1", "FLASH") sh.addShardToZone("shard2", "FLASH")
๊ด๋ จ collection์ ๋ํ ๊ตฌ์ญ ๋ฒ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ค๋ ํค ๋ฒ์ ๋ฅผ ๊ตฌ์ญ ์ ์ฐ๊ฒฐํ๋ ค๋ฉด sh.updateZoneKeyRange()
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ์๋๋ฆฌ์ค์์๋ collection์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ์ ํ ๊ตฌ์ญ์ ์ฐ๊ฒฐํ๋ ค๊ณ ํฉ๋๋ค. ๋ชจ๋ collection ๋ฌธ์๋ฅผ ๊ตฌ์ญ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๋ค์ ๊ตฌ์ญ ๋ฒ์๋ฅผ ์ง์ ํฉ๋๋ค.
{ "_id" : MinKey }
์ ํํ{ "_id" : MaxKey }
์ ์ํ
bigData
์ปฌ๋ ์
์ ๋ํด ๋ค์์ ์ค์ ํฉ๋๋ค.
shardDistributionDB.bigData
์ ๋ํ ๋ค์์คํ์ด์ค,MaxKey
์ ์ํ์ ๋๋ค.
FLASH
์ ๋ํ ๊ตฌ์ญ
sh.updateZoneKeyRange( "shardDistributionDB.bigData", { "_id" : MinKey }, { "_id" : MaxKey }, "FLASH" )
manyIndexes
์ปฌ๋ ์
์ ๋ํด ๋ค์์ ์ค์ ํฉ๋๋ค.
shardDistributionDB.manyIndexes
์ ๋ํ ๋ค์์คํ์ด์ค,MaxKey
์ ์ํ์ ๋๋ค.
HI_RAM
์ ๋ํ ๊ตฌ์ญ
sh.updateZoneKeyRange( "shardDistributionDB.manyIndexes", { "_id" : MinKey }, { "_id" : MaxKey }, "HI_RAM" )
์ปฌ๋ ์ ์ ์ค๋ฉํฉ๋๋ค.
๋ ์ปฌ๋ ์
(bigData
๋ฐ manyIndexes
)์ ๋ชจ๋ ์ค๋ฉํ๋ ค๋ฉด ์ค๋ ์ค๋ ํค ๋ฅผ { _id: "hashed" }
๋ก ์ง์ ํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
sh.shardCollection( "shardDistributionDB.bigData", { _id: "hashed" } ) sh.shardCollection( "shardDistributionDB.manyIndexes", { _id: "hashed" } )
๋ณ๊ฒฝ ์ฌํญ์ ๊ฒํ ํฉ๋๋ค.
์ฒญํฌ ๋ถํฌ ๋ฐ ์ค๋ ์์ญ์ ๋ณด๋ ค๋ฉด sh.status()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ธ์.
sh.status()
๋ค์์ ๋ฐธ๋ฐ์๊ฐ ์คํ๋๋ฉด ํ์ํ ๊ฒฝ์ฐ ์ฒญํฌ๋ฅผ ๋ถํ ํ๊ณ ๊ตฌ์ฑ๋ ๊ตฌ์ญ์ ๋ฐ๋ผ ์ค๋ ๊ฐ์ ์ฒญํฌ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค. ๋ฐธ๋ฐ์๊ฐ ์๋ฃ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ค๋ ์, ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ, IOPS ๋ฑ ์ฌ๋ฌ ์์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๋ฐธ๋ฐ์ฑ์ด ์๋ฃ๋๋ฉด ๋ค์์ด ์คํ๋ฉ๋๋ค.
manyIndexes
collection์ ์๋ ๋ฌธ์ ์ฒญํฌ๋shard0
๋ฐshard2
์ ์์ต๋๋ค.bigData
์ปฌ๋ ์ ์ ๋ฌธ์ ์ฒญํฌ๋shard1
๋ฐshard2
์ ์์ต๋๋ค.
์์ธํ ์์๋ณด๊ธฐ
์ค๋ฉ ๋ฐ ๋ฐธ๋ฐ์ฑ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ๋ค์ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.