ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MongoDB를 설치
    설치&설정 관련/MariaDB & Mysql 2021. 2. 22. 18:04

    오랜만에 MongoDB를 설치해야 할 일이 생겼습니다.

    기존의 MongoDB를 이전설치해야 할 일이 발생했습니다. 기존의 경우 shard와 mongos(router)로 사용했지만, sharding을 하지 않아서 P(Primary)-S(slave)-S(slave) 형식으로 구성하기로 했습니다.

    하위 내용을 4.4 번의 AWS LINUX 기준으로 작성되었습니다.

    1. repo 파일 생성

    root 계정으로 mongodb-org-4.4.repo파일을 생성하고 다음 내용을 작성합니다.

    vi /etc/yum.repos.d/mongodb-org-4.4.repo
    
    [mongodb-org-4.4]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/4.4/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc

    2. mongoDB 설치

    yum 명령어로 mongoDB 4.4를 설치 합니다.

    yum install -y mongodb-org

    3. mongodb 설정파일 셋팅

    설치 기준 디렉토리를 /applications/으로 잡아서 진행하였습니다.

    기준 디렉토리 생성

    mkdir /applications
    cd /applications
    mkdir mongodb
    cd mongodb
    mkdir config
    mkdir log
    mkdir data

    mongod.conf 설정 파일 생성

    replication > replSetName 은 Replica Set 구성을 위해서 P-S 모두 동일 해야 합니다. 접근 port는 27019로 설정했습니다.

    vi /applications/config/mongod.conf
    
    systemLog:
       destination: file
       path: "/applications/mongodb/log/mongod.log"
       logAppend: true
       logRotate: rename
    storage:
       engine: wiredTiger
       directoryPerDB: true
       wiredTiger:
          engineConfig:
             journalCompressor: snappy
          collectionConfig:
             blockCompressor: snappy
          indexConfig:
             prefixCompression: true
       dbPath: "/applications/mongodb/data"
       journal:
          enabled: true
          commitIntervalMs: 300
    processManagement:
       fork: true
       pidFilePath: "/tmp/mongod.pid"
    net:
       port: 27019
       bindIpAll: true
       maxIncomingConnections: 20000
       unixDomainSocket:
          enabled: false
    replication:
        oplogSizeMB: 10240
        replSetName: "replset"

    4. mongodb 시작하기

    다음 명령어로 MongoDB 데몬을 실행합니다.

    mongod -f /applications/mongodb/config/mongod.conf 

    만약 아래와 같은 경고가 발생한다면,

    MongoDB server version: 4.4.3
    ---
    The server generated these startup warnings when booting:
            2021-02-08T11:18:39.873+09:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
            2021-02-08T11:18:39.873+09:00: Soft rlimits too low
            2021-02-08T11:18:39.873+09:00:         currentValue: 8192
            2021-02-08T11:18:39.873+09:00:         recommendedMinimum: 64000

    root 계정으로 /etc/security/limits.conf 파일에 다음과 같이 변경하세요.

    vi /etc/security/limits.conf
    
    *               soft    nproc   1024000
    *               hard    nproc   1024000
    *               -       nofile  64000

    변경이 완료 되었다면 재기동을 하여서 변경내역을 반영하세요.

    shutdown -r now

    5. Replica Set 구성하기

    Primary로 생각한 서버에서 다음의 명령어로 mongo shell에 접근하세요

    mongo localhost:27019/admin

    다음 명령어로 Replica Set을 설정합니다.

    rs.initiate(
               {
          _id: "replset", // config 에서 설정했던, replSetName 입니다.
          version: 1,
          members: [
             { _id: 0, host : "<primaryIP>:<PORT>" },
             { _id: 1, host : "<SecondaryIP>:<PORT>" },
             { _id: 2, host : "<SecondaryIP>:<PORT>" },
          ]
       }
    )
    
    # 결과 
    
    {
        "ok" : 1,
        "$clusterTime" : {
            "clusterTime" : Timestamp(1612755725, 1),
            "signature" : {
                "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                "keyId" : NumberLong(0)
            }
        },
        "operationTime" : Timestamp(1612755725, 1)

    성공이후에는 mongo shell에서 "replset:PRIMARY > " 혹은 "replset:SECONDARY> " 으로 표기 됩니다.

    6. 계정 생성하기

    이후 로그인 처리를 위해서 root 권한을 가진 계정을 mongo shell에서 생성합니다.

    use admin
    db.createUser(
       {
         user: "rootUser",
         pwd: "rootPass",
         roles: ["root"]
       }
    )

    7. mongoDB 인증모드 설정

    꼭 계정을 생성 후에 인증모드를 설정해야 합니다.

    7.1 key 파일 생성하기

    key 파일이 없을 경우 올바른 인증이 되지 않아서 Replica Set에 참여가 되지 않습니다.
    openssl 명령어를 이용해서 key 파일을 생성합니다.
    생성된 키는 최소한의 권한만 가지도록 합니다.

    openssl rand -base64 756 > <path-to-keyfile>
    chmod 400 <path-to-keyfile>

    생성된 파일은 모든 서버에 복제합니다.

    7.2 key 파일 설정과 security 활성화 하기

    /applications/mongodb/config/mongod.conf 파일 하단에 아래 내용을 추가 합니다.

    그리고 모든 mongoDB 서버를 재기동 합니다.

    /applications/mongodb/config/mongod.conf
    
    security:
        authorization: enabled
        keyFile: <path-to-keyfile>

    7.3 로그인 해보기

    모든 처리가 완료 되었다면, 로그인을 해봅니다.

    mongo --port 27019 -u "rootUser" -p
    
    또는 
    
    mongo localhost:27019/admin
    db.auth('rootUser', 'rootPass');

    마치며

    이전에 keyFile을 설정 하지 못해서 삽질을 한적이 있는데.. 이번에 다시 정리하면서 확실하게 이해했습니다.

    참고자료

Designed by Tistory.