ํค ํ์ผ ์ธ์ฆ์ ์ฌ์ฉํ์ฌ ์์ฒด ๊ด๋ฆฌํ ์ค๋ ํด๋ฌ์คํฐ ๋ฐฐํฌ
์ด ํ์ด์ง์ ๋ด์ฉ
๊ฐ์
์ค๋ฉ๋ ํด๋ฌ์คํฐ ์ ๋ํ ์ก์ธ์ค ์ ์ด๋ฅผ ์ ์ฉํ๋ ค๋ฉด ๋ค์์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
๋ด๋ถ ์ธ์ฆ์ ์ฌ์ฉํ๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ ์์ ๊ฐ ๋ณด์
์ฌ์ฉ์ ์ก์ธ์ค ์ ์ด๋ฅผ ์ฌ์ฉํ๋ ์ฐ๊ฒฐ ํด๋ผ์ด์ธํธ์ ํด๋ฌ์คํฐ ๊ฐ์ ๋ณด์
์ด ํํ ๋ฆฌ์ผ์์๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๊ฐ ๋ฉค๋ฒ๊ฐ ๋ฐ๋์ ๋์ผํ ๋ด๋ถ ์ธ์ฆ ๋ฉ์ปค๋์ฆ๊ณผ ์ค์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ฆ, ํด๋ฌ์คํฐ์ mongos
๋ฐ mongod
๊ฐ๊ฐ์ ๋ด๋ถ ์ธ์ฆ์ ์ํํด์ผ ํฉ๋๋ค.
๋ค์ ํํ ๋ฆฌ์ผ์์๋ ํค ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ด๋ถ ์ธ์ฆ์ ํ์ฑํํฉ๋๋ค.
๋ด๋ถ ์ธ์ฆ์ ์ค์ ํ๋ฉด ์ฌ์ฉ์ ์ก์ธ์ค ์ ์ด๋ ๊ฐํ๋ฉ๋๋ค. ๋ณต์ ๋ณธ ์ธํธ์ ์ฐ๊ฒฐํ๋ ค๋ฉด mongosh
์ ๊ฐ์ ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์ ๊ณ์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ก์ธ์ค ์ ์ด๋ฅผ ์ฐธ์กฐํ์ธ์.
CloudManager ๋ฐ OpsManager
Cloud Manager ๋๋ Ops Manager๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ, ์ธ์ฆ์ ์ํํ๋ ค๋ฉด ํด๋น Cloud Manager ๋งค๋ด์ผ ๋๋ Ops Manager ๋งค๋ด์ผ์ ํ์ธํ์ธ์.
๊ณ ๋ ค ์ฌํญ
์ค์
๋ณ๊ฒฝ๋ IP ์ฃผ์๋ก ์ธํด ๊ตฌ์ฑ์ด ์ ๋ฐ์ดํธ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ํนํ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ๋๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์์ ๊ตฌ์ฑํ ๋ IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
IP ์ฃผ์ ๋์ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์คํ๋ฆฟ ๋คํธ์ํฌ ํธ๋ผ์ด์ฆ ์ ๋ฐ์ ๊ฑธ์ณ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ์ธ์. MongoDB 5.0๋ถํฐ IP ์ฃผ์๋ก๋ง ๊ตฌ์ฑ๋ ๋ ธ๋๋ ์คํํธ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์คํจํ๋ฉฐ ์์๋์ง ์์ต๋๋ค.
IP ๋ฐ์ธ๋ฉ
2} ๋ฐmongod
mongos
MongoDB localhost
๋ฐ์ด๋๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค.
ํค ํ์ผ ๋ณด์
ํค ํ์ผ์ ์ต์ํ์ ๋ณด์ ํํ์ด๋ฉฐ, ํ ์คํธ ๋๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์๋ x.509 ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ก์ธ์ค ์ ์ด
์ด ์์ต์๋ admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต์ํ์ ๊ด๋ฆฌ ์ฌ์ฉ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ๋ง ๋ค๋ฃน๋๋ค. ์ฌ์ฉ์ ์ธ์ฆ์๋ ๊ธฐ๋ณธ SCRAM ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํฉ๋๋ค. ์๋-์๋ต ๋ณด์ ๋ฉ์ปค๋์ฆ์ ํ
์คํธ ๋๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ํ๋ก๋์
ํ๊ฒฝ์ ๊ฒฝ์ฐ x.509 ์ธ์ฆ์ ๋๋ ์์ฒด ๊ด๋ฆฌํ LDAP ํ๋ก์ ์ธ์ฆ(MongoDB Enterprise์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ) ๋๋ ์์ฒด ๊ด๋ฆฌํ ๋ฐฐํฌ์์ Kerberos ์ธ์ฆ(MongoDB Enterprise์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํน์ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ๋ํ ์ฌ์ฉ์ ์์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํน์ ์ธ์ฆ ๋ฉ์ปค๋์ฆ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฌ์ฉ์ ์์ฑ ๋ฐ ๊ด๋ฆฌ์ ๋ํ ๊ถ์ฅ์ฌํญ์ โค ์ญํ ๊ธฐ๋ฐ ์ก์ธ์ค ์ ์ด ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ธ์.
์ฌ์ฉ์
์ผ๋ฐ์ ์ผ๋ก ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๋ํ ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ ค๋ฉด mongos
์ ์ฐ๊ฒฐํ์ฌ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ผ๋ถ ์ ์ง ๊ด๋ฆฌ ์์ ์๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ํน์ ์ค๋์ ๋ํ ์ง์ ์ฐ๊ฒฐ์ด ํ์ํฉ๋๋ค. ์ด๋ฌํ ์์ ์ ์ํํ๋ ค๋ฉด ์ค๋์ ์ง์ ์ฐ๊ฒฐํ๊ณ ์ค๋ ๋ก์ปฌ ๊ด๋ฆฌ ์ฌ์ฉ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
์ค๋ ๋ก์ปฌ ์ฌ์ฉ์๋ ํน์ ์ค๋ ์๋ง ์กด์ฌํ๋ฉฐ ์ค๋๋ณ ์ ์ง ๊ด๋ฆฌ ๋ฐ ๊ตฌ์ฑ์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ค๋ ๋ก์ปฌ ์ฌ์ฉ์๋ก๋ mongos
์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
์ด ํํ ๋ฆฌ์ผ์์๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์ฌ์ฉ์๋ฅผ ์์ฑํด์ผ ํ์ง๋ง, ์ค๋ ๋ก์ปฌ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๋ ์ ํ์ ๋จ๊ณ๋ ํฌํจ๋์ด ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์ ์ฌ์ฉ์ ๋ณด์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ด์ ์ฒด์
์ด ํํ ๋ฆฌ์ผ์์๋ mongod
๋ฐ mongos
ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํฉ๋๋ค. Windows ์ฌ์ฉ์๋ ๋์ mongod.exe
๋ฐ mongos.exe
ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์์ํ๊ธฐ ์ ์
MongoDB 8.0 ๋ถํฐ๋ directShardOperations
์ญํ ์ ์ฌ์ฉํ์ฌ ์ค๋ ์ ๋ํด ์ง์ ๋ช
๋ น์ ์คํํด์ผ ํ๋ ์ ์ง ๊ด๋ฆฌ ์์
์ ์ํํ ์ ์์ต๋๋ค.
๊ฒฝ๊ณ
directShardOperations
์ญํ ์ ์ฌ์ฉํ์ฌ ๋ช
๋ น์ ์คํํ๋ฉด ํด๋ฌ์คํฐ ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์๊ณ ๋ฐ์ดํฐ๊ฐ ์์๋ ์ ์์ต๋๋ค. directShardOperations
์ญํ ์ ์ ์ง ๊ด๋ฆฌ ๋ชฉ์ ์ผ๋ก๋ง ์ฌ์ฉํ๊ฑฐ๋ MongoDB ์ง์ ์ ์ง์นจ ์ ๋ฐ๋ผ ์ฌ์ฉํ์ธ์. ์ ์ง ๊ด๋ฆฌ ์์
์ํ์ด ์๋ฃ๋๋ฉด directShardOperations
์ญํ ์ฌ์ฉ์ ์ค์งํฉ๋๋ค.
ํค ํ์ผ ์ก์ธ์ค ์ ์ด๊ฐ ํฌํจ๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๋ฐฐํฌ
๋ค์ ์ ์ฐจ์์๋ mongos
, config ์๋ฒ ๋ฐ 2๊ฐ์ ์ค๋๋ก ๊ตฌ์ฑ๋ ์ ์ค๋ฉ๋ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํฉ๋๋ค.
์ค์
๋ณ๊ฒฝ๋ IP ์ฃผ์๋ก ์ธํด ๊ตฌ์ฑ์ด ์ ๋ฐ์ดํธ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ํนํ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์ ๋๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์์ ๊ตฌ์ฑํ ๋ IP ์ฃผ์ ๋์ DNS ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
IP ์ฃผ์ ๋์ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์คํ๋ฆฟ ๋คํธ์ํฌ ํธ๋ผ์ด์ฆ ์ ๋ฐ์ ๊ฑธ์ณ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ์ธ์. MongoDB 5.0๋ถํฐ IP ์ฃผ์๋ก๋ง ๊ตฌ์ฑ๋ ๋ ธ๋๋ ์คํํธ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์คํจํ๋ฉฐ ์์๋์ง ์์ต๋๋ค.
ํค ํ์ผ ์์ฑ
ํค ํ์ผ ์ธ์ฆ์ ์ฌ์ฉํ๋ฉด ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๊ฐ mongod
๋๋ mongos
์ธ์คํด์ค๋ ๋ฐฐํฌ์์ ๋ค๋ฅธ ๋ฉค๋ฒ๋ฅผ ์ธ์ฆํ๊ธฐ ์ํ ๊ณต์ ์ํธ๋ก ํค ํ์ผ์ ๋ด์ฉ์ ์ฌ์ฉํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ํค ํ์ผ์ ๊ฐ์ง mongod
๋๋ mongos
์ธ์คํด์ค๋ง ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
์ฐธ๊ณ
๋ด๋ถ ๋ฉค๋ฒ์ญ ์ธ์ฆ์ ์ํ ํคํ์ผ์ YAML ํ์์ ์ฌ์ฉํด ํคํ์ผ์ ์ฌ๋ฌ ํค๋ฅผ ํ์ฉํฉ๋๋ค. YAML ํ์์ ๋ค์ ์ค ํ๋๋ฅผ ํ์ฉํฉ๋๋ค.
๋จ์ผ ํค ๋ฌธ์์ด(์ด์ ๋ฒ์ ๊ณผ ๋์ผ)
ํค ๋ฌธ์์ด์ ์์
YAML ํ์์ ํ ์คํธ ํ์ผ ํ์์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ๋จ์ผ ํค ํคํ์ผ๊ณผ ํธํ๋ฉ๋๋ค.
ํค ๊ธธ์ด๋ 6~1024์ ์ฌ์ด์ฌ์ผ ํ๋ฉฐ base64 ์ธํธ์ ๋ฌธ์๋ง ํฌํจํ ์ ์์ต๋๋ค. ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ฉค๋ฒ๋ ํ๋ ์ด์์ ๊ณตํต ํค๋ฅผ ๊ณต์ ํด์ผ ํฉ๋๋ค.
์ฐธ๊ณ
UNIX ์์คํ ์์๋ ํค ํ์ผ์ ๊ทธ๋ฃน ๋๋ ์๋ ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค. Windows ์์คํ ์์๋ ํค ํ์ผ ๊ถํ์ด ํ์ธ๋์ง ์์ต๋๋ค.
์ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํค ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ ์์
์์๋ openssl
์ฌ์ฉํ์ฌ ๊ณต์ ์ํธ๋ก ์ฌ์ฉํ ๋ณต์กํ ์์ฌ ๋์ 1024์ ๋ฌธ์์ด์ ์์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ chmod
์ฌ์ฉํ์ฌ ํ์ผ ์์ ์์๊ฒ๋ง ์ฝ๊ธฐ ๊ถํ์ ์ ๊ณตํ๋๋ก ํ์ผ ๊ถํ์ ๋ณ๊ฒฝํฉ๋๋ค.
openssl rand -base64 756 > <path-to-keyfile> chmod 400 <path-to-keyfile>
ํคํ์ผ ์ฌ์ฉ์ ๋ํ ์ถ๊ฐ ์ธ๋ถ ์ ๋ณด ๋ฐ ์๊ตฌ ์ฌํญ์ ํคํ์ผ์ ์ฐธ์กฐํ์ธ์.
ํค ํ์ผ ๋ฐฐํฌ
์ค๋ฉ๋ ํด๋ฌ์คํฐ ๋ฉค๋ฒ๋ฅผ ํธ์คํ
ํ๋ ๊ฐ ์๋ฒ์ ํค ํ์ผ์ ๋ณต์ฌํฉ๋๋ค. mongod
๋๋ mongos
์ธ์คํด์ค๋ฅผ ์คํํ๋ ์ฌ์ฉ์๊ฐ ํ์ผ์ ์์ ์์ด๋ฉฐ ํค ํ์ผ์ ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค.
USB ๋๋ผ์ด๋ธ ๋๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ ์ฅ ์ฅ์น์ ๊ฐ์ด mongod
๋๋ mongos
์ธ์คํด์ค๋ฅผ ํธ์คํ
ํ๋ ํ๋์จ์ด์์ ์ฝ๊ฒ ๋ถ๋ฆฌ๋ ์ ์๋ ์ ์ฅ ๋งค์ฒด์ ํค ํ์ผ์ ์ ์ฅํ์ง ๋ง์ธ์.
config ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ ๋ง๋ค๊ธฐ
๋ค์ ๋จ๊ณ๋ config ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ๋ฐฐํฌํ๋ ๋จ๊ณ์ ๋๋ค.
ํ๋ก๋์ ๋ฐฐํฌ์ ๊ฒฝ์ฐ ๋ฉค๋ฒ๊ฐ ์ธ ๊ฐ ์ด์ ํฌํจ๋ config ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ํ ์คํธ๋ฅผ ์ํด์ ๋จ์ผ ๋ฉค๋ฒ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
config ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ ์์ ๊ฐ mongod
๋ฅผ ์์ํฉ๋๋ค. keyFile
์ค์ ์ ํฌํจํฉ๋๋ค. keyFile
์ค์ ์ ์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์์ ์์ฒด ๊ด๋ฆฌ ๋ด๋ถ/๋ฉค๋ฒ์ญ ์ธ์ฆ ๊ณผ ์ญํ ๊ธฐ๋ฐ ์ก์ธ์ค ์ ์ด๋ฅผ ๋ชจ๋ ์ ์ฉํฉ๋๋ค.
๊ตฌ์ฑ ํ์ผ์ด๋ ๋ช
๋ น์ค์ ํตํด mongod
์ค์ ์ ์ง์ ํ ์ ์์ต๋๋ค.
๊ตฌ์ฑ ํ์ผ
๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ security.keyFile
์ ํค ํ์ผ์ ๊ฒฝ๋ก๋ก, sharding.clusterRole
์ configsvr
๋ก, replication.replSetName
์ ์ํ๋ config ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ์ ์ด๋ฆ์ผ๋ก ์ค์ ํฉ๋๋ค.
security: keyFile: <path-to-keyfile> sharding: clusterRole: configsvr replication: replSetName: <setname>
๊ตฌ์ฑ์ ํ์ํ ์ถ๊ฐ ์ต์
์ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๊ฒฉ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐฐํฌ์ ์ฐ๊ฒฐํ๊ฑฐ๋ ๋ฐฐํฌ ๋ฉค๋ฒ๊ฐ ๋ค๋ฅธ ํธ์คํธ์์ ์คํ๋๋๋ก ํ๋ ค๋ฉด net.bindIp
์ค์ ์ ์ง์ ํ์ธ์.
--config
์ต์
๊ณผ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ์ฌ mongod
๋ฅผ ์์ํฉ๋๋ค.
mongod --config <path-to-config-file>
๋ช ๋ น์ค
๋ช
๋ น์ค ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ --keyFile
, --configsvr
๋ฐ --replSet
๋งค๊ฐ ๋ณ์๋ก mongod
๋ฅผ ์์ํฉ๋๋ค.
mongod --keyFile <path-to-keyfile> --configsvr --replSet <setname> --dbpath <path>
๊ตฌ์ฑ์ ํ์ํ ์ถ๊ฐ ์ต์
์ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๊ฒฉ ํด๋ผ์ด์ธํธ๋ฅผ ๋ฐฐํฌ์ ์ฐ๊ฒฐํ๊ฑฐ๋ ๋ฐฐํฌ ๊ตฌ์ฑ์์ด ๋ค๋ฅธ ํธ์คํธ์์ ์คํ๋๋๋ก ํ๋ ค๋ฉด --bind_ip
๋ฅผ ์ง์ ํฉ๋๋ค.
๋ก์ปฌ ํธ์คํธ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ณต์ ๋ณธ ์ธํธ์ ๋ฉค๋ฒ์ ์ฐ๊ฒฐํฉ๋๋ค.
localhost ์ธํฐํ์ด์ค๋ฅผ ํตํด mongosh
๋ฅผ mongod
์ธ์คํด์ค ์ค ํ๋์ ์ฐ๊ฒฐํฉ๋๋ค. mongod
์ธ์คํด์ค์ ๋์ผํ ๋ฌผ๋ฆฌ์ ์ปดํจํฐ์์ mongosh
๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
๋ฐฐํฌ๋ฅผ ์ํด ์์ฑ๋ ์ฌ์ฉ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ก์ปฌ ํธ์คํธ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์ ์์ฑ ํ localhost ์ธํฐํ์ด์ค๋ ๋ซํ๋๋ค.
rs.initiate()
๋ฉ์๋๋ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํ๋ฉฐ ์ ํ ์ฌํญ์ธ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๋ฌธ์๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๋ฌธ์์๋ ๋ค์์ ํฌํจํฉ๋๋ค.
_id
์ ๋๋ค._id
๋ ๋ฐ๋์mongod
์ผ๋ก ์ ๋ฌ๋--replSet
๋งค๊ฐ ๋ณ์์ ์ผ์นํด์ผ ํฉ๋๋ค.members
ํ๋์ ๋๋ค.members
ํ๋๋ ๋ฐฐ์ด์ด๋ฉฐ ๋ณต์ ๋ณธ ์ธํธ์ ๊ฐ ๋ฉค๋ฒ๋น ๋ฌธ์๊ฐ ํ์ํฉ๋๋ค.configsvr
ํ๋์ ๋๋ค.configsvr
ํ๋๋ ๋ฐ๋์ config ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ์ ๋ํดtrue
๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๋ฌธ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์์ฒด ๊ด๋ฆฌํ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ์ ์ฐธ์กฐํ์ธ์.
rs.initiate()
๋ฉ์๋์ ๊ตฌ์ฑ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํฉ๋๋ค.
rs.initiate( { _id: "myReplSet", configsvr: true, members: [ { _id : 0, host : "cfg1.example.net:27019" }, { _id : 1, host : "cfg2.example.net:27019" }, { _id : 2, host : "cfg3.example.net:27019" } ] } )
config ์๋ฒ ๋ณต์ ๋ณธ ์ธํธ(CSRS)๊ฐ ์์๋๊ณ ์๋๋๋ฉด ์ค๋ ๋ณต์ ๋ณธ ์ธํธ ์์ฑ์ ์งํํฉ๋๋ค.
์ค๋ ๋ณต์ ๋ณธ ์ธํธ ์์ฑ
ํ๋ก๋์ ๋ฐฐํฌ์์๋ ๋ฉค๋ฒ๊ฐ ์ธ ๊ฐ ์ด์ ํฌํจ๋ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ฌ์ฉํ์ธ์. ํ ์คํธ๋ฅผ ์ํด์๋ ๋จ์ผ ๋ฉค๋ฒ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ด ๋จ๊ณ์๋ ์ค๋ ๋ก์ปฌ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํ ์ ํ์ ์ ์ฐจ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ด์ ์ด๋ฅผ ์คํํ๋ฉด ๊ฐ ์ค๋์ ๋ํด ์ค๋ ์์ค ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํํ ์ ์๋ ์ฌ์ฉ์๊ฐ ํ๋ณด๋ฉ๋๋ค.
์ก์ธ์ค ์ ์ด๋ฅผ ํ์ฑํํ ์ํ์์ ๋ณต์ ๋ณธ ์ธํธ์ ๊ฐ ๋ฉค๋ฒ๋ฅผ ์์ํฉ๋๋ค.
keyFile
๋งค๊ฐ ๋ณ์์ ํจ๊ป mongod
๋ฅผ ์คํํ๋ฉด ์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์์ ์์ฒด ๊ด๋ฆฌ ๋ด๋ถ/๋ฉค๋ฒ์ญ ์ธ์ฆ ๊ณผ ์ญํ ๊ธฐ๋ฐ ์ก์ธ์ค ์ ์ด๊ฐ ๋ชจ๋ ์ ์ฉ๋ฉ๋๋ค.
๊ตฌ์ฑ ํ์ผ ๋๋ ๋ช
๋ น์ค์ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ณธ ์ธํธ์ ๊ฐ mongod
๋ฅผ ์์ํฉ๋๋ค.
๊ตฌ์ฑ ํ์ผ
๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ security.keyFile
์ต์
์ ํค ํ์ผ ๊ฒฝ๋ก๋ก ์ค์ ํ๊ณ , replication.replSetName
์ต์
์ ์ํ๋ ๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ์ผ๋ก ์ค์ ํ๊ณ , sharding.clusterRole
์ต์
์ shardsvr
๋ก ์ค์ ํฉ๋๋ค.
security: keyFile: <path-to-keyfile> sharding: clusterRole: shardsvr replication: replSetName: <replSetName> storage: dbPath: <path>
๊ตฌ์ฑ์ ํ์ํ ์ถ๊ฐ ์ต์
์ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๊ฒฉ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐฐํฌ์ ์ฐ๊ฒฐํ๊ฑฐ๋ ๋ฐฐํฌ ๋ฉค๋ฒ๊ฐ ๋ค๋ฅธ ํธ์คํธ์์ ์คํ๋๋๋ก ํ๋ ค๋ฉด net.bindIp
์ค์ ์ ์ง์ ํ์ธ์.
--config
์ต์
๊ณผ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ์ฌ mongod
๋ฅผ ์์ํฉ๋๋ค.
mongod --config <path-to-config-file>
๋ช ๋ น์ค
๋ช
๋ น์ค ์ต์
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํด๋น ์์๋ฅผ ์์ํ ๋ ๋ค์ ์์์ ๊ฐ์ด --keyFile
, replSet
๋ฐ --shardsvr
๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
mongod --keyFile <path-to-keyfile> --shardsvr --replSet <replSetName> --dbpath <path>
๊ตฌ์ฑ์ ํ์ํ ์ถ๊ฐ ์ต์
์ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๊ฒฉ ํด๋ผ์ด์ธํธ๋ฅผ ๋ฐฐํฌ์ ์ฐ๊ฒฐํ๊ฑฐ๋ ๋ฐฐํฌ ๊ตฌ์ฑ์์ด ๋ค๋ฅธ ํธ์คํธ์์ ์คํ๋๋๋ก ํ๋ ค๋ฉด --bind_ip
๋ฅผ ์ง์ ํฉ๋๋ค.
๋ก์ปฌ ํธ์คํธ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ณต์ ๋ณธ ์ธํธ์ ๋ฉค๋ฒ์ ์ฐ๊ฒฐํฉ๋๋ค.
localhost ์ธํฐํ์ด์ค๋ฅผ ํตํด mongosh
๋ฅผ mongod
์ธ์คํด์ค ์ค ํ๋์ ์ฐ๊ฒฐํฉ๋๋ค. mongod
์ธ์คํด์ค์ ๋์ผํ ๋ฌผ๋ฆฌ์ ์ปดํจํฐ์์ mongosh
๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
๋ฐฐํฌ๋ฅผ ์ํด ์์ฑ๋ ์ฌ์ฉ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ก์ปฌ ํธ์คํธ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์ ์์ฑ ํ localhost ์ธํฐํ์ด์ค๋ ๋ซํ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์์ํฉ๋๋ค.
mongosh
์์ rs.initiate()
๋ฉ์๋๋ฅผ ์คํํฉ๋๋ค.
rs.initiate()
๋ ์ ํ ์ฌํญ์ผ๋ก ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๋ฌธ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ ๋ฌธ์์ ๋ค์์ ํฌํจํฉ๋๋ค.
_id
ํ๋๋replication.replSetName
๋๋--replSet
์ต์ ์ ์ง์ ๋ ๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ์ผ๋ก ์ค์ ๋ฉ๋๋ค.๋ณต์ ๋ณธ ์ธํธ์ ๊ฐ ๋ฉค๋ฒ์ ๋ํ ๋ฌธ์๊ฐ ์๋
members
๋ฐฐ์ด.
๋ค์ ์๋ ๋ฉค๋ฒ๊ฐ 3๋ช ์ธ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ด๊ธฐํํ๋ ์์์ ๋๋ค.
rs.initiate( { _id : "myReplSet", members: [ { _id : 0, host : "s1-mongo1.example.net:27018" }, { _id : 1, host : "s1-mongo2.example.net:27018" }, { _id : 2, host : "s1-mongo3.example.net:27018" } ] } )
rs.initiate()
๋ ํฌํ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ณ ๋ฉค๋ฒ ์ค ํ๋๋ฅผ ํ๋ผ์ด๋จธ๋ฆฌ๋ก ์ ์ถํฉ๋๋ค.
๊ณ์ํ๊ธฐ ์ ์ ํ๋ผ์ด๋จธ๋ฆฌ์ ์ฐ๊ฒฐํฉ๋๋ค. ํ๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ๋ฅผ ์ฐพ์ผ๋ ค๋ฉด rs.status()
๋ฅผ ์ฌ์ฉํ์ธ์.
์ค๋ ๋ก์ปฌ ์ฌ์ฉ์ ๊ด๋ฆฌ์๋ฅผ ์์ฑํฉ๋๋ค(์ ํ ์ฌํญ).
์ค์
์ฒซ ๋ฒ์งธ ์ฌ์ฉ์๋ฅผ ๋ง๋ ํ์๋ ๋ก์ปฌ ํธ์คํธ ์์ธ๋ฅผ ๋ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์ฌ์ฉ์๋ userAdminAnyDatabase
์ ๊ฐ์ ๋ค๋ฅธ ์ฌ์ฉ์๋ฅผ ๋ง๋ค ์ ์๋ ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์์ฒด ๊ด๋ฆฌํ ๋ฐฐํฌ์ Localhost ์์ธ๊ฐ ์ข
๋ฃ๋ ํ ์ถ๊ฐ ์ฌ์ฉ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ ์ด๋ ํ ๋ช ์ ์ฌ์ฉ์์๊ฒ ์ฌ์ฉ์๋ฅผ ๋ง๋ค ์ ์๋ ๊ถํ์ด ์๋ ๊ฒฝ์ฐ ๋ก์ปฌ ํธ์คํธ ์์ธ๊ฐ ์ข ๋ฃ๋๋ฉด ์ ๊ถํ์ผ๋ก ์ฌ์ฉ์๋ฅผ ๋ง๋ค๊ฑฐ๋ ์์ ํ ์ ์์ผ๋ฏ๋ก ํ์ํ ์์ ์ ์ก์ธ์คํ์ง ๋ชปํ ์ ์์ต๋๋ค.
db.createUser()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ฌ์ฉ์๋ admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ต์ํ userAdminAnyDatabase
์ญํ ์ ๊ฐ๊ณ ์์ด์ผ ํฉ๋๋ค.
์ฌ์ฉ์๋ฅผ ์์ฑํ๋ ค๋ฉด ํ๋ผ์ด๋จธ๋ฆฌ์ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํฉ๋๋ค.
๋ค์ ์์์๋ admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์ userAdminAnyDatabase
์ญํ ์ ๊ฐ์ง fred
์ฌ์ฉ์๋ฅผ ๋ง๋ญ๋๋ค.
์ค์
์์คํ ๋ณด์์ ๋ณด์ฅํ๊ณ ์ ์์ ์ธ ์ก์ธ์ค๋ฅผ ๋ฐฉ์งํ๊ฑฐ๋ ์ง์ฐํ๋ ค๋ฉด ์ํธ๋ ์์์ ์ด๊ณ ๊ธธ๋ฉฐ ๋ณต์กํด์ผ ํฉ๋๋ค.
ํ
๋ฉ์๋/๋ช
๋ น ํธ์ถ์์ ์ํธ๋ฅผ ์ง์ ์ง์ ํ๋ ๋์ passwordPrompt()
๋ฉ์๋๋ฅผ ๋ค์ํ ์ฌ์ฉ์ ์ธ์ฆ/๊ด๋ฆฌ ๋ฉ์๋/๋ช
๋ น๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ์ mongo
์
ธ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค.
admin = db.getSiblingDB("admin") admin.createUser( { user: "fred", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
๋ฉ์์ง๊ฐ ํ์๋๋ฉด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์ ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ณธ ์ ๊ณต ์ญํ ์ ์ ์ฒด ๋ชฉ๋ก์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์ ์ญํ ์์ ํ์ธํ์ธ์.
์ค๋ ๋ก์ปฌ ์ฌ์ฉ์ ๊ด๋ฆฌ์๋ก ์ธ์ฆํฉ๋๋ค(์ ํ ์ฌํญ).
admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ์ฆํฉ๋๋ค.
mongosh
์์๋ db.auth()
๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์์ ์ฌ์ฉ์ ๊ด๋ฆฌ์ fred
๋ฅผ ์ธ์ฆํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
ํ
๋ฉ์๋/๋ช
๋ น ํธ์ถ์์ ์ํธ๋ฅผ ์ง์ ์ง์ ํ๋ ๋์ passwordPrompt()
๋ฉ์๋๋ฅผ ๋ค์ํ ์ฌ์ฉ์ ์ธ์ฆ/๊ด๋ฆฌ ๋ฉ์๋/๋ช
๋ น๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ์ mongo
์
ธ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค.
db.getSiblingDB("admin").auth("fred", passwordPrompt()) // or cleartext password
๋๋ -u <username>
, -p <password>
๋ฐ --authenticationDatabase
๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํด ์๋ก์ด mongosh
์ธ์คํด์ค๋ฅผ ํ๋ผ์ด๋จธ๋ฆฌ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์์ ์ฐ๊ฒฐํฉ๋๋ค.
mongosh -u "fred" -p --authenticationDatabase "admin"
-p
๋ช
๋ น์ค ์ต์
์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด mongosh
(์ด)๊ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค.
์ค๋ ๋ก์ปฌ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ฅผ ์์ฑํฉ๋๋ค(์ ํ ์ฌํญ).
์ค๋ ๋ก์ปฌ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ์ฌ์ฉ์๋ ๋ณต์ ์์
์ ์ก์ธ์คํ ์ ์๋ ๊ถํ์ ์ ๊ณตํ๋ clusterAdmin
์ญํ ์ ๊ฐ์ง๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ์์ ๊ณผ ๊ด๋ จ๋ ์ ์ฒด ์ญํ ๋ชฉ๋ก์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ ์ญํ ์์ ํ์ธํ์ธ์.
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ์ฌ์ฉ์๋ฅผ ๋ง๋ค๊ณ admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ clusterAdmin
์ญํ ์ ํ ๋นํฉ๋๋ค.
ํ
๋ฉ์๋/๋ช
๋ น ํธ์ถ์์ ์ํธ๋ฅผ ์ง์ ์ง์ ํ๋ ๋์ passwordPrompt()
๋ฉ์๋๋ฅผ ๋ค์ํ ์ฌ์ฉ์ ์ธ์ฆ/๊ด๋ฆฌ ๋ฉ์๋/๋ช
๋ น๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ์ mongo
์
ธ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค.
db.getSiblingDB("admin").createUser( { "user" : "ravi", "pwd" : passwordPrompt(), // or cleartext password roles: [ { "role" : "clusterAdmin", "db" : "admin" } ] } )
๋ฉ์์ง๊ฐ ํ์๋๋ฉด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ๋ฐ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์์ ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ณธ ์ ๊ณต ์ญํ ์ ์ ์ฒด ๋ชฉ๋ก์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ ์ญํ ์ ์ฐธ์กฐํ์ธ์.
์ค๋ ํด๋ฌ์คํฐ์์ฐ๊ฒฐ mongos
ํด๋ฌ์คํฐ mongos
์์ฐ๊ฒฐ
๊ตฌ์ฑ ํ์ผ ๋๋ ๋ช
๋ น์ค ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํค ํ์ผ์ ์ง์ ํ๋ mongos
๋ฅผ ์์ํฉ๋๋ค.
๊ตฌ์ฑ ํ์ผ
๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ security.keyFile
์ ํค ํ์ผ์ ๊ฒฝ๋ก๋ก, sharding.configDB
๋ฅผ ๋ณต์ ๋ณธ ์ธํธ ์ด๋ฆ์ผ๋ก ์ค์ ํ๊ณ , ํ๋ ์ด์์ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ๋ฅผ <replSetName>/<host:port>
ํ์์ผ๋ก ์ค์ ํฉ๋๋ค.
security: keyFile: <path-to-keyfile> sharding: configDB: <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,...
๊ตฌ์ฑ์ ํ์ํ ์ถ๊ฐ ์ต์
์ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๊ฒฉ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐฐํฌ์ ์ฐ๊ฒฐํ๊ฑฐ๋ ๋ฐฐํฌ ๋ฉค๋ฒ๊ฐ ๋ค๋ฅธ ํธ์คํธ์์ ์คํ๋๋๋ก ํ๋ ค๋ฉด net.bindIp
์ค์ ์ ์ง์ ํ์ธ์.
--config
์ต์
๊ณผ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ์ฌ mongos
๋ฅผ ์์ํฉ๋๋ค.
mongos --config <path-to-config>
๋ช ๋ น์ค
๋ช
๋ น์ค ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ mongos
๋ฅผ ์์ํ๊ณ --keyFile
๋ฐ --configdb
๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
mongos --keyFile <path-to-keyfile> --configdb <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,...
๊ตฌ์ฑ์ ํ์ํ ์ถ๊ฐ ์ต์
์ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๊ฒฉ ํด๋ผ์ด์ธํธ๋ฅผ ๋ฐฐํฌ์ ์ฐ๊ฒฐํ๊ฑฐ๋ ๋ฐฐํฌ ๊ตฌ์ฑ์์ด ๋ค๋ฅธ ํธ์คํธ์์ ์คํ๋๋๋ก ํ๋ ค๋ฉด --bind_ip
๋ฅผ ์ง์ ํฉ๋๋ค.
mongos
๋ก์ปฌ ํธ์คํธ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ ์ฐ๊ฒฐํฉ๋๋ค.
localhost ์ธํฐํ์ด์ค๋ฅผ ํตํด mongosh
๋ฅผ mongos
์ธ์คํด์ค ์ค ํ๋์ ์ฐ๊ฒฐํฉ๋๋ค. mongos
์ธ์คํด์ค์ ๋์ผํ ๋ฌผ๋ฆฌ์ ์ปดํจํฐ์์ mongosh
๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
๋ฐฐํฌ๋ฅผ ์ํด ์์ฑ๋ ์ฌ์ฉ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ก์ปฌ ํธ์คํธ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์ ์์ฑ ํ localhost ์ธํฐํ์ด์ค๋ ๋ซํ๋๋ค.
์ฌ์ฉ์ ๊ด๋ฆฌ์๋ฅผ ๋ง๋ญ๋๋ค.
์ค์
์ฒซ ๋ฒ์งธ ์ฌ์ฉ์๋ฅผ ๋ง๋ ํ์๋ ๋ก์ปฌ ํธ์คํธ ์์ธ๋ฅผ ๋ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์ฌ์ฉ์๋ userAdminAnyDatabase
์ ๊ฐ์ ๋ค๋ฅธ ์ฌ์ฉ์๋ฅผ ๋ง๋ค ์ ์๋ ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์์ฒด ๊ด๋ฆฌํ ๋ฐฐํฌ์ Localhost ์์ธ๊ฐ ์ข
๋ฃ๋ ํ ์ถ๊ฐ ์ฌ์ฉ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๋ฅผ ์์ฑํ ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ํ ๋ช ์ด์์ธ ๊ฒฝ์ฐ, ๋ก์ปฌ ํธ์คํธ ์์ธ๊ฐ ์ข ๋ฃ๋๋ฉด ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ ํ ์ ์์ผ๋ฏ๋ก ํ์ํ ์์ ์ ์ํํ์ง ๋ชปํ ์ ์์ต๋๋ค.
db.createUser()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ฌ์ฉ์๋ admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ต์ํ userAdminAnyDatabase
์ญํ ์ ๊ฐ๊ณ ์์ด์ผ ํฉ๋๋ค.
์ค์
์์คํ ๋ณด์์ ๋ณด์ฅํ๊ณ ์ ์์ ์ธ ์ก์ธ์ค๋ฅผ ๋ฐฉ์งํ๊ฑฐ๋ ์ง์ฐํ๋ ค๋ฉด ์ํธ๋ ์์์ ์ด๊ณ ๊ธธ๋ฉฐ ๋ณต์กํด์ผ ํฉ๋๋ค.
๋ค์ ์์์์๋ admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์ fred
๋ฅผ ์์ฑํฉ๋๋ค.
ํ
๋ฉ์๋/๋ช
๋ น ํธ์ถ์์ ์ํธ๋ฅผ ์ง์ ์ง์ ํ๋ ๋์ passwordPrompt()
๋ฉ์๋๋ฅผ ๋ค์ํ ์ฌ์ฉ์ ์ธ์ฆ/๊ด๋ฆฌ ๋ฉ์๋/๋ช
๋ น๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ์ mongo
์
ธ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค.
admin = db.getSiblingDB("admin") admin.createUser( { user: "fred", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
๊ธฐ๋ณธ ์ ๊ณต ์ญํ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์ ๊ณผ ๊ด๋ จ๋ ์ญํ ์ ์ ์ฒด ๋ชฉ๋ก์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์ ์ญํ ์์ ํ์ธํ์ธ์.
์ฌ์ฉ์ ๊ด๋ฆฌ์๋ก ์ธ์ฆํฉ๋๋ค.
db.auth()
๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ๊ด๋ฆฌ์๋ก ์ธ์ฆํด ์ถ๊ฐ ์ฌ์ฉ์๋ฅผ ์์ฑํฉ๋๋ค.
ํ
๋ฉ์๋/๋ช
๋ น ํธ์ถ์์ ์ํธ๋ฅผ ์ง์ ์ง์ ํ๋ ๋์ passwordPrompt()
๋ฉ์๋๋ฅผ ๋ค์ํ ์ฌ์ฉ์ ์ธ์ฆ/๊ด๋ฆฌ ๋ฉ์๋/๋ช
๋ น๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ์ mongo
์
ธ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค.
db.getSiblingDB("admin").auth("fred", passwordPrompt()) // or cleartext password
๋ฉ์์ง๊ฐ ํ์๋๋ฉด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
๋๋ -u <username>
, -p <password>
๋ฐ --authenticationDatabase "admin"
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ mongosh
์ธ์
์ ๋์ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์์ ๋ก์ปฌ ํธ์คํธ ์์ธ๋ฅผ mongos
์ฌ์ฉํด์ผ ํฉ๋๋ค.
mongosh -u "fred" -p --authenticationDatabase "admin"
-p
๋ช
๋ น์ค ์ต์
์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด mongosh
(์ด)๊ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค.
ํด๋ฌ์คํฐ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ด๋ฆฌ ์ฌ์ฉ์ ์์ฑ
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ์ฌ์ฉ์์๊ฒ๋ ๋ณต์ ๋ฐ ์ค๋ฉ ์์
์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ clusterAdmin
์ญํ ์ด ์์ต๋๋ค.
admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์ clusterAdmin
์ฌ์ฉ์๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์ ์์์์๋ admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์ ravi
๋ฅผ ์์ฑํฉ๋๋ค.
์ค์
์์คํ ๋ณด์์ ๋ณด์ฅํ๊ณ ์ ์์ ์ธ ์ก์ธ์ค๋ฅผ ๋ฐฉ์งํ๊ฑฐ๋ ์ง์ฐํ๋ ค๋ฉด ์ํธ๋ ์์์ ์ด๊ณ ๊ธธ๋ฉฐ ๋ณต์กํด์ผ ํฉ๋๋ค.
ํ
๋ฉ์๋/๋ช
๋ น ํธ์ถ์์ ์ํธ๋ฅผ ์ง์ ์ง์ ํ๋ ๋์ passwordPrompt()
๋ฉ์๋๋ฅผ ๋ค์ํ ์ฌ์ฉ์ ์ธ์ฆ/๊ด๋ฆฌ ๋ฉ์๋/๋ช
๋ น๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ์ mongo
์
ธ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค.
db.getSiblingDB("admin").createUser( { "user" : "ravi", "pwd" : passwordPrompt(), // or cleartext password roles: [ { "role" : "clusterAdmin", "db" : "admin" } ] } )
๋ณต์ ๋ณธ ์ธํธ ๋ฐ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์์ ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ณธ ์ ๊ณต ์ญํ ์ ์ ์ฒด ๋ชฉ๋ก์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ ์ญํ ์ ์ฐธ์กฐํ์ธ์.
์ถ๊ฐ ์ฌ์ฉ์ ๋ง๋ค๊ธฐ(์ ํ ์ฌํญ).
ํด๋ผ์ด์ธํธ๊ฐ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์ ์ฐ๊ฒฐํ๊ณ ์ก์ธ์ค ํ ์ ์๋๋ก ์ฌ์ฉ์๋ฅผ ์์ฑํฉ๋๋ค. ๋ฐ ์ read
๊ฐ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ด์ฅ ์ ๊ณต readWrite
์ญํ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์ ์ญํ ์ ์ฐธ์กฐํ์ธ์. ์ถ๊ฐ ๊ด๋ฆฌ ์ฌ์ฉ์๊ฐ ํ์ํ ์๋ ์์ต๋๋ค. ์ฌ์ฉ์์ ๋ํ ์์ธํ ๋ด์ฉ ์ ์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์ ์ฌ์ฉ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ถ๊ฐ ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ ค๋ฉด userAdminAnyDatabase
๋๋ userAdmin
์ญํ ์ ๊ฐ์ง ์ฌ์ฉ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
ํด๋ฌ์คํฐ์ ์ค๋ ์ถ๊ฐ
๊ณ์ ์งํํ๋ ค๋ฉด mongos
์ ์ฐ๊ฒฐ๋์ด์ผ ํ๋ฉฐ, ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๋ํ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ์ฌ์ฉ์๋ก ์ธ์ฆ๋์ด์ผ ํฉ๋๋ค.
์ฐธ๊ณ
์ด๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์์ด๋ฉฐ, ์ค๋ ๋ก์ปฌ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ์๋๋๋ค.
ํด๋ฌ์คํฐ์ ๊ฐ ์ค๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด sh.addShard()
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ค๋๊ฐ ๋ณต์ ๋ณธ ์ธํธ์ธ ๊ฒฝ์ฐ ๋ณต์ ๋ณธ ์ธํธ์ ์ด๋ฆ์ ์ง์ ํ๊ณ ์ธํธ์ ๋ฉค๋ฒ๋ฅผ ์ง์ ํฉ๋๋ค. ํ๋ก๋์
๋ฐฐํฌ์์๋ ๋ชจ๋ ์ค๋๊ฐ ๋ณต์ ๋ณธ ์ธํธ์ฌ์ผ ํฉ๋๋ค.
๋ค์ ์์ ์ ํด๋ฌ์คํฐ์ ๋จ์ผ ์ค๋ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
sh.addShard( "<replSetName>/s1-mongo1.example.net:27017")
๋ค์ ์์
์ ํด๋ฌ์คํฐ์ ๋
๋ฆฝํ mongod
์ค๋๋ฅผ ์ถ๊ฐํ๋ ์์์
๋๋ค.
sh.addShard( "s1-mongo1.example.net:27017")
ํด๋ฌ์คํฐ์ ๋ชจ๋ ์ค๋๊ฐ ํฌํจ๋ ๋๊น์ง ์ด ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค. ์ด๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ๋ ํด๋ฌ์คํฐ๋ฟ๋ง ์๋๋ผ ๊ฐ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ ์์ ๊ฐ์ ๋ด๋ถ ํต์ ์ ๋ํ ์ก์ธ์ค ์ ์ด๋ฅผ ์ ์ฉํฉ๋๋ค.
Collection ์ค๋
๊ณ์ ์งํํ๋ ค๋ฉด mongos
์ ์ฐ๊ฒฐ๋์ด์ผ ํ๋ฉฐ, ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๋ํ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ์ฌ์ฉ์๋ก ์ธ์ฆ๋์ด์ผ ํฉ๋๋ค.
์ฐธ๊ณ
์ด๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์์ด๋ฉฐ, ์ค๋ ๋ก์ปฌ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ์๋๋๋ค.
์ปฌ๋ ์
์ ์ค๋ฉํ๋ ค๋ฉด sh.shardCollection()
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ปฌ๋ ์
์ ์ ์ฒด ๋ค์์คํ์ด์ค์ ์ค๋ ํค๊ฐ ํฌํจ๋ ๋ฌธ์๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.
์ค๋ ํค ์ ํ์ ์ค๋ฉ์ ํจ์จ์ฑ๋ฟ๋ง ์๋๋ผ ๊ตฌ์ญ๊ณผ ๊ฐ์ ํน์ ์ค๋ฉ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๋ฅ๋ ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ค๋ ํค ์ ํ์ ๋์ด๋ ์ ํ ๊ณ ๋ ค ์ฌํญ์ ์ฐธ๊ณ ํ์ธ์.
์ปฌ๋ ์
์ ์ด๋ฏธ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ, shardCollection()
์ ์ฌ์ฉํ๊ธฐ ์ ์ db.collection.createIndex()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ ํค์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
์ปฌ๋ ์
์ด ๋น์ด ์์ผ๋ฉด MongoDB๋ sh.shardCollection()
์ ์ผ๋ถ๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์์ sh.shardCollection()
๋ฉ์๋์ ์์
๋๋ค.
sh.shardCollection("<database>.<collection>", { <key> : <direction> } )
๋ค์ ๋จ๊ณ
ํด๋ผ์ด์ธํธ๊ฐ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐํ์ฌ ์ํธ ์์ฉ์ ํ ์ ์๋๋ก ์ฌ์ฉ์๋ฅผ ์์ฑํฉ๋๋ค.
์ฝ๊ธฐ ์ ์ฉ ๋ฐ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฌ์ฉ์๋ฅผ ์์ฑํ ๋ ํ์ฉํ ์ ์๋ ๊ธฐ๋ณธ ์ ๊ณต ์ญํ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์ ์ญํ ์์ ํ์ธํ์ธ์.
x.509 ๋ด๋ถ ์ธ์ฆ
๋ด๋ถ ์ธ์ฆ์ x.509๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์์ฒด ๊ด๋ฆฌํ MongoDB์ ๋ฉค๋ฒ์ญ ์ธ์ฆ์ x.509 ์ธ์ฆ์ ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
ํค ํ์ผ ๋ด๋ถ ์ธ์ฆ ์์ x๋ก ์ ๊ทธ๋ ์ด๋ ํฉ๋๋ค.509 ๋ด๋ถ ์ธ์ฆ, ํค ํ์ผ ์ธ์ฆ์์ ์์ฒด ๊ด๋ฆฌํ MongoDB ๋ฅผ x๋ก ์ ๊ทธ๋ ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.509 ์ธ์ฆ.