MongoDB 서비스 소개

네이버 클라우드 플랫폼에서 MongoDB를 설치하여 사용할 경우에 필요한 개념과 기본 구조를 설명합니다.

MongoDB

MongoDB는 전세계에서 가장 인기 있고 많이 사용하고 있는 OpenSource 기반의 Document Store Database입니다. 다른 DMBS와 마찬가지로 DataBase를 생성하고 Collection 단위의 구조를 사용하여 Document 단위의 데이터를 조회/변경/추가/삭제합니다. 별도의 GUI을 제공하지 않으며, 주로 CLI(Command Line Interface)를 사용하여 관리하고, GUI 기반의 관리를 위해 MongoDB에서 제공하는 Compass Community edition이나 Third Party-Tool을 사용합니다.

MongoDB는 MySQL과 같은 RDBMS의 특성과, 일반적인 NoSQL 특성을 다 가지고 있는 DBMS입니다. 제조사에서는 이것을 Nexus Architecture라고 하고 있습니다.(출처: Relational Vs Non Relational Database)

MongoDB는 2018년 10월 16일 이후 출시된 제품에 대해서 SSPL(Server Side Public License) OpenSource License 정책을 따르고 있습니다. 라이선스 문제로 인해서, 네이버 클라우드 플랫폼에서는 설치형 및 관리형의 형태로 MongoDB 상품을 제공하고 있지 않습니다.

네이버 클라우드 플랫폼 MongoDB 서비스 구성

서비스

설명서(구, 사용자 가이드)에서는 네이버 클라우드 플랫폼에서 보편적으로 사용하기 편한 MongoDB Cluster를 구성하는 방법을 설명합니다.

네이버 클라우드 플랫폼에서는 설명서(구, 사용자 가이드)로 일반적인 방법을 제안드릴 뿐 설치를 포함하여 일체의 기술 지원을 제공하지 않습니다.

보안

설명서(구, 사용자 가이드)에서 MongoDB 보안과 관련하여 초기에 반드시 설정해야 하는 부분을 자세하게 설명합니다. MongoDB를 구성하여 사용하기 전에 설명서(구, 사용자 가이드)를 참고하여 구성 및 설치 이후에 반드시 적용하시기 바랍니다. 그 중에서도 가장 중요한 아래 2가지는 설명서(구, 사용자 가이드)로 방법을 설명하고 있습니다.

  • 반드시 Linux OS의 mongodb 유저에 대한 패스워드를 설정해야 합니다.
  • MongoDB를 인증 모드로 실행해야 합니다.

관리

네이버 클라우드 플랫폼에서는 MongoDB 관리를 위한 GUI 툴을 Bundle로 제공하지 않습니다. 하지만 MongoDB 제조사에서 제공하는 MongoDB Compass Community Edition을 권장합니다. 아래 경로에서 확인하고 사용할 OS에 맞는 Stable 버전을 다운로드합니다. 라이선스 문제가 발생할 수 있으므로 반드시 라이선스 문제가 없는 Compass Community Edition을 사용하는 것을 권장합니다.(MongoDB Download Center)

MongoDB 설치하기

MongoDB 설치를 위한 Init Script 생성

관리 콘솔 접근

관리 콘솔은 서버를 생성하고 삭제 설정할 수 있는 네이버 클라우드 플랫폼의 서버 관리 도구입니다.

① Init Script 또는 서버를 생성하기 위해 관리 콘솔에 접근하려면 네이버 클라우드 플랫폼에서 콘솔을 클릭합니다.

Init Script 생성

사용자가 MongoDB를 쉽고 편하게 설치할 수 있도록 일반적인 설정이 포함되어 있는 설치 Script를 제공합니다.

Script는 아래의 URL에서 확인할 수 있으며 MongoDB 버전, 포트 등을 변경하여 사용할 수 있습니다.

제공되는 Script는 아래의 환경에 최적화되어 있습니다.

항목 버전
Linux CentOS 7.3
Ubuntu 16.04
MongoDB 4.0.3

제공되는 Script를 이용하지 않고 MongoDB를 설치하려면 [MongoDB 설치 Script 생성] 단계를 건너뜁니다.

이후, 생성된 서버에 MongoDB Source 또는 Package를 설치하여 MongoDB를 설치할 수 있습니다.

① Init Script를 클릭합니다.

② Script 생성 버튼을 클릭합니다.

③ 생성할 Script 이름을 입력합니다.

④ OS 타입을 [Linux]로 선택합니다.

⑤ 설명을 입력합니다.(선택)

⑥ MongoDB 설치 Script를 작성합니다. 아래의 URL에서 Script를 복사한 후, [Script]란에 붙여넣기 합니다.

⑦ Script 확인하기 Script를 통해 구성한 MongoDB 정보를 설명합니다. Script를 수정하여 MongoDB 버전, 포트 등을 변경할 수 있습니다. 원하는 구성에 맞게 수정하여 사용하시기 바랍니다.

#!/bin/bash

#os check
check_os=`sudo cat /etc/os-release | head -n 1 |  awk -F"[\"]" '{print $2}'`
if [ "$check_os" == "CentOS Linux" ]; then
        os_version='rhel70'
else
        os_version='ubuntu1604'
fi

mongo_version='4.0.3'
default_path='/home/mongodb'
folder_name='mongodb-linux-x86_64-'$os_version'-'$mongo_version
tgz_name=$folder_name'.tgz'

# 1. add mongodb user
useradd -m -d /home/mongodb mongodb

# 2. install packages
# if centos
if [ "$os_version" == "rhel70" ]; then
    sudo yum -y install numactl
# if ubuntu
else
    apt-get -y update
    apt install -y numactl
    apt-get install -y libcurl4-openssl-dev
fi

# execute in mongodb
sudo -u mongodb bash <<EOF
# make default directory
cd $default_path
mkdir db db/log db/data db/config db/configdata
# 3. get mongodb source
wget https://fastdl.mongodb.org/linux/$tgz_name -P $default_path
tar xvfz $tgz_name -C $default_path/db
mv db/$folder_name db/mongodb
# add env
echo 'export MONGODB_HOME=/home/mongodb/db/mongodb' >> /home/mongodb/.bashrc
echo 'export PATH=$PATH:/home/mongodb/db/mongodb/bin' >> /home/mongodb/.bashrc
source /home/mongodb/.bashrc
echo 'systemLog:
   destination: file
   path: "/home/mongodb/db/log/mongod.log"
   logAppend: true
   logRotate: rename
storage:
   engine: wiredTiger
   directoryPerDB: true
   wiredTiger:
      engineConfig:
         journalCompressor: snappy
      collectionConfig:
         blockCompressor: snappy
      indexConfig:
         prefixCompression: true
   dbPath: "/home/mongodb/db/data"
   journal:
      enabled: true
      commitIntervalMs: 300
processManagement:
   fork: true
   pidFilePath: "/tmp/mongod.pid"
net:
   port: 27017
   bindIpAll: true
   maxIncomingConnections: 20000
   unixDomainSocket:
      enabled: false
setParameter:
  failIndexKeyTooLong: false
security:
  authorization: enabled' >>$default_path/db/config/mongod.conf
touch $default_path/db/config/mongos.conf
touch $default_path/db/config/configserver.conf
numactl --interleave=all /home/mongodb/db/mongodb/bin/mongod -f /home/mongodb/db/config/mongod.conf  &
EOF

#if centos
if [ "$os_version" == "rhel70" ]; then
    echo 'sleep 5
sudo -u mongodb bash <<EOF
  numactl --interleave=all  /home/mongodb/db/mongodb/bin/mongod -f /home/mongodb/db/config/mongod.conf  &
  # numactl --interleave=all  /home/mongodb/db/mongodb/bin/mongod -f /home/mongodb/db/config/configserver.conf  &
  # numactl --interleave=all  /home/mongodb/db/mongodb/bin/mongos -f /home/mongodb/db/config/mongos.conf  &
EOF
exit 0' >> /etc/rc.d/rc.local

#if ubuntu
else
    # add command to rc.local
    sed -i s/'exit 0'// /etc/rc.local

    echo 'sleep 5
sudo -u mongodb bash <<EOF
  numactl --interleave=all  /home/mongodb/db/mongodb/bin/mongod -f /home/mongodb/db/config/mongod.conf  &
  # numactl --interleave=all  /home/mongodb/db/mongodb/bin/mongod -f /home/mongodb/db/config/configserver.conf  &
  # numactl --interleave=all  /home/mongodb/db/mongodb/bin/mongos -f /home/mongodb/db/config/mongos.conf  &
EOF
exit 0' >> /etc/rc.local
fi
  • Script를 이용하여 생성할 경우 'mongodb' 계정을 통해 MongoDB에 접속할 수 있습니다.

  • MongoDB 설치 파일은 '/home/mongodb'에 생성됩니다.

  • 설치되는 MongoDB 버전은 4.0.3이며 변경이 필요할 경우 위 Script에서 [mongo_version='4.0.3'] 부분을 원하는 버전으로 변경합니다.

  • 포트는 MongoDB 기본 포트인 27017로 생성되며 해당 값은 변경할 것은 권장합니다. 아래 부분을 수정하여 변경할 수 있습니다.

    net:
       port: 27017
    
  • 서버 재시작 시 mongos, config 서버의 자동 재시작을 원한다면 아래 두 줄의 주석을 해제합니다. 단, 서버 생성 이후 /home/mongodb/db/config 아래의 configserver.conf와 mongos.conf를 적절하게 설정해야 합니다. configserver.conf와 mongos.conf 파일의 설정 방법은 "MongoDB 구성하기"를 참고해주시기 바랍니다.

    # 아래의 두 줄에서 '#'를 제거하여 주석을 해제합니다.
    # numactl --interleave=all  /home/mongodb/db/mongodb/bin/mongod -f /home/mongodb/db/config/configserver.conf  &
    # numactl --interleave=all  /home/mongodb/db/mongodb/bin/mongos -f /home/mongodb/db/config/mongos.conf  &
    

⑧ Script 생성 버튼을 클릭합니다.

서버 생성

① All Products를 클릭합니다.

② Server를 클릭합니다.

③ 서버 생성을 클릭합니다.

서버 이미지 선택

① 설치하고자 하는 OS를 선택하여 [다음]을 클릭합니다.

서버 설정

① 서버 타입을 설정합니다.

② 서버 개수를 설정합니다.

③ 서버 이름을 입력합니다.(서버 이름은 소문자와 숫자로 구성할 수 있습니다.)

④ [Script 선택]의 드롭 다운을 클릭하면 추가한 Init Script 목록을 볼 수 있습니다. [MongoDB 설치를 위한 Init Script 생성] 단계에서 생성한 Script를 선택합니다.

⑤ [다음]을 클릭합니다.

인증키 설정

인증키 설정 단계에서는 새로운 인증키를 생성하거나 기존 인증키를 그대로 사용할 수 있습니다.

① 처음 사용자는 새로운 인증키 생성을 선택하고 인증키 이름을 입력합니다.

② 예제에서는 mongodb-keyfile이라는 이름으로 인증키를 입력했습니다.

③ 인증키 생성 및 저장을 클릭하고 안전한 곳에 저장합니다.

  • 다운로드된 mongodb-keyfile.pem 파일을 안전한 곳에 저장합니다. 이 파일은 향후 서버의 암호를 만들어내는 데 사용됩니다. 같은 pem 파일을 사용하더라도 각각의 서버에 모두 다른 암호가 생성됩니다.(같은 pem 파일을 이용한 서버라고 하더라도 각각 pem 파일을 업로드해 암호를 다시 생성해야 합니다.)

④ [다음]을 클릭합니다.

방화벽 설정

방화벽 설정에서는 ACG(Access Control Group)를 생성하거나 보유 ACG를 선택합니다.

① 처음 생성하는 경우 신규 ACG 생성을 선택한 후 ACG 생성을 클릭합니다.

② 이름에 적당한 이름을 입력합니다. allopen을 입력했습니다.

③ 개인 PC 혹은 웹 서버가 DB에 접속할 수 있도록 ACG 설정을 입력합니다.

  • 프로토콜: 허용할 프로토콜을 선택합니다.

  • 접근 소스: 접근을 시도하는 곳의 IP나 대역을 기입합니다. 예를 들면 단일 IP의 경우 10.64.51.205만 입력하고, 10.64.51.XXX 대역에서 모든 접근이 필요할 경우 10.64.51.0/24를 입력합니다. 내부 Private IP가 NAT 방식을 통해 외부로 나갈 경우는 Public IP를 입력해야 합니다. 모든 대역을 오픈할 경우 0.0.0.0/0을 입력합니다. 가능하면 개인 PC, 웹서버에서만 접근이 가능하도록 단일 IP로 설정하길 권장합니다.

  • 허용 포트(서비스): 포트를 개별로 오픈할 경우 필요한 포트 번호를 허용 포트(서비스)에 입력 후 추가 버튼을 누릅니다. 필요한 포트가 여러 개일 경우 행을 추가해 입력합니다. 모든 포트를 오픈할 경우 1-65535를 입력합니다. 단, 이 경우 서버는 보안에 취약하게 됩니다. 예제에서는 1-65535를 입력 했습니다.

④ 추가 아이콘을 클릭합니다.

⑤ [생성]을 클릭합니다.

최종 확인

위 단계까지 진행하고 난 후, pem 키 파일이 내 컴퓨터의 안전한 곳에 보관되어 있어야 하고, ACG 설정이 올바르게 되어 있어야 합니다. Pem 키 파일이 없다면, 생성한 서버에 접근할 수 없으니 특별히 유의합니다.

① 선택한 내용을 확인한 후에 MongoDB가 설치된 서버를 생성합니다.

서버 접속 설정 및 확인

포트 포워딩 설정

① 서버 생성 이후 상단의 [포트 포워딩 설정] 버튼을 선택합니다.

② 아래 화면의 포트 포워딩 설정에서 ssh접속을 위한 외부 포트를 등록합니다.

③ 외부 포트 등록 후 [추가]를 선택합니다.

④ [적용]을 클릭합니다.

관리자 비밀번호 확인

① 포트 포워딩 설정 이후 상단의 [서버 관리 및 설정 변경] 버튼을 선택합니다.

② 이후 팝업 메뉴에 [관리자 비밀번호 확인]을 선택합니다.

③ 관리자 비밀번호 확인 창에서 [파일 선택]으로 인증키 파일을 선택합니다.

④ [비밀번호 확인] 버튼을 클릭합니다.

⑤ 이후 화면에 나온 비밀번호를 인지합니다.

터미널을 통한 서버 접속

터미널프로그램을 사용하여 아래와 같이 접속합니다.

  • PORT: 포트 포워딩으로 설정한 포트번호
  • 공인IP: 포트 포워딩 화면에 안내된 서버 접속용 공인IP
  • 패스워드: 관리자 비밀번호에 출력된 패스워드(초기 패스워드는 반드시 변경합니다.)
ssh -p [PORT] root@[공인IP]

연관 정보 바로 가기

아래 가이드에서 연관 정보를 확인할 수 있습니다.

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...