์์ฒด ๊ด๋ฆฌํ ์ค๋ ํด๋ฌ์คํฐ ๋ณต์
์ด ํ์ด์ง์ ๋ด์ฉ
์ด ์ ์ฐจ๋ 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์ ํ์ผ ์์คํ ๊ธฐ๋ฐ ๋ฐฑ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ๋ฅํ๋ฉด ํซ ๋ฐฑ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ธ์.
A. (์ ํ ์ฌํญ) ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๊ฒํ ํ๊ธฐ
์ด ์ ์ฐจ๋ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ(CSRS) ๋ฐ ๊ฐ ์ค๋ ๋ณต์ ๋ณธ ์ธํธ์ ๋ํ ์ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํฉ๋๋ค. ๋ณต์๋ CSRS ๋ฐ ์ค๋์ ๋ํด ๋ค๋ฅธ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ฌ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
์์ค ํด๋ฌ์คํฐ๊ฐ ์ ์์ด๊ณ ์ก์ธ์คํ ์ ์๋ ๊ฒฝ์ฐ mongo
์
ธ์ ๊ฐ ๋ณต์ ๋ณธ ์ธํธ์ ํ๋ผ์ด๋จธ๋ฆฌ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ์ ์ฐ๊ฒฐํ๊ณ rs.conf()
๋ฅผ ์คํํ์ฌ ๋ณต์ ๊ตฌ์ฑ ๋ฌธ์๋ฅผ ๋ด
๋๋ค.
์์ค ์ค๋ ํด๋ฌ์คํฐ์ ๊ตฌ์ฑ ์์ ํ๋ ์ด์์ ์ก์ธ์คํ ์ ์๋ ๊ฒฝ์ฐ ๊ธฐ์กด ๋ด๋ถ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ฌ ๊ฐ ์ค๋ ๋ณต์ ๋ณธ ์ธํธ ๋ฐ ๊ตฌ์ฑ ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ์ ๋ํ ๊ตฌ์ฑ ์๊ฑด์ ์ฌ๊ตฌ์ฑํฉ๋๋ค.
B. ๋ณต์์ ์ํ ๋์ ํธ์คํธ ์ค๋น
- ์ ์ฅ ๊ณต๊ฐ ์๊ตฌ ์ฌํญ
- ๋์ ํธ์คํธ ํ๋์จ์ด์ ๋ณต์๋ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ถฉ๋ถํ ์ฌ์ฉ ๊ฐ๋ฅํ ์คํ ๋ฆฌ์ง ๊ณต๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค. ๋์ ํธ์คํธ์ ๋ณด๊ดํ๋ ค๋ ๊ธฐ์กด ์ค๋ ํด๋ฌ์คํฐ์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ ๊ธฐ์กด ๋ฐ์ดํฐ์ ๋ณต์๋ ๋ฐ์ดํฐ ๋ชจ๋๋ฅผ ์ํ ์คํ ๋ฆฌ์ง ๊ณต๊ฐ์ด ์ถฉ๋ถํ์ง ํ์ธํฉ๋๋ค.
- 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
์ ์ฃผ์ด์ง ๋ณต์ ๋ณธ ์ธํธ์ ๊ฐ ๋ฉค๋ฒ์์ ๋์ผํ ๊ฐ์ ๊ฐ์ต๋๋ค.๋ํ ์ค๋ ์ท์ ์ง์ ๋ ๊ฒ๊ณผ ๋์ผํ ์์ ์ต์ ์ ์ ๋ฐฐํฌ์๋ฒ์ ์ง์ ํด์ผ ํฉ๋๋ค.
C. ๊ตฌ์ฑ ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ ๋ณต์
CSRS ํ๋ผ์ด๋จธ๋ฆฌ mongod
๋ฐ์ดํฐ ํ์ผ์ ๋ณต์ํฉ๋๋ค.
์ํ๋ ๋ฐฑ์ ๋ฐฉ๋ฒ์ ํด๋นํ๋ ํญ์ ์ ํํฉ๋๋ค.
๋์ ํธ์คํธ ๋จธ์ ์ 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 ์ค๋ช ์์์ ํ์ธํ์ธ์.
์ค๋ ์ท ๋ง์ดํธ์
mongod
๋ฐ์ดํฐ ํ์ผ์ B. Prepare the Target Host for Restoration ์์ ์์ฑ๋ ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค.cp -a /snap/mongodb/path/to/mongodb /path/to/mongodb -a
์ต์ ์ ํด๋ ๋ฐ ํ์ผ ๊ถํ์ ์ ์งํ๋ฉด์ ์์ค ๊ฒฝ๋ก์ ๋ด์ฉ์ ๋์ ๊ฒฝ๋ก์ ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌํฉ๋๋ค.๋ค์ ๊ตฌ์ฑ ํ์ผ ์ค์ ์ ์ฃผ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์๋ตํฉ๋๋ค.
#replication # replSetName: myCSRSName #sharding # clusterRole: configsvr ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ์ฌ
mongod
์(๋ฅผ) ์์ํ๋ ค๋ฉด ๋ช ๋ น์ค์ ๊ตฌ์ฑ ํ์ผ์ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋--config
์ต์ ์ ์ง์ ํฉ๋๋ค.mongod --config /path/to/mongodb/mongod.conf mongod
๋ฅผ ์์คํ ์๋น์ค๋ก ์คํํ๋๋ก ๊ตฌ์ฑํ ๊ฒฝ์ฐ ์์คํ ์๋น์ค ๊ด๋ฆฌ์์๊ฒ ๊ถ์ฅ๋๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ํ์ธ์.mongod
๊ฐ ์์๋๋ฉดmongo
์ ธ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํฉ๋๋ค.
์ ํํ ๋ฐฑ์ ๋ฏธ๋์ด์ ์ ์ฅ๋ ๋ฐ์ดํฐ ํ์ผ์ ํธ์คํธ์์ ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ฐฑ์ ๋ณผ๋ฅจ์ ๋ง์ดํธํ๊ฑฐ๋, ์ํํธ์จ์ด ์ ํธ๋ฆฌํฐ์์ ๋ฐฑ์ ์ ์ด๊ฑฐ๋, ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์์ ์ถ์ถํด์ผ ํ ์ ์์ต๋๋ค. ๋ฐฑ์ ์ ํฌํจ๋ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ์ ํธํ๋ ๋ฐฑ์ ๋๊ตฌ์ ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฐฑ์ ๋ฐ์ดํฐ ์์น์
mongod
๋ฐ์ดํฐ ํ์ผ์ B. Prepare the Target Host for Restoration ์์ ์์ฑ๋ ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค.cp -a /backup/mongodb/path/to/mongodb /path/to/mongodb -a
์ต์ ์ ํด๋ ๋ฐ ํ์ผ ๊ถํ์ ์ ์งํ๋ฉด์ ์์ค ๊ฒฝ๋ก์ ๋ด์ฉ์ ๋์ ๊ฒฝ๋ก์ ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌํฉ๋๋ค.๋ค์ ๊ตฌ์ฑ ํ์ผ ์ค์ ์ ์ฃผ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์๋ตํฉ๋๋ค.
#replication # replSetName: myCSRSName #sharding # clusterRole: configsvr ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ์ฌ
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
์ ธ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ local
์ญ์ ํฉ๋๋ค.
db.dropDatabase()
๋ฅผ ์ฌ์ฉํ์ฌ local
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
use local db.dropDatabase()
๊ณํ๋๊ฑฐ๋ ์๋ฃ๋ ์ค๋ ํธ์คํธ ์ด๋ฆ ๋๋ ๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ ๋ณ๊ฒฝ์ ๊ฒฝ์ฐ ์์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ config.shards
์
๋ฐ์ดํธํฉ๋๋ค.
๋ค์ ์ฌํญ์ด ๋ชจ๋ ํด๋น๋๋ ๊ฒฝ์ฐ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๋ค:
์ด ์ ์ฐจ ์ค์๋ ์ค๋ ๊ตฌ์ฑ์ ํธ์คํธ ์์คํ ํธ์คํธ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
์ด ์ ์ฐจ ์ค์๋ ์ค๋ ๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
๊ตฌ์ฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ 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
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฅผ mongod
์ ๋จ์ผ ๋
ธ๋ ๋ณต์ ๋ณธ ์ธํธ๋ก ๋ค์ ์์ํฉ๋๋ค.
mongod
๋ฅผ ์ข
๋ฃํฉ๋๋ค. ๋ค์ ๊ตฌ์ฑ ํ์ผ ์ต์
์ ์ฃผ์์ ์ ๊ฑฐํ๊ฑฐ๋ ์ถ๊ฐํฉ๋๋ค.
replication replSetName: myNewCSRSName sharding clusterRole: configsvr
๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๊ณ์ ์งํํ๊ธฐ ์ ์ replSetName
ํ๋๋ฅผ ์ ์ด๋ฆ์ผ๋ก ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
์
๋ฐ์ดํธ๋ ๊ตฌ์ฑ ํ์ผ๋ก mongod
๋ฅผ ์์ํฉ๋๋ค.
mongod --config /path/to/mongodb/mongod.conf
mongod
๋ฅผ ์์คํ
์๋น์ค๋ก ์คํํ๋๋ก ๊ตฌ์ฑํ ๊ฒฝ์ฐ ์์คํ
์๋น์ค ๊ด๋ฆฌ์์๊ฒ ๊ถ์ฅ๋๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ํ์ธ์.
mongod
๊ฐ ์์๋๋ฉด mongo
์
ธ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํฉ๋๋ค.
์ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํฉ๋๋ค.
๊ธฐ๋ณธ ์ค์ ๋ฐ rs.initiate()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํฉ๋๋ค.
rs.initiate()
์์
์ด ์๋ฃ๋๋ฉด rs.status()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉค๋ฒ๊ฐ ํ๋ผ์ด๋จธ๋ฆฌ๊ฐ ๋์๋์ง ํ์ธํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
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()
๋ง ์คํํ ์ ์์ต๋๋ค.
ํ์ํ ์ถ๊ฐ ๋ณต์ ์ค์ ์ ๊ตฌ์ฑํฉ๋๋ค.
rs.reconfig()
๋ฉ์๋๋ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌ๋ ๊ตฌ์ฑ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ์
๋ฐ์ดํธํฉ๋๋ค. ๋ณต์ ๋ณธ ์ธํธ์ ํ๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ์ ๋ํด reconfig()
๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
A. Review Replica Set Configurations ๋จ๊ณ์์ ์๋ณํ ๋๋ก ๋ณต์ ๋ณธ ์ธํธ์ ์๋ ๊ตฌ์ฑ ํ์ผ ์ถ๋ ฅ์ ์ฐธ์กฐํ๊ณ ํ์์ ๋ฐ๋ผ ์ค์ ์ ์ ์ฉํฉ๋๋ค.
D. ๊ฐ ์ค๋ ๋ณต์ ๋ณธ ์ธํธ ๋ณต์
์ค๋ ํ๋ผ์ด๋จธ๋ฆฌ mongod
๋ฐ์ดํฐ ํ์ผ์ ๋ณต์ํฉ๋๋ค.
์ํ๋ ๋ฐฑ์ ๋ฐฉ๋ฒ์ ํด๋นํ๋ ํญ์ ์ ํํฉ๋๋ค.
๋์ ํธ์คํธ ๋จธ์ ์ 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 ์ค๋ช ์์์ ํ์ธํ์ธ์.
mongod
๋ฐ์ดํฐ ํ์ผ์ ์ค๋ ์ท ๋ง์ดํธ์์ B. Prepare the Target Host for Restoration์ ์์ฑํ ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค.cp -a /snap/mongodb/path/to/mongodb /path/to/mongodb -a
์ต์ ์ ํด๋ ๋ฐ ํ์ผ ๊ถํ์ ์ ์งํ๋ฉด์ ์์ค ๊ฒฝ๋ก์ ๋ด์ฉ์ ๋์ ๊ฒฝ๋ก์ ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌํฉ๋๋ค.๋ค์ ๊ตฌ์ฑ ํ์ผ ์ค์ ์ ์ฃผ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์๋ตํฉ๋๋ค.
#replication # replSetName: myShardName #sharding # clusterRole: shardsvr ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ์ฌ
mongod
์(๋ฅผ) ์์ํ๋ ค๋ฉด ๋ช ๋ น์ค์ ๊ตฌ์ฑ ํ์ผ์ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋--config
์ต์ ์ ์ง์ ํฉ๋๋ค.mongod --config /path/to/mongodb/mongod.conf mongod
๋ฅผ ์์คํ ์๋น์ค๋ก ์คํํ๋๋ก ๊ตฌ์ฑํ ๊ฒฝ์ฐ ์์คํ ์๋น์ค ๊ด๋ฆฌ์์๊ฒ ๊ถ์ฅ๋๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ํ์ธ์.mongod
๊ฐ ์์๋๋ฉดmongo
์ ธ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํฉ๋๋ค.
์ ํํ ๋ฐฑ์ ๋ฏธ๋์ด์ ์ ์ฅ๋ ๋ฐ์ดํฐ ํ์ผ์ ํธ์คํธ์์ ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ฐฑ์ ๋ณผ๋ฅจ์ ๋ง์ดํธํ๊ฑฐ๋, ์ํํธ์จ์ด ์ ํธ๋ฆฌํฐ์์ ๋ฐฑ์ ์ ์ด๊ฑฐ๋, ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์์ ์ถ์ถํด์ผ ํ ์ ์์ต๋๋ค. ๋ฐฑ์ ์ ํฌํจ๋ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ์ ํธํ๋ ๋ฐฑ์ ๋๊ตฌ์ ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฐฑ์ ๋ฐ์ดํฐ ์์น์
mongod
๋ฐ์ดํฐ ํ์ผ์ B. Prepare the Target Host for Restoration ์์ ์์ฑ๋ ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค.cp -a /backup/mongodb/path/to/mongodb /path/to/mongodb -a
์ต์ ์ ํด๋ ๋ฐ ํ์ผ ๊ถํ์ ์ ์งํ๋ฉด์ ์์ค ๊ฒฝ๋ก์ ๋ด์ฉ์ ๋์ ๊ฒฝ๋ก์ ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌํฉ๋๋ค.๋ค์ ๊ตฌ์ฑ ํ์ผ ์ค์ ์ ์ฃผ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์๋ตํฉ๋๋ค.
#replication # replSetName: myShardName #sharding # clusterRole: shardsvr ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ์ฌ
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
์ ธ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํฉ๋๋ค.
์ญํ ์ ๊ฐ์ง ์์ __system
์ฌ์ฉ์๋ฅผ ๋ง๋ญ๋๋ค.
์ด ์ ์ฐจ๋ฅผ ์ํํ๋ ๋์ admin.system.version
์ปฌ๋ ์
์ ๋ฌธ์๋ฅผ ์์ ํฉ๋๋ค. ์ธ์ฆ์ ์ ์ฉํ๋ ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ __system
์ญํ ์๋ง ์ด ์ปฌ๋ ์
์ ์์ ํ ์ ์๋ ๊ถํ์ด ๋ถ์ฌ๋ฉ๋๋ค. ํด๋ฌ์คํฐ์์ ์ธ์ฆ์ ์ ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
๊ฒฝ๊ณ
__system
์ญํ ์ ์์ ์์๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํด ๋ชจ๋ ์์
์ ์ํํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. ์ด ์ ์ฐจ์๋ ์ด ๋จ๊ณ์์ ์์ฑํ ์ฌ์ฉ์๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด ์ ์ฐจ์ ๋ฒ์๋ฅผ ์ด๊ณผํ์ฌ ์ด ์ฌ์ฉ์๋ฅผ ํ์ฑ ์ํ๋ก ์ ์งํ์ง ๋ง์ธ์.
์ง์ ๋ ํธ์คํธ๋ง ๊ถํ ์๋ ์ฌ์ฉ์๋ก ์ธ์ฆํ ์ ์๋๋ก ๊ตฌ์ฑ๋ clientSource
์ธ์ฆ ์ ํ์ ์ฌ์ฉํ์ฌ ์ด ์ฌ์ฉ์๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํฉ๋๋ค.
admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์์userAdmin
์ญํ ๋๋userAdminAnyDatabase
์ญํ ์ ๊ฐ์ง ์ฌ์ฉ์๋ก ์ธ์ฆํฉ๋๋ค:use admin db.auth("myUserAdmin","mySecurePassword") __system
์ญํ ์ ๊ฐ์ง ์ฌ์ฉ์๋ฅผ ์์ฑํฉ๋๋ค.db.createUser( { user: "mySystemUser", pwd: "<replaceMeWithAStrongPassword>", roles: [ "__system" ] } ) ์์คํ ๋ณด์์ ๋ณด์ฅํ๊ณ ์ ์์ ์ธ ์ก์ธ์ค๋ฅผ ๋ฐฉ์งํ๊ฑฐ๋ ์ง์ฐํ๋ ค๋ฉด ์ํธ๋ ์์์ ์ด๊ณ ๊ธธ๋ฉฐ ๋ณต์กํด์ผ ํฉ๋๋ค.
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ์ธ์ฆํฉ๋๋ค:
db.auth("mySystemUser","<replaceMeWithAStrongPassword>")
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ local
์ญ์ ํฉ๋๋ค.
db.dropDatabase()
๋ฅผ ์ฌ์ฉํ์ฌ local
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
use local db.dropDatabase()
์ปฌ๋ ์
์์ minOpTimeRecovery
๋ฌธ์๋ฅผ admin.system.versions
์ ๊ฑฐํฉ๋๋ค.
์ค๋ ๋ด๋ถ๋ฅผ ์
๋ฐ์ดํธํ๋ ค๋ฉด admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์ system.version
์ปฌ๋ ์
์์ ๋ค์ deleteOne()
๋ฉ์๋๋ฅผ ์คํํฉ๋๋ค:
use admin db.system.version.deleteOne( { _id: "minOpTimeRecovery" } )
์ฐธ๊ณ
system.version
์ปฌ๋ ์
์ ๋ด๋ถ ์์คํ
์ปฌ๋ ์
์
๋๋ค. ์ด์ ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ง์นจ์ด ์์ ๋๋ง ์์ ํด์ผ ํฉ๋๋ค.
์ ํ ์ฌํญ: CSRS ํธ์คํธ ์ด๋ฆ ๋๋ ๋ณต์ ์ธํธ ์ด๋ฆ ๋ณ๊ฒฝ์ ๊ฒฝ์ฐ ๊ฐ ์ค๋์ ID ๋ฌธ์์์ ์ค๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
๋ค์ ์ฌํญ์ด ๋ชจ๋ ํด๋น๋๋ ๊ฒฝ์ฐ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๋ค:
์ด ์ ์ฐจ ์ค์ 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 ํ์ ๋จ๊ณ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฅผ mongod
์ ๋จ์ผ ๋
ธ๋ ๋ณต์ ๋ณธ ์ธํธ๋ก ๋ค์ ์์ํฉ๋๋ค.
mongod
๋ฅผ ์ข
๋ฃํฉ๋๋ค. ๋ค์ ๊ตฌ์ฑ ํ์ผ ์ต์
์ ์ฃผ์์ ์ ๊ฑฐํ๊ฑฐ๋ ์ถ๊ฐํฉ๋๋ค.
replication replSetName: myNewShardName sharding clusterRole: shardsvr
๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๊ณ์ ์งํํ๊ธฐ ์ ์ replSetName
ํ๋๋ฅผ ์ ์ด๋ฆ์ผ๋ก ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
์
๋ฐ์ดํธ๋ ๊ตฌ์ฑ ํ์ผ๋ก mongod
๋ฅผ ์์ํฉ๋๋ค.
mongod --config /path/to/mongodb/mongod.conf
mongod
๋ฅผ ์์คํ
์๋น์ค๋ก ์คํํ๋๋ก ๊ตฌ์ฑํ ๊ฒฝ์ฐ ์์คํ
์๋น์ค ๊ด๋ฆฌ์์๊ฒ ๊ถ์ฅ๋๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ํ์ธ์.
mongod
๊ฐ ์์๋๋ฉด mongo
์
ธ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํฉ๋๋ค.
์ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํฉ๋๋ค.
๊ธฐ๋ณธ ์ค์ ๋ฐ rs.initiate()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํฉ๋๋ค.
rs.initiate()
์์
์ด ์๋ฃ๋๋ฉด rs.status()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉค๋ฒ๊ฐ ํ๋ผ์ด๋จธ๋ฆฌ๊ฐ ๋์๋์ง ํ์ธํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ค๋ ๋ณต์ ๋ณธ ์ธํธ์ ๊ฐ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ์ ๋ํด ํด๋น ํธ์คํธ ์์คํ
์์ 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()
๋ง ์คํํ ์ ์์ต๋๋ค.
ํ์ํ ์ถ๊ฐ ๋ณต์ ์ค์ ์ ๊ตฌ์ฑํฉ๋๋ค.
rs.reconfig()
๋ฉ์๋๋ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌ๋ ๊ตฌ์ฑ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ์
๋ฐ์ดํธํฉ๋๋ค. ๋ณต์ ๋ณธ ์ธํธ์ ํ๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ์ ๋ํด reconfig()
๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
A. Review Replica Set Configurations ๋จ๊ณ์์ ์๋ณํ ๋๋ก ๋ณต์ ๋ณธ ์ธํธ์ ์๋ ๊ตฌ์ฑ ํ์ผ ์ถ๋ ฅ์ ์ฐธ์กฐํ๊ณ ํ์์ ๋ฐ๋ผ ์ค์ ์ ์ ์ฉํฉ๋๋ค.
์์ ๊ถํ ์ฌ์ฉ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์ธ์ฆ์ ์ํํ๋ ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ ์ด ์ ์ฐจ์ ์๋ถ๋ถ์์ ์์ฑ๋ ๊ถํ ์๋ ์ฌ์ฉ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์์userAdmin
์ญํ ๋๋userAdminAnyDatabase
์ญํ ์ ๊ฐ์ง ์ฌ์ฉ์๋ก ์ธ์ฆํฉ๋๋ค:use admin db.auth("myUserAdmin","mySecurePassword") ๊ถํ ์๋ ์ฌ์ฉ์๋ฅผ ์ญ์ ํฉ๋๋ค:
db.removeUser("mySystemUser")
E. ๊ฐ๊ฐ ๋ค์ ์์ mongos
ํด๋ฌ์คํฐ์์ ๊ฐ 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"
F. ํด๋ฌ์คํฐ ์ ๊ทผ์ฑ ๊ฒ์ฆ
mongo
์
ธ์ ํด๋ฌ์คํฐ์ mongos
ํ๋ก์ธ์ค ์ค ํ๋์ ์ฐ๊ฒฐํฉ๋๋ค. sh.status()
๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ํด๋ฌ์คํฐ ์ํ๋ฅผ ํ์ธํฉ๋๋ค. sh.status()
๊ฐ ๋ฐธ๋ฐ์๊ฐ ์คํ๋๊ณ ์์ง ์์์ ๋ํ๋ด๋ฉด sh.startBalancer()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐธ๋ฐ์๋ฅผ ๋ค์ ์์ํฉ๋๋ค. [1]
๋ชจ๋ ์ค๋์ ์ก์ธ์คํ ์ ์๊ณ ํต์ ํ ์ ์๋์ง ํ์ธํ๋ ค๋ฉด ์์ ์ค๋ ์ปฌ๋ ์
์ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ํด๋ฌ์คํฐ์ ๊ฐ ์ค๋ ๊ฐ์ ๋ถํ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค. mongo
์
ธ์ ๊ฐ ์ค๋ ํ๋ผ์ด๋จธ๋ฆฌ์ ์ฐ๊ฒฐํ๊ณ db.collection.find()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๊ฐ ์์๋๋ก ์ค๋๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
[1] | MongoDB 4.2๋ถํฐ sh.startBalancer() ๋ ์ค๋ฉ๋ cluster์ ๋ํ ์๋ ๋ถํ ๋ ํ์ฑํํฉ๋๋ค. |