์ง๋ฆฌ์ ์ผ๋ก ์ค๋ณต๋ ์์ฒด ๊ด๋ฆฌ ๋ณต์ ๋ณธ ์ธํธ ๋ฐฐํฌ
์ด ํ์ด์ง์ ๋ด์ฉ
๊ฐ์
์ด ํํ ๋ฆฌ์ผ์ ์ฌ๋ฌ ์์น์ ๋ฉค๋ฒ๊ฐ ์๋ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ์ค๋ช ํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋ ์ธ ๋ฉค๋ฒ๊ฐ ์๋ ๋ณต์ ๋ณธ ์ธํธ์ ๋ค์ฏ ๋ฉค๋ฒ๊ฐ ์๋ ๋ณต์ ๋ณธ ์ธํธ์ ๋ํด ์ค๋ช ํฉ๋๋ค. ๋ณต์ ์ธํธ ๋ฉค๋ฒ ์๊ฐ ์ง์์ธ ๊ฒฝ์ฐ ๊ฐ๋ฅํ๋ฉด ๋ค๋ฅธ ๋ฐ์ดํฐ ๋ณด์ ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํ์ฌ ํฌํ ๋ฉค๋ฒ ์๋ฅผ ํ์๋ก ๋ฐฐํฌํ์ธ์. [1]
๋ถ์ฐ๋ ๋ณต์ ๋ณธ ์ธํธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ ์ด์์ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถ์ฐ๋ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ฐธ์กฐํ์ธ์. ๋ณต์ ๋ณธ ์ธํธ ๋ฐฐํฌ ์ํคํ ์ฒ ๋ฐ ์์ฒด ๊ด๋ฆฌํ ๋ณต์ ์ฐธ์กฐ๋ฅผ ํ์ธํ์ธ์.
[1] | (1, 2) ์ฌ์ ์ด ์์ด ๋ค๋ฅธ ๋ฐ์ดํฐ ๋ณด์ ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํ ์ ์๊ณ ํฌํ๊ถ์ด ์๋ ๋ฉค๋ฒ ์๊ฐ ์ง์์ธ ๊ฒฝ์ฐ ๋์ ์ค์ฌ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ค์ฌ์๋ฅผ ์ฌ์ฉํ ๋ ๊ณ ๋ คํด์ผ ํ ์ฌํญ์ ๋ณต์ ๋ณธ ์ธํธ ์ค์ฌ์๋ฅผ ์ฐธ์กฐํ์ธ์. |
๊ณ ๋ ค ์ฌํญ
์ํคํ ์ฒ
ํ๋ก๋์
ํ๊ฒฝ์์๋ ๋ณต์ ๋ณธ ์ธํธ์ ๊ฐ ๋ฉค๋ฒ๋ฅผ ์์ฒด ์์คํ
์ ๋ฐฐํฌํฉ๋๋ค. ๊ฐ๋ฅํ๋ฉด MongoDB๊ฐ ๊ธฐ๋ณธ ํฌํธ์ธ 27017
์์ ์์ ๋๊ธฐํ๋์ง ํ์ธํ์ธ์.
์ฐธ๊ณ
๋กค๋ง ์
๊ทธ๋ ์ด๋ ์ธ๋ถ์์๋ ๋ณต์ ๋ณธ ์ธํธ์ ๋ชจ๋ mongod
๋ฉค๋ฒ๊ฐ ๋์ผํ ์ฃผ ๋ฒ์ ์ MongoDB๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ๋ณต์ ์ธํธ ๋ฐฐํฌ ์ํคํ ์ฒ๋ฅผ์ฐธ์กฐํ์ธ์.
ํธ์คํธ ์ด๋ฆ
์ค์
๋ณ๊ฒฝ๋ IP ์ฃผ์๋ก ์ธํด ๊ตฌ์ฑ์ด ์ ๋ฐ์ดํธ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ํนํ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ๋๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์์ ๊ตฌ์ฑํ ๋ IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
IP ์ฃผ์ ๋์ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์คํ๋ฆฟ ๋คํธ์ํฌ ํธ๋ผ์ด์ฆ ์ ๋ฐ์ ๊ฑธ์ณ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ์ธ์. MongoDB 5.0๋ถํฐ IP ์ฃผ์๋ก๋ง ๊ตฌ์ฑ๋ ๋ ธ๋๋ ์คํํธ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์คํจํ๋ฉฐ ์์๋์ง ์์ต๋๋ค.
IP ๋ฐ์ธ๋ฉ
--bind_ip
2} ์ต์
์ ์ฌ์ฉํ์ฌ MongoDB๊ฐ ๊ตฌ์ฑ๋ ์ฃผ์์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฐ๊ฒฐ์ ์์ ๋๊ธฐํ๋๋ก ํฉ๋๋ค.
๊ฒฝ๊ณ
์ธ์คํด์ค๋ฅผ ๊ณต๊ฐ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ IP ์ฃผ์์ ๋ฐ์ธ๋ฉํ๊ธฐ ์ ์ ๋ฌด๋จ ์ ๊ทผ์ผ๋ก๋ถํฐ ํด๋ฌ์คํฐ๋ฅผ ๋ณดํธํด์ผ ํฉ๋๋ค. ๋ณด์ ๊ถ์ฅ ์ฌํญ์ ์ ์ฒด ๋ชฉ๋ก์ ์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์ ๋ํ ๋ณด์ ๊ฒ์ฌ ๋ชฉ๋ก์ ์ฐธ์กฐํ์ธ์. ์ต์ํ ์ธ์ฆ์ ํ์ฑํํ๊ณ ๋คํธ์ํฌ ์ธํ๋ผ๋ฅผ ๊ฐํํ๋ ๊ฒ์ ๊ณ ๋ คํฉ๋๋ค.
2} ๋ฐmongod
MongoDB mongos
๋ฐ์ด๋๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก์ปฌ ํธ์คํธ์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค. ๋ฐ์ด๋๋ฆฌ์ ๋ํด net.ipv6
๊ตฌ์ฑ ํ์ผ ์ค์ ๋๋ --ipv6
๋ช
๋ น์ค ์ต์
์ด ์ค์ ๋์ด ์์ผ๋ฉด ๋ฐ์ด๋๋ฆฌ๊ฐ ๋ก์ปฌ ํธ์คํธ IPv6 ์ฃผ์์ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋ฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก localhost์ ๋ฐ์ธ๋ฉ๋ mongod
๋ฐ mongos
๋ ๋์ผํ ์ปดํจํฐ์์ ์คํ ์ค์ธ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค. ์ด ๋ฐ์ธ๋ฉ ๋์์๋ mongosh
์ ๋ณต์ ๋ณธ ์ธํธ ๋๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋
ธ๋๊ฐ ํฌํจ๋ฉ๋๋ค. ์๊ฒฉ ํด๋ผ์ด์ธํธ๋ localhost์๋ง ๋ฐ์ธ๋ฉ๋ ๋ฐ์ด๋๋ฆฌ์๋ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ๋ฐ์ธ๋ฉ์ ์ฌ์ ์ํ๊ณ ๋ค๋ฅธ IP ์ฃผ์์ ๋ฐ์ธ๋ฉํ๋ ค๋ฉด net.bindIp
๊ตฌ์ฑ ํ์ผ ์ค์ ๋๋ --bind_ip
๋ช
๋ น์ค ์ต์
์ ์ฌ์ฉํ์ฌ ํธ์คํธ ์ด๋ฆ ๋๋ IP ์ฃผ์ ๋ชฉ๋ก์ ์ง์ ํฉ๋๋ค.
๊ฒฝ๊ณ
MongDB ๋ถํฐ 5.0 ์์, ๋ถํ ์ํ DNS IP ์ฃผ์๋ก๋ง ๊ตฌ์ฑ๋ ๋
ธ๋๋ ์์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์คํจํ๊ณ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค. disableSplitHorizonIPCheck
๋ฅผ ์ฐธ์กฐํ์ธ์.
์๋ฅผ ๋ค์ด ๋ค์ mongod
์ธ์คํด์ค๋ ๋ก์ปฌ ํธ์คํธ์ IP ์ฃผ์ 198.51.100.1
์ ์ฐ๊ฒฐ๋ ํธ์คํธ๋ช
My-Example-Associated-Hostname
์ ๋ชจ๋ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค.
mongod --bind_ip localhost,My-Example-Associated-Hostname
์ด ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๋ ค๋ฉด ์๊ฒฉ ํด๋ผ์ด์ธํธ๊ฐ ํธ์คํธ ์ด๋ฆ ๋๋ ๊ด๋ จ IP ์ฃผ์ 198.51.100.1
๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.
mongosh --host My-Example-Associated-Hostname mongosh --host 198.51.100.1
์ฐ๊ฒฐ์ฑ
๋คํธ์ํฌ ํธ๋ํฝ์ด ์ธํธ์ ๋ชจ๋ ๊ตฌ์ฑ์๊ณผ ๋คํธ์ํฌ์ ๋ชจ๋ ํด๋ผ์ด์ธํธ ๊ฐ์ ์์ ํ๊ฒ ์ ๋ฌ๋ ์ ์๋์ง ํ์ธํ์ญ์์ค.
๋ค์ ์ฌํญ์ ๊ณ ๋ คํ์ธ์:
๊ฐ์ ์ฌ์ค๋ง์ ์ค์ ํฉ๋๋ค. ๋คํธ์ํฌ ํ ํด๋ก์ง๊ฐ LAN์ ํตํด ๋จ์ผ ์ฌ์ดํธ ๋ด์ ๊ตฌ์ฑ์ ๊ฐ ๋ชจ๋ ํธ๋ํฝ์ ๋ผ์ฐํ ํ๋์ง ํ์ธํ์ญ์์ค.
์ ์ ์๋ ํด๋ผ์ด์ธํธ์์ ๋ณต์ ๋ณธ ์ธํธ๋ก์ ์ฐ๊ฒฐ์ ๋ฐฉ์งํ๋๋ก ์ก์ธ์ค ์ ์ด๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์์ ๋ฐ ๋ฐ์ ํจํท์ด ๊ธฐ๋ณธ MongoDB ํฌํธ์์๋ง ํ์ฉ๋๊ณ ๋ฐฐํฌ ๋ด์์๋ง ํ์ฉ๋๋๋ก ๋คํธ์ํน ๋ฐ ๋ฐฉํ๋ฒฝ ๊ท์น์ ๊ตฌ์ฑํฉ๋๋ค. IP ๋ฐ์ธ๋ฉ ๊ณ ๋ ค ์ฌํญ์ ์ฐธ์กฐํ์ธ์.
๋ณต์ ๋ณธ ์ธํธ์ ๊ฐ ๊ตฌ์ฑ์์ด ํ์ธ ๊ฐ๋ฅํ DNS ๋๋ ํธ์คํธ ์ด๋ฆ์ ํตํด ์ก์ธ์คํ ์ ์๋์ง ํ์ธํฉ๋๋ค. DNS ์ด๋ฆ์ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ๊ฑฐ๋ ์์คํ
์ /etc/hosts
ํ์ผ์ ์ค์ ํ์ฌ ์ด ๊ตฌ์ฑ์ ๋ฐ์ํด์ผ ํฉ๋๋ค.
๊ฐ ๋ฉค๋ฒ๋ ๋ค๋ฅธ ๋ชจ๋ ๋ฉค๋ฒ์ ์ฐ๊ฒฐํ ์ ์์ด์ผ ํฉ๋๋ค. ์ฐ๊ฒฐ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ๋ชจ๋ ๊ตฌ์ฑ์ ๊ฐ์ ์ฐ๊ฒฐ ํ ์คํธ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๊ตฌ์ฑ
MongoDB๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ ์ MongoDB๊ฐ ๋ฐ์ดํฐ ํ์ผ์ ์ ์ฅํ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋์ธ์.
5} ๋๋ ๊ด๋ จ ์์น์ mongod
์ ์ฅ๋ ๊ตฌ์ฑ ํ์ผ์์ ๊ตฌ์ฑ์ ์ง์ ํฉ๋๋ค./etc/mongod.conf
๊ตฌ์ฑ ์ต์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์์ฒด ๊ด๋ฆฌ ๊ตฌ์ฑ ํ์ผ ์ต์ ์ ์ฐธ์กฐํ์ธ์.
ํ์ ๋ถํฌ
๊ฐ๋ฅํ๋ฉด ํ์ ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ฌ์ฉํ๊ณ , ๋ฐ์ดํฐ ์ผํฐ๊ฐ ์์ค๋๋๋ผ๋ ๋๋จธ์ง ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ๊ฐ ๊ณผ๋ฐ์๋ฅผ ๊ตฌ์ฑํ๊ฑฐ๋ ์ต์ํ ๋ฐ์ดํฐ ์ฌ๋ณธ์ ์ ๊ณตํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ๊ทน๋ํํ๋ ๋ฉค๋ฒ ๋ถํฌ๋ฅผ ์ ํํฉ๋๋ค.
ํฌํ๊ถ์ด ์๋ ํ์
ํฌํ๊ถ์ ๊ฐ์ง ๋ฉค๋ฒ๋ฅผ 7๊ฐ ์ด์ ๋ฐฐํฌํ์ง ์์ต๋๋ค.
์ ์ ์กฐ๊ฑด
์ด ํํ ๋ฆฌ์ผ์ ๋ชจ๋ ๊ตฌ์ฑ์ ๋ํด ๊ฐ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ๋ฅผ ๋ณ๋์ ์์คํ ์ ๋ฐฐํฌํฉ๋๋ค. ๋จ์ผ ์์คํ ์ ๋ ์ด์์ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ๋ฅผ ๋ฐฐํฌํ ์ ์์ง๋ง ์ด ๊ฒฝ์ฐ ๋ณต์ ๋ณธ ์ธํธ์ ์ค๋ณต์ฑ๊ณผ ์ฉ๋์ด ์ค์ด๋ญ๋๋ค. ์ด๋ฌํ ๋ฐฐํฌ๋ ์ผ๋ฐ์ ์ผ๋ก ํ ์คํธ ๋ชฉ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
์ด ํํ ๋ฆฌ์ผ์์๋ ๋ณต์ ๋ณธ ์ธํธ์ ์ผ๋ถ๊ฐ ๋ ๊ฐ ์์คํ ์ MongoDB๋ฅผ ์ค์นํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. MongoDB๋ฅผ ์์ง ์ค์นํ์ง ์์ ๊ฒฝ์ฐ ์ค์น ํํ ๋ฆฌ์ผ์ ์ฐธ์กฐํ์ธ์.
์ ์ฐจ
์ง๋ฆฌ์ ์ผ๋ก ์ค๋ณต๋ 3๊ฐ ๋ฉค๋ฒ ๋ณต์ ๋ณธ ์ธํธ ๋ฐฐํฌ
์ค์
๋ณ๊ฒฝ๋ IP ์ฃผ์๋ก ์ธํด ๊ตฌ์ฑ์ด ์ ๋ฐ์ดํธ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ํนํ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ๋๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์์ ๊ตฌ์ฑํ ๋ IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
IP ์ฃผ์ ๋์ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์คํ๋ฆฟ ๋คํธ์ํฌ ํธ๋ผ์ด์ฆ ์ ๋ฐ์ ๊ฑธ์ณ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ์ธ์. MongoDB 5.0๋ถํฐ IP ์ฃผ์๋ก๋ง ๊ตฌ์ฑ๋ ๋ ธ๋๋ ์คํํธ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์คํจํ๋ฉฐ ์์๋์ง ์์ต๋๋ค.
์ง๋ฆฌ์ ์ผ๋ก ์ค๋ณต๋ 3๊ฐ ๋ฉค๋ฒ ๋ณต์ ๋ณธ ์ธํธ ๋ฐฐํฌ์ ๊ฒฝ์ฐ ์์คํ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ์ธ ๋ฉค๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ๊ฐ๋ฅํ ๋ถํฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
์ธ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถํฌ: ๊ฐ ์ฌ์ดํธ๋น ํ ๊ฐ์ ๋ฉค๋ฒ ๋ฐฐ์น.
๋ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถํฌ: 2๊ฐ ๋ฉค๋ฒ๋ฅผ A ๋ฐ์ดํฐ ์ผํฐ์, 1๊ฐ ๋ฉค๋ฒ๋ฅผ B ๋ฐ์ดํฐ ์ผํฐ์ ๋ฐฐ์นํฉ๋๋ค. ๋ณต์ ๋ณธ ์ธํธ์ ๊ตฌ์ฑ์ ์ค ํ ๊ฐ๊ฐ ์ค์ฌ์([1])์ธ ๊ฒฝ์ฐ, ์ค์ฌ์๋ฅผ ๋ฐ์ดํฐ ๋ณด์ ๊ตฌ์ฑ์๊ณผ ํจ๊ป ๋ฐ์ดํฐ ์ผํฐ A์ ๋ฐฐํฌํฉ๋๋ค.
์ฐธ๊ณ
๋ ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ์ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์์ ๋ถ์ฐํ๋ฉด ๋จ์ผ ๋ฐ์ดํฐ ์ผํฐ์ ๋นํด ์ด์ ์ด ์์ต๋๋ค. ๋ ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ๋ก ๋ถ์ฐ๋ ๊ฒฝ์ฐ,
๋ฐ์ดํฐ ์ผํฐ ์ค ํ๋๊ฐ ๋ค์ด๋๋๋ผ๋ ๋จ์ผ ๋ฐ์ดํฐ ์ผํฐ ๋ฐฐํฌํ๊ณผ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
์์์ ๊ตฌ์ฑ์์ด ์๋ ๋ฐ์ดํฐ ์ผํฐ๊ฐ ๋ค์ด๋๋๋ผ๋ ๋ณต์ ๋ณธ ์ธํธ๋ ์ฝ๊ธฐ ์์ ๋ฟ๋ง ์๋๋ผ ์ฐ๊ธฐ ์์ ๋ ๊ณ์ ์ํํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋๋ค์์ ๊ตฌ์ฑ์์ด ์๋ ๋ฐ์ดํฐ ์ผํฐ๊ฐ ๋ค์ด๋๋ฉด ๋ณต์ ๋ณธ ์ธํธ๋ ์ฝ๊ธฐ ์ ์ฉ์ด ๋ฉ๋๋ค.
๊ฐ๋ฅํ๋ค๋ฉด ์ต์ 3๊ฐ ์ด์์ ๋ฐ์ดํฐ ์ผํฐ์ ๊ตฌ์ฑ์์ ๋ฐฐํฌํ์ธ์. ๊ตฌ์ฑ ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ(CSRS)์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ 3๊ฐ(๋๋ ๊ตฌ์ฑ์ ์์ ๋ฐ๋ผ ๊ทธ ์ด์) ์ผํฐ์ ๋ฐฐํฌํ๋ ๊ฒ์ ๋๋ค. ์ธ ๋ฒ์งธ ๋ฐ์ดํฐ ์ผํฐ์ ๋น์ฉ์ด ๋ถ๋ด์ค๋ฌ์ด ๊ฒฝ์ฐ, ํ์ฌ ์ ์ฑ ์ด ํ์ฉํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๋ณด์ ๋ฉค๋ฒ๋ฅผ ๋ ๋ฐ์ดํฐ ์ผํฐ์ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐํ๊ณ ๋๋จธ์ง ๋ฉค๋ฒ๋ ํด๋ผ์ฐ๋์ ์ ์ฅํ๋ ๊ฒ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋๋ค.
์ ์ ํ ์ต์ ์ ์ฌ์ฉํ์ฌ ๋ณต์ ์ธํธ์ ๊ฐ ๊ตฌ์ฑ์์ ์์ํ์ญ์์ค.
๊ฐ ๋ฉค๋ฒ์ ๋ํด ๋ค์ ์ค์ ์ ์ฌ์ฉํ์ฌ mongod
์ธ์คํด์ค๋ฅผ ์์ํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ์
replication.replSetName
์ต์ ์ ์ค์ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด 2๊ฐ ์ด์์ ๋ณต์ ๋ณธ ์ธํธ์ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ ๊ฐ ์ธํธ์ ์ด๋ฆ์ด ๋ฌ๋ผ์ผ ํฉ๋๋ค.net.bindIp
2} ์ต์ ์ ํธ์คํธ ์ด๋ฆ/IP ๋๋ ์ผํ๋ก ๊ตฌ๋ถ๋ ํธ์คํธ ์ด๋ฆ/IP ๋ชฉ๋ก์ผ๋ก ์ค์ ํฉ๋๋ค.๋ค๋ฅธ ์ค์ ์ ๋ฐฐํฌ์ ๋ง๊ฒ ์ ์ ํ๊ฒ ์ค์ ํฉ๋๋ค.
์ด ์์ต์์์๋ ์ธ ๊ฐ์ mongod
์ธ์คํด์ค๊ฐ ๋ค์ ํธ์คํธ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ | ํธ์คํธ ์ด๋ฆ |
---|---|
ํ์ 0 | mongodb0.example.net |
ํ์ 1 | mongodb1.example.net |
๋ฉค๋ฒ 2 | mongodb2.example.net |
๋ค์ ์์์๋ --replSet
๋ฐ --bind_ip
๋ช
๋ น์ค ์ต์
์ ํตํด ๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ๊ณผ IP ๋ฐ์ธ๋ฉ์ ์ง์ ํฉ๋๋ค.
๊ฒฝ๊ณ
์ธ์คํด์ค๋ฅผ ๊ณต๊ฐ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ IP ์ฃผ์์ ๋ฐ์ธ๋ฉํ๊ธฐ ์ ์ ๋ฌด๋จ ์ ๊ทผ์ผ๋ก๋ถํฐ ํด๋ฌ์คํฐ๋ฅผ ๋ณดํธํด์ผ ํฉ๋๋ค. ๋ณด์ ๊ถ์ฅ ์ฌํญ์ ์ ์ฒด ๋ชฉ๋ก์ ์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์ ๋ํ ๋ณด์ ๊ฒ์ฌ ๋ชฉ๋ก์ ์ฐธ์กฐํ์ธ์. ์ต์ํ ์ธ์ฆ์ ํ์ฑํํ๊ณ ๋คํธ์ํฌ ์ธํ๋ผ๋ฅผ ๊ฐํํ๋ ๊ฒ์ ๊ณ ๋ คํฉ๋๋ค.
mongod --replSet "rs0" --bind_ip localhost,<hostname(s)|ip address(es)>
0}์ <hostname(s)|ip address(es)>
๊ฒฝ์ฐ ์๊ฒฉ ํด๋ผ์ด์ธํธ(๋ณต์ ๋ณธ ์งํฉ์ ๋ค๋ฅธ ๊ตฌ์ฑ์ ํฌํจ)๊ฐ ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ธ์คํด์ค์ ํธ์คํธ mongod
์ด๋ฆ ๋ฐ/๋๋ IP ์ฃผ์๋ฅผ ์ง์ ํฉ๋๋ค.
๋๋ ๊ตฌ์ฑ ํ์ผ์์ replica set name
ip addresses
์ ๋ฅผ ์ง์ ํ ์๋ ์์ต๋๋ค.
replication: replSetName: "rs0" net: bindIp: localhost,<hostname(s)|ip address(es)>
๊ตฌ์ฑ ํ์ผ๋ก mongod
์ ์์ํ๋ ค๋ฉด --config
์ต์
์ผ๋ก ๊ตฌ์ฑ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
mongod --config <path-to-config>
ํ๋ก๋์ ๋ฐฐํฌ์์๋ ์ด ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋๋ก ์ด๊ธฐํ ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๊ธฐํ ์คํฌ๋ฆฝํธ๋ ์ด ๋ฌธ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค.
๋ฅผ ์ธ์คํด์ค ์ค ํ๋์ mongosh
์ฐ๊ฒฐํฉ๋๋ค.mongod
mongod
์ค ํ๋(์ด ํํ ๋ฆฌ์ผ์์๋ mongodb0.example.net
)๊ฐ ์คํ ์ค์ธ ๋์ผํ ๋จธ์ ์์๋ mongosh
๋ฅผ ์์ํฉ๋๋ค. mongod
27017
์ ๊ธฐ๋ณธ ํฌํธ์์ ๋ก์ปฌ ํธ์คํธ๋ฅผ ์์ ๋๊ธฐ ์ค์ธ mongod
์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์คํํ๋ฉด ๋ฉ๋๋ค.
mongosh
๊ฒฝ๋ก์ ๋ฐ๋ผ mongosh
๋ฐ์ด๋๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ผ ํ ์๋ ์์ต๋๋ค.
mongod
๊ฐ ๊ธฐ๋ณธ ํฌํธ์์ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ, mongosh
์ --port
์ต์
์ ์ง์ ํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํฉ๋๋ค.
mongosh
์์ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ 0์ ๋ํด rs.initiate()
๋ฅผ ์คํํฉ๋๋ค.
์ค์
rs.initiate()
๋ฅผ ๋ณต์ ๋ณธ ์ธํธ์ ๋จ์ผ mongod
์ธ์คํด์ค์์๋ง ์คํํฉ๋๋ค.
์ค์
๋ณ๊ฒฝ๋ IP ์ฃผ์๋ก ์ธํด ๊ตฌ์ฑ์ด ์ ๋ฐ์ดํธ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ํนํ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ๋๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์์ ๊ตฌ์ฑํ ๋ IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
IP ์ฃผ์ ๋์ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์คํ๋ฆฟ ๋คํธ์ํฌ ํธ๋ผ์ด์ฆ ์ ๋ฐ์ ๊ฑธ์ณ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ์ธ์. MongoDB 5.0๋ถํฐ IP ์ฃผ์๋ก๋ง ๊ตฌ์ฑ๋ ๋ ธ๋๋ ์คํํธ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์คํจํ๋ฉฐ ์์๋์ง ์์ต๋๋ค.
rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "mongodb0.example.net:27017" }, { _id: 1, host: "mongodb1.example.net:27017" }, { _id: 2, host: "mongodb2.example.net:27017" } ] })
MongoDB๋ ๊ธฐ๋ณธ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ํ์ธํฉ๋๋ค.
rs.conf()
2}๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๊ฐ์ฒด๋ฅผ ํ์ํฉ๋๋ค.
rs.conf()
๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๊ฐ์ฒด๋ ๋ค์๊ณผ ์ ์ฌํฉ๋๋ค.
{ "_id" : "rs0", "version" : 1, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : -1, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("585ab9df685f726db2c6a840") } }
์ ํ ์ฌํญ. ํ๋ผ์ด๋จธ๋ฆฌ๊ฐ ๋๊ธฐ ์ํ ๋ฉค๋ฒ ์๊ฒฉ์ ๊ตฌ์ฑํฉ๋๋ค.
๊ฒฝ์ฐ์ ๋ฐ๋ผ ํ ๋ฐ์ดํฐ ์ผํฐ์ ๋
ธ๋๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ์ ๋
ธ๋๋ณด๋ค ๋จผ์ ํ๋ผ์ด๋จธ๋ฆฌ ๋
ธ๋๋ก ์ ์ถ๋๋ ๊ฒ์ ์ ํธํ ์ ์์ต๋๋ค. ํ ๋ฐ์ดํฐ ์ผํฐ์ ๋ฉค๋ฒ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ์ ๋ฉค๋ฒ๋ณด๋ค ๋ ๋์ priority
๋ฅผ ๊ฐ์ง๋๋ก ๋ฉค๋ฒ์ priority
๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
๋คํธ์ํน ์ ํ์ด ์๊ฑฐ๋ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ๊ตฌ์ฑ์ ๋ฑ ๋ณต์ ๋ณธ ์ธํธ์ ์ผ๋ถ ๊ตฌ์ฑ์์ ์ฅ์ ์กฐ์น ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์์ด ๋ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ด ๋์ด์๋ ์ ๋๋ ๊ตฌ์ฑ์์ ์ฐ์ ์์๊ฐ 0์ด ๋๋๋ก ๊ตฌ์ฑํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ดํธ ์ค ํ๋์ ์๋ ๋ฉค๋ฒ์ ์๋์ ์๊ฒฉ์ ๋ฎ์ถ๋ ค๋ฉด(์ด ์์์๋ mongodb2.example.net
) ๋ฉค๋ฒ์ ์ฐ์ ์์๋ฅผ 0.5
๋ก ์ค์ ํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ๋ณด๊ณ ๋ฉค๋ฒ์
members
๋ฐฐ์ด ์์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋ฐฐ์ด ์์น๊ฐ_id
์ ๋ค๋ฅด๋ค๋ ์ ์ ์ ์ํ์ธ์:rs.conf() ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๊ฐ์ฒด๋ฅผ ๋ณ์(์๋ ์์์๋
cfg
)์ ๋ณต์ฌํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ณ์์์ ๋ฉค๋ฒ์ ๋ํ ์ฌ๋ฐ๋ฅธ ์ฐ์ ์์๋ฅผ ์ค์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ณ์๋ฅผrs.reconfig()
์ ์ ๋ฌํ์ฌ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ์ ๋ฐ์ดํธํฉ๋๋ค.์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์ ์ธ ๋ฒ์งธ ๋ฉค๋ฒ(์ฆ, ์์น 2์ ๋ฉค๋ฒ)์ ์ฐ์ ์์๋ฅผ ์ค์ ํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น ์ํ์ค๋ฅผ ์คํํฉ๋๋ค.
cfg = rs.conf() cfg.members[2].priority = 0.5 rs.reconfig(cfg) ์ฐธ๊ณ
rs.reconfig()
์ ธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ํ๋ผ์ด๋จธ๋ฆฌ๊ฐ ๊ฐ์ ๋ก ๋ฌผ๋ฌ๋๊ณ ํฌํ๊ฐ ์ํ๋ฉ๋๋ค. ํ๋ผ์ด๋จธ๋ฆฌ๊ฐ ๋ฌผ๋ฌ๋๋ฉด ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋๋ค. ์ด๋ ์๋๋ ๋์์ ๋๋ค. ์ ํ๋ผ์ด๋จธ๋ฆฌ๋ฅผ ์ ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ํ๊ท ์๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก 12์ด๋ฅผ ๋์ง ์์์ผ ํ๋ฉฐ, ๋ณต์ ๋ณธ ๊ตฌ์ฑ ๋ณ๊ฒฝ์ ํญ์ ์์ ๋ ์ ์ง ๊ด๋ฆฌ ๊ธฐ๊ฐ ๋์์ ๋ฐ์ํด์ผ ํฉ๋๋ค.
์ด๋ฌํ ๋ช ๋ น์ด ๋ฐํ๋๋ฉด ์ง๋ฆฌ์ ์ผ๋ก ์ค๋ณต๋ 3๊ฐ ๋ฉค๋ฒ ๋ณต์ ๋ณธ ์ธํธ๊ฐ ์์ฑ๋ฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ์ ๊ธฐ๋ณธ๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค.
rs.status()
์ฌ์ฉํ์ฌ ๋ณต์ ๋ณธ ์ธํธ์์ ์ฃผ ๋ณต์ ๋ณธ์ ์๋ณํฉ๋๋ค.
์ง๋ฆฌ์ ์ผ๋ก ์ค๋ณต๋ 5๊ฐ ๊ตฌ์ฑ์ ๋ณต์ ๋ณธ ์ธํธ ๋ฐฐํฌ
์ค์
๋ณ๊ฒฝ๋ IP ์ฃผ์๋ก ์ธํด ๊ตฌ์ฑ์ด ์ ๋ฐ์ดํธ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ํนํ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ๋๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์์ ๊ตฌ์ฑํ ๋ IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
IP ์ฃผ์ ๋์ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์คํ๋ฆฟ ๋คํธ์ํฌ ํธ๋ผ์ด์ฆ ์ ๋ฐ์ ๊ฑธ์ณ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ์ธ์. MongoDB 5.0๋ถํฐ IP ์ฃผ์๋ก๋ง ๊ตฌ์ฑ๋ ๋ ธ๋๋ ์คํํธ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์คํจํ๋ฉฐ ์์๋์ง ์์ต๋๋ค.
์ง๋ฆฌ์ ์ผ๋ก ์ค๋ณต๋ 5๊ฐ ๋ฉค๋ฒ ๋ณต์ ๋ณธ ์ธํธ ๋ฐฐํฌ์ ๊ฒฝ์ฐ ์์คํ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ๋ค์ฏ ๋ฉค๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ๊ฐ๋ฅํ ๋ถํฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
3๊ฐ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถํฌ: ๋ฐ์ดํฐ ์ผํฐ A์ 2๊ฐ, ๋ฐ์ดํฐ ์ผํฐ B์ 2๊ฐ, ๋ฐ์ดํฐ ์ผํฐ C์ 1๊ฐ ๋ฉค๋ฒ๋ฅผ ๋ถํฌํฉ๋๋ค.
4๊ฐ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถํฌ: ํ ๊ณณ์ 2๊ฐ, ๋๋จธ์ง 3๊ณณ์ ๊ฐ๊ฐ ํ๋์ ๋ฉค๋ฒ๋ฅผ ๋ถํฌํฉ๋๋ค.
5๊ฐ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถํฌ: ๊ฐ ๋ฐ์ดํฐ ์ผํฐ์ ํ๋์ ๋ฉค๋ฒ๋ฅผ ๋ถํฌํฉ๋๋ค.
2๊ฐ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถํฌ: ๋ฐ์ดํฐ ์ผํฐ A์ 3๊ฐ, B์ 2๊ฐ๋ฅผ ๋ถํฌํฉ๋๋ค. ๊ฐ๋ฅํ๋ค๋ฉด ๊ตฌ์ฑ ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ 2๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถํฌํ๋ ๊ฒ์ ํผํฉ๋๋ค.
์ฐธ๊ณ
๋ ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ์ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์์ ๋ถ์ฐํ๋ฉด ๋จ์ผ ๋ฐ์ดํฐ ์ผํฐ์ ๋นํด ์ด์ ์ด ์์ต๋๋ค. ๋ ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ๋ก ๋ถ์ฐ๋ ๊ฒฝ์ฐ,
๋ฐ์ดํฐ ์ผํฐ ์ค ํ๋๊ฐ ๋ค์ด๋๋๋ผ๋ ๋จ์ผ ๋ฐ์ดํฐ ์ผํฐ ๋ฐฐํฌํ๊ณผ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
์์์ ๊ตฌ์ฑ์์ด ์๋ ๋ฐ์ดํฐ ์ผํฐ๊ฐ ๋ค์ด๋๋๋ผ๋ ๋ณต์ ๋ณธ ์ธํธ๋ ์ฝ๊ธฐ ์์ ๋ฟ๋ง ์๋๋ผ ์ฐ๊ธฐ ์์ ๋ ๊ณ์ ์ํํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋๋ค์์ ๊ตฌ์ฑ์์ด ์๋ ๋ฐ์ดํฐ ์ผํฐ๊ฐ ๋ค์ด๋๋ฉด ๋ณต์ ๋ณธ ์ธํธ๋ ์ฝ๊ธฐ ์ ์ฉ์ด ๋ฉ๋๋ค.
๊ฐ๋ฅํ๋ค๋ฉด ์ต์ 3๊ฐ ์ด์์ ๋ฐ์ดํฐ ์ผํฐ์ ๊ตฌ์ฑ์์ ๋ฐฐํฌํ์ธ์. ๊ตฌ์ฑ ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ(CSRS)์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ 3๊ฐ(๋๋ ๊ตฌ์ฑ์ ์์ ๋ฐ๋ผ ๊ทธ ์ด์) ์ผํฐ์ ๋ฐฐํฌํ๋ ๊ฒ์ ๋๋ค. ์ธ ๋ฒ์งธ ๋ฐ์ดํฐ ์ผํฐ์ ๋น์ฉ์ด ๋ถ๋ด์ค๋ฌ์ด ๊ฒฝ์ฐ, ํ์ฌ ์ ์ฑ ์ด ํ์ฉํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๋ณด์ ๋ฉค๋ฒ๋ฅผ ๋ ๋ฐ์ดํฐ ์ผํฐ์ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐํ๊ณ ๋๋จธ์ง ๋ฉค๋ฒ๋ ํด๋ผ์ฐ๋์ ์ ์ฅํ๋ ๊ฒ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋๋ค.
์ ์ ํ ์ต์ ์ ์ฌ์ฉํ์ฌ ๋ณต์ ์ธํธ์ ๊ฐ ๊ตฌ์ฑ์์ ์์ํ์ญ์์ค.
๊ฐ ๋ฉค๋ฒ์ ๋ํด ๋ค์ ์ค์ ์ ์ฌ์ฉํ์ฌ mongod
์ธ์คํด์ค๋ฅผ ์์ํฉ๋๋ค.
replication.replSetName
์ต์ ์ ๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ์ผ๋ก ์ค์ ํฉ๋๋ค.์ ํ๋ฆฌ์ผ์ด์ ์ด 2๊ฐ ์ด์์ ๋ณต์ ๋ณธ ์ธํธ์ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ ๊ฐ ์ธํธ์ ์ด๋ฆ์ด ๋ฌ๋ผ์ผ ํฉ๋๋ค. ์ผ๋ถ ๋๋ผ์ด๋ฒ๋ ๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ์ผ๋ก ๋ณต์ ๋ณธ ์ธํธ ์ฐ๊ฒฐ์ ๊ทธ๋ฃนํํฉ๋๋ค.
net.bindIp
์ต์ ์ ํธ์คํธ ์ด๋ฆ/IP ์ฃผ์ ๋๋ ์ผํ๋ก ๊ตฌ๋ถ๋ ํธ์คํธ ์ด๋ฆ/IP ์ฃผ์ ๋ชฉ๋ก์ผ๋ก ์ค์ ํฉ๋๋ค.๋ค๋ฅธ ์ค์ ์ ๋ฐฐํฌ์ ๋ง๊ฒ ์ ์ ํ๊ฒ ์ค์ ํฉ๋๋ค.
์ด ํํ ๋ฆฌ์ผ์์๋ 5๊ฐ์ mongod
์ธ์คํด์ค๊ฐ ๋ค์ ํธ์คํธ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ | ํธ์คํธ ์ด๋ฆ |
---|---|
ํ์ 0 | mongodb0.example.net |
ํ์ 1 | mongodb1.example.net |
๋ฉค๋ฒ 2 | mongodb2.example.net |
๋ฉค๋ฒ 3 | mongodb3.example.net |
๋ฉค๋ฒ 4 | mongodb4.example.net |
๋ค์ ์์์๋ --replSet
๋ฐ --bind_ip
๋ช
๋ น์ค ์ต์
์ ํตํด ๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ๊ณผ IP ๋ฐ์ธ๋ฉ์ ์ง์ ํฉ๋๋ค.
๊ฒฝ๊ณ
์ธ์คํด์ค๋ฅผ ๊ณต๊ฐ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ IP ์ฃผ์์ ๋ฐ์ธ๋ฉํ๊ธฐ ์ ์ ๋ฌด๋จ ์ ๊ทผ์ผ๋ก๋ถํฐ ํด๋ฌ์คํฐ๋ฅผ ๋ณดํธํด์ผ ํฉ๋๋ค. ๋ณด์ ๊ถ์ฅ ์ฌํญ์ ์ ์ฒด ๋ชฉ๋ก์ ์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์ ๋ํ ๋ณด์ ๊ฒ์ฌ ๋ชฉ๋ก์ ์ฐธ์กฐํ์ธ์. ์ต์ํ ์ธ์ฆ์ ํ์ฑํํ๊ณ ๋คํธ์ํฌ ์ธํ๋ผ๋ฅผ ๊ฐํํ๋ ๊ฒ์ ๊ณ ๋ คํฉ๋๋ค.
mongod --replSet "rs0" --bind_ip localhost,<hostname(s)|ip address(es)>
0}์ <hostname(s)|ip address(es)>
๊ฒฝ์ฐ ์๊ฒฉ ํด๋ผ์ด์ธํธ(๋ณต์ ๋ณธ ์งํฉ์ ๋ค๋ฅธ ๊ตฌ์ฑ์ ํฌํจ)๊ฐ ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ธ์คํด์ค์ ํธ์คํธ mongod
์ด๋ฆ ๋ฐ/๋๋ IP ์ฃผ์๋ฅผ ์ง์ ํฉ๋๋ค.
๋๋ ๊ตฌ์ฑ ํ์ผ์์ replica set name
hostnames/ip
addresses
์ ๋ฅผ ์ง์ ํ ์๋ ์์ต๋๋ค.
replication: replSetName: "rs0" net: bindIp: localhost,<hostname(s)|ip address(es)>
๊ตฌ์ฑ ํ์ผ๋ก mongod
์ ์์ํ๋ ค๋ฉด --config
์ต์
์ผ๋ก ๊ตฌ์ฑ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
mongod --config <path-to-config>
ํ๋ก๋์ ๋ฐฐํฌ์์๋ ์ด ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋๋ก ์ด๊ธฐํ ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๊ธฐํ ์คํฌ๋ฆฝํธ๋ ์ด ๋ฌธ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค.
๋ฅผ ์ธ์คํด์ค ์ค ํ๋์ mongosh
์ฐ๊ฒฐํฉ๋๋ค.mongod
mongod
์ค ํ๋(์ด ํํ ๋ฆฌ์ผ์์๋ mongodb0.example.net
)๊ฐ ์คํ ์ค์ธ ๋์ผํ ๋จธ์ ์์๋ mongosh
๋ฅผ ์์ํฉ๋๋ค. mongod
27017
์ ๊ธฐ๋ณธ ํฌํธ์์ ๋ก์ปฌ ํธ์คํธ๋ฅผ ์์ ๋๊ธฐ ์ค์ธ mongod
์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์คํํ๋ฉด ๋ฉ๋๋ค.
mongosh
๊ฒฝ๋ก์ ๋ฐ๋ผ mongosh
๋ฐ์ด๋๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ผ ํ ์๋ ์์ต๋๋ค.
mongod
๊ฐ ๊ธฐ๋ณธ ํฌํธ์์ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ, mongosh
์ --port
์ต์
์ ์ง์ ํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํฉ๋๋ค.
mongosh
์์ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ 0์ ๋ํด rs.initiate()
๋ฅผ ์คํํฉ๋๋ค.
์ค์
rs.initiate()
๋ฅผ ๋ณต์ ๋ณธ ์ธํธ์ ๋จ์ผ mongod
์ธ์คํด์ค์์๋ง ์คํํฉ๋๋ค.
rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "mongodb0.example.net:27017" }, { _id: 1, host: "mongodb1.example.net:27017" }, { _id: 2, host: "mongodb2.example.net:27017" }, { _id: 3, host: "mongodb3.example.net:27017" }, { _id: 4, host: "mongodb4.example.net:27017" } ] })
๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ํ์ธํฉ๋๋ค.
rs.conf()
2}๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๊ฐ์ฒด๋ฅผ ํ์ํฉ๋๋ค.
rs.conf()
๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๊ฐ์ฒด๋ ๋ค์๊ณผ ์ ์ฌํฉ๋๋ค.
{ "_id" : "rs0", "version" : 1, "protocolVersion" : NumberLong(1), "writeConcernMajorityJournalDefault" : true, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 3, "host" : "mongodb3.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 4, "host" : "mongodb4.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : -1, "catchUpTakeoverDelayMillis" : 30000, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("5df2c9ccc21c478b838b98d6") } }
์ ํ ์ฌํญ. ํ๋ผ์ด๋จธ๋ฆฌ๊ฐ ๋๊ธฐ ์ํ ๋ฉค๋ฒ ์๊ฒฉ์ ๊ตฌ์ฑํฉ๋๋ค.
๊ฒฝ์ฐ์ ๋ฐ๋ผ ํ ๋ฐ์ดํฐ ์ผํฐ์ ๋
ธ๋๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ์ ๋
ธ๋๋ณด๋ค ๋จผ์ ํ๋ผ์ด๋จธ๋ฆฌ ๋
ธ๋๋ก ์ ์ถ๋๋ ๊ฒ์ ์ ํธํ ์ ์์ต๋๋ค. ํ ๋ฐ์ดํฐ ์ผํฐ์ ๋ฉค๋ฒ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ์ ๋ฉค๋ฒ๋ณด๋ค ๋ ๋์ priority
๋ฅผ ๊ฐ์ง๋๋ก ๋ฉค๋ฒ์ priority
๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
๋คํธ์ํน ์ ํ์ด ์๊ฑฐ๋ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ๊ตฌ์ฑ์ ๋ฑ ๋ณต์ ๋ณธ ์ธํธ์ ์ผ๋ถ ๊ตฌ์ฑ์์ ์ฅ์ ์กฐ์น ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์์ด ๋ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ด ๋์ด์๋ ์ ๋๋ ๊ตฌ์ฑ์์ ์ฐ์ ์์๊ฐ 0์ด ๋๋๋ก ๊ตฌ์ฑํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ดํธ ์ค ํ๋์ ์๋ ๋ฉค๋ฒ์ ์๋์ ์๊ฒฉ์ ๋ฎ์ถ๋ ค๋ฉด(์ด ์์์๋ mongodb2.example.net
) ๋ฉค๋ฒ์ ์ฐ์ ์์๋ฅผ 0.5
๋ก ์ค์ ํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ๋ณด๊ณ ๋ฉค๋ฒ์
members
๋ฐฐ์ด ์์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋ฐฐ์ด ์์น๊ฐ_id
์ ๋ค๋ฅด๋ค๋ ์ ์ ์ ์ํ์ธ์:rs.conf() ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๊ฐ์ฒด๋ฅผ ๋ณ์(์๋ ์์์๋
cfg
)์ ๋ณต์ฌํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ณ์์์ ๋ฉค๋ฒ์ ๋ํ ์ฌ๋ฐ๋ฅธ ์ฐ์ ์์๋ฅผ ์ค์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ณ์๋ฅผrs.reconfig()
์ ์ ๋ฌํ์ฌ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ์ ๋ฐ์ดํธํฉ๋๋ค.์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์ ์ธ ๋ฒ์งธ ๋ฉค๋ฒ(์ฆ, ์์น 2์ ๋ฉค๋ฒ)์ ์ฐ์ ์์๋ฅผ ์ค์ ํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น ์ํ์ค๋ฅผ ์คํํฉ๋๋ค.
cfg = rs.conf() cfg.members[2].priority = 0.5 rs.reconfig(cfg) ์ฐธ๊ณ
rs.reconfig()
์ ธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ํ๋ผ์ด๋จธ๋ฆฌ๊ฐ ๊ฐ์ ๋ก ๋ฌผ๋ฌ๋๊ณ ํฌํ๊ฐ ์ํ๋ฉ๋๋ค. ํ๋ผ์ด๋จธ๋ฆฌ๊ฐ ๋ฌผ๋ฌ๋๋ฉด ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋๋ค. ์ด๋ ์๋๋ ๋์์ ๋๋ค. ์ ํ๋ผ์ด๋จธ๋ฆฌ๋ฅผ ์ ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ํ๊ท ์๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก 12์ด๋ฅผ ๋์ง ์์์ผ ํ๋ฉฐ, ๋ณต์ ๋ณธ ๊ตฌ์ฑ ๋ณ๊ฒฝ์ ํญ์ ์์ ๋ ์ ์ง ๊ด๋ฆฌ ๊ธฐ๊ฐ ๋์์ ๋ฐ์ํด์ผ ํฉ๋๋ค.
์ด๋ฌํ ๋ช ๋ น์ด ๋ฐํ๋๋ฉด ์ง๋ฆฌ์ ์ผ๋ก ์ค๋ณต๋ 5๊ฐ ๊ตฌ์ฑ์ ๋ณต์ ๋ณธ ์ธํธ๊ฐ ์์ฑ๋ฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ์ ๊ธฐ๋ณธ๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค.
rs.status()
์ฌ์ฉํ์ฌ ๋ณต์ ๋ณธ ์ธํธ์์ ์ฃผ ๋ณต์ ๋ณธ์ ์๋ณํฉ๋๋ค.