๋ ํ๋ฆฌ์นด์ ์ผ๋ก ๊ตฌ์ฑ๋ MongoDB์์์ ์ธ๋ฑ์ค ์์ฑ ๋ฐฉ๋ฒ
๋กค๋ง ์ธ๋ฑ์ค ๋น๋(Rolling Index Build)
- ํ ๋ฒ์ ํ๋์ ๋ณต์ ๋ณธ ์ธํธ ๋ ธ๋๋ง ์ค๋จ์ํด
- ์ธ์ปจ๋๋ฆฌ(์ ํํ๋ ๋ ํ๋ฆฌ์นด์ ๋๋ฒ์งธ ๋ ธ๋)๋ถํฐ ์์ํด์ ํด๋น ๋ ธ๋์์ ๋ ๋ฆฝ์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๋น๋
์์ ์์
- ์ธ์ปจ๋๋ฆฌ ๋
ธ๋ ์ค์
- ์ธ์ปจ๋๋ฆฌ ๋ ธ๋๋ฅผ ์ ์ง๋ณด์ ๋ชจ๋๋ก ์ค์ rs.stepDown() -> ์ด ์ํ์์ ์ธ์ปจ๋๋ฆฌ ๋ ธ๋๋ ํด๋ผ์ด์ธํธ ์์ฒญ ๋์ ๋ ํ๋ฆฌ์ผ์ด์ ์์ , ์ธ๋ฑ์ค ์์ฑ๋ง ๊ด๋ฆฌ
- ๋ ํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ ๊ด๋ฆฌ -> ์ธ์ปจ๋๋ฆฌ๋ ํ๋ผ์ด๋จธ๋ฆฌ๋ก๋ถํฐ oplog ๊ณ์ ์์ -> oplog ๋์ ๋ ๊ฒ์ ์ฌ์ ์ฉํด์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ ์งํจ
- MongoDB 4.2 ์ด์ ์๋ ์ธ๋ฑ์ค ์์ฑ ์ ์ ์ฒด ์ปฌ๋ ์
์ ๋ฝ์ ๊ฑธ์์์ -> ์ดํ ๋ฒ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋น์ฐจ๋จ(non-blocking) ์ ๋ต์ ์ฌ์ฉ
- **๊ธฐ๋ณธ: ๊ณต์ ๋ฝ(Shared Lock)**์ผ๋ก ์์ ์ค ๋ฐ์ดํฐ ์ฝ๊ธฐ๋ฅผ ํ์ฉ.
- ๋จ๊ณ์ ๋น๋ ์ฒ๋ฆฌ: ์ผ๋ถ ๋ฐ์ดํฐ ์ฒญํฌ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ฝ์ ํด์ ํ๋ฉฐ ๋ค์ ์ฒญํฌ๋ก ์ด๋.
- ์ธ๋ฑ์ค๋ฅผ ์์ฑ
- ์์ ์ด ์๋ฃ๋๋ฉด ๋ ธ๋ ๋ณต๊ตฌ ํ ๋ค์ ์ธ์ปจ๋๋ฆฌ๋ก ์ด๋ -> ์ธ์ปจ๋๋ฆฌ๋ ํ๋ผ์ด๋จธ๋ฆฌ ์ํ๋ฅผ ์ฌ๋๊ธฐํ ํด์ ์ต์ ์ํ๋ฅผ ์ ์งํจ
- Primary ๋
ธ๋ ์ฒ๋ฆฌ
- ์ธ์ปจ๋๋ฆฌ ๋ ธ๋๋ค ์์ ์๋ฃ๋๋ฉด ํ๋ผ์ด๋จธ๋ฆฌ๋ฅผ ์ธ์ปจ๋๋ฆฌ๋ก ๊ฐ๋ฑ ํ ์์ ์ํ -> ๋ค๋ฅธ ์ธ์ปจ๋๋ฆฌ ์ค ํ๋๊ฐ ํ๋ผ์ด๋จธ๋ฆฌ๋ก ์น๊ฒฉ๋จ
- ์์ ์๋ฃ ํ ํด๋น ๋ ธ๋๋ฅผ ๋ค์ ํ๋ผ์ด๋จธ๋ฆฌ๋ก ๋ณต๊ตฌ
// Secondary ๋
ธ๋ ์ ์ง๋ณด์ ๋ชจ๋
rs.secondaryOk();
db.getMongo().setSlaveOk(); // Secondary์์ ์์
๊ฐ๋ฅ
// ์ธ๋ฑ์ค ์์ฑ
db.collection.createIndex({ field: 1 });
// ์์
ํ ๋ณต๊ตฌ
rs.slaveOk(false);