MongoDB 4.4 설치 - 몽고DB 4.4 설치

Share

Last Updated on 3월 7, 2024 by Jade(정현호)

안녕하세요 
이번 포스팅에서는 MongoDB 4.4 버전 설치에 대해서 확인해보도록 하겠습니다. 

Platform Support

MongoDB 4.4 Community Edition 은 아래의 RPM OS 기준으로 Red Hat Enterprise Linux (RHEL), CentOS Linux, and Oracle Linux 의 64-bit(x86_64 architecture) versions , Amazon Linux 2 을 지원합니다.

• RHEL / CentOS / Oracle 8
• RHEL / CentOS / Oracle 7
• RHEL / CentOS / Oracle 6
• Amazon Linux 2


그 외 Debian , Suse , Ubuntu 등을 지원하며 또한 ARM64 과 s390x 아키텍처 platform 지원합니다.

Oracle Linux 에서 MongoDB 는 사용시 오직 Red Hat Compatible Kernel (RHCK) 만 지원하고 있습니다.
MongoDB는 Unbreakable Enterprise Kernel (UEK) 에 대해서는 지원하고 있지 않고 있습니다.

그 외 자세한 사항은 Supported Platforms 문서를 참조하시면 됩니다

    

Note

MoongoDB 4.4 에서는 Windows Subsystem for Linux (WSL) 환경은 지원하지 않습니다.

Windows Subsystem for Linux (WSL) - Unsupported

MongoDB does not support the Windows Subsystem for Linux (WSL)

MoongoDB 5.0 버전 부터 WLS 를 지원하고 있습니다.


Ubuntu 22.04 환경에서 MongoDB 5.0 버전 설치에 대한 정보가 필요하실 경우 아래 포스팅을 참조하시면 됩니다.

       

MongoDB 설치

설치하는 방법은 크게 패키지와 tarballs(바이너리 압축/해제) 방식이 있습니다.
포스팅에서는 Centos 7.9 버전에서 MongoDB 4.4 버전을 yum을 이용한 패키지 설치를 진행하였습니다.


Repository 설정

yum(또는 dnf) 로 설치하기 위해서 먼저 yum(dnf) repository 가 설정되어 있어야 합니다.
mongodb-org-4.4.repo 파일에 내용을 추가하도록 하겠습니다.

sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo


## 아래 내용 입력

[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc



패키지 설치

yum(dnf) 를 통해 설치하도록 하겠습니다.

sudo yum install -y mongodb-org
< ...내용 중략 ... >


Installed:
  mongodb-org.x86_64 0:4.4.10-1.el7                                                                                                                                                                                                        

Dependency Installed:
  cyrus-sasl-gssapi.x86_64 0:2.1.26-23.el7    cyrus-sasl-plain.x86_64 0:2.1.26-23.el7
  mongodb-database-tools.x86_64 0:100.5.1-1    
  mongodb-org-database-tools-extra.x86_64 0:4.4.10-1.el7    
  mongodb-org-mongos.x86_64 0:4.4.10-1.el7   
  mongodb-org-server.x86_64 0:4.4.10-1.el7    mongodb-org-shell.x86_64 0:4.4.10-1.el7    
  mongodb-org-tools.x86_64 0:4.4.10-1.el7     


yum(dnf) 명령어를 통해서 패키지를 설치하게 되면 mongod 유저 및 필요한 디렉토리는 생성이 되게 됩니다.

# 유저 확인
grep mongod /etc/passwd;grep mongod /etc/group
mongod:x:499:992:mongod:/var/lib/mongo:/bin/false
mongod:x:992:


# 디렉토리 확인
# ls -al /var/lib/ | grep mongo
drwxr-xr-x.  2 mongod  mongod     6 Oct 14 06:22 mongo

# ls -al /var/log/ | grep mongo
drwxr-xr-x.  2 mongod mongod       24 Dec  5 15:43 mongodb


tarballs 형태로 설치 시에는 유저/그룹 생성과 디렉토리 생성 및 소유권 변경 등의 작업이 필요 합니다.
     

추가 설정

MongoDB 에서 권장되는 OS 측면의 설정 몇 가지를 진행하도록 하겠습니다.
       

THP 옵션 비활성화

Transparent Huge Page(THP) 기능을 비활성화가 필요하며 서비스를 생성하여 진행하겠습니다.

sudo vi /etc/systemd/system/disable-transparent-huge-pages.service


## 아래 내용으로 작성

[Unit]
Description=Disable Transparent Huge Pages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo 'never' >/sys/kernel/mm/transparent_hugepage/enabled && echo 'never' >/sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=basic.target


서비스 파일 작성이 되었다면 아래 순서대로 서비스 활성화 및 시작을 진행합니다.

sudo systemctl daemon-reload

sudo systemctl enable disable-transparent-huge-pages

sudo systemctl start disable-transparent-huge-pages


서비스를 시작 후 에 정상적으로 THP 기능이 비활성화 되었는지는 아래와 같이 확인할 수 있습니다.

cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

[never] 로 선택되어 있다면 비활성화가 된 상태입니다.

Red Hat Enterprise Linux 및 다른 Red Hat 기반 파생 제품에서는 아래 경로를 대신 사용해야 할 수도 있습니다.
/sys/kernel/mm/redhat_transparent_hugepage/enabled
/sys/kernel/mm/redhat_transparent_hugepage/defrag
     

ulimit 설정

ulimit 의 open files 값이 64000 미만이면 MongoDB 시작 오류가 발생될 수 있으므로 설정이 필요하며, 또한 권장되는 nproc 값에 대해서도 수정하도록 하겠습니다.

sudo vi /etc/security/limits.conf


## 아래 내용 입력

mongod soft nofile 64000
mongod hard nofile 64000

mongod soft nproc 64000
mongod hard nproc 64000

MongoDB 실행 유저가 mongod 가 아닐 경우 사용하는 유저명으로 기재하면 됩니다.
    

SELinux

RHEL,CentOS,Oracle Linux 에서 기본적으로 구성 되어있는 보안 기능인 SELinux 가 활성화되어 있을 경우에 정책 추가가 필요 합니다.
(SELinux 를 운영 정책 등으로 비활성화 중이라면 해당 내용은 Skip 하셔도 됩니다)

먼저 SELinux 활성화 설정 여부는 아래 와 같이 확인할 수 있습니다.

grep "SELINUX=" /etc/sysconfig/selinux

# SELINUX= can take one of these three values:
SELINUX=enforcing

위의 조회 결과 enforcing 으로 되어 있다면 SELinux 가 사용중인 것으로 확인하시면 됩니다.

checkpolicy 패키지를 설치를 합니다.

sudo yum install checkpolicy


2개의 TE(Type Enforcement) 을 작성 및 정책을 추가하도록 하겠습니다.

• mongodb_cgroup_memory.te

cat > mongodb_cgroup_memory.te <<EOF
module mongodb_cgroup_memory 1.0;
require {
      type cgroup_t;
      type mongod_t;
      class dir search;
      class file { getattr open read };
}
#============= mongod_t ==============
allow mongod_t cgroup_t:dir search;
allow mongod_t cgroup_t:file { getattr open read };
EOF


checkmodule -M -m -o mongodb_cgroup_memory.mod mongodb_cgroup_memory.te
semodule_package -o mongodb_cgroup_memory.pp -m mongodb_cgroup_memory.mod
sudo semodule -i mongodb_cgroup_memory.pp



• mongodb_proc_net.te

cat > mongodb_proc_net.te <<EOF
module mongodb_proc_net 1.0;
require {
type cgroup_t;
type configfs_t;
type file_type;
type mongod_t;
type proc_net_t;
type sysctl_fs_t;
type var_lib_nfs_t;
class dir { search getattr };
class file { getattr open read };
}
#============= mongod_t ==============
allow mongod_t cgroup_t:dir { search getattr } ;
allow mongod_t cgroup_t:file { getattr open read };
allow mongod_t configfs_t:dir getattr;
allow mongod_t file_type:dir { getattr search };
allow mongod_t file_type:file getattr;
allow mongod_t proc_net_t:file { open read };
allow mongod_t sysctl_fs_t:dir search;
allow mongod_t var_lib_nfs_t:dir search; EOF checkmodule -M -m -o mongodb_proc_net.mod mongodb_proc_net.te semodule_package -o mongodb_proc_net.pp -m mongodb_proc_net.mod sudo semodule -i mongodb_proc_net.pp



• mongodb_sysctl_net.te

cat > mongodb_sysctl_net.te <<EOF
module mongodb_sysctl_net 1.0;
 
require {
        type mongod_t;
        type init_t;
        type locale_t;
        type ld_so_cache_t;
        type sysctl_net_t;
        class process { execmem };
        class dir search;
        class file { getattr read open execute };
}
 
#============= mongod_t ==============
allow mongod_t sysctl_net_t:dir search;
allow mongod_t sysctl_net_t:file { getattr read open execute };
allow mongod_t ld_so_cache_t:file execute;
allow mongod_t locale_t:file execute;
allow init_t self:process execmem;
EOF


checkmodule -M -m -o mongodb_sysctl_net.mod mongodb_sysctl_net.te
semodule_package -o mongodb_sysctl_net.pp -m mongodb_sysctl_net.mod
sudo semodule -i mongodb_sysctl_net.pp



MongoDB 의 디렉토리를 기본 경로 외 다른 경로를 사용한다면 SELinux 에서의 권한 추가 및 설정이 필요 합니다.
SELinux 에서의 MongoDB는 3개의 type을 가지게 됩니다.
 - mongod_var_lib_t for data directory
 - mongod_log_t for log file directory
 - mongod_var_run_t for pid file directory

사용법은 아래와 같습니다.

1. semanage fcontext
sudo semanage fcontext -a -t <type> </some/MongoDB/directory.*>

2. chcon
sudo chcon -Rv -u system_u -t <type> </some/MongoDB/directory>

3. updated SELinux policies
sudo restorecon -R -v </some/MongoDB/directory>


별도의 경로에서 사용시 3가지 절차를 통해서 정책을 적용하면 되며 실제로 아래 와 같이 수행하면 됩니다.

## 별도의 MongoDB data path

mkdir -p /mongodb/data
chown -R mongod:mongod /mongodb/data
ls -alZ /mongodb/

sudo semanage fcontext -a -t mongod_var_lib_t '/mongodb/data.*'
sudo chcon -Rv -u system_u -t mongod_var_lib_t '/mongodb/data'
sudo restorecon -R -v '/mongodb/data'

-----------------------------------

## 별도의 MongoDB log 경로 사용

mkdir -p /mongodb/log
chown -R mongod:mongod /mongodb/log
ls -alZ /mongodb/

sudo semanage fcontext -a -t mongod_log_t '/mongodb/log.*'
sudo chcon -Rv -u system_u -t mongod_log_t '/mongodb/log'
sudo restorecon -R -v '/mongodb/log'


만약 위와 같이 별도의 다른 디렉토리로 설정하였다면 /etc/mongod.conf 파일을 아래 와 같이 수정합니다.

< .. 중략 ..>

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  #path: /var/log/mongodb/mongod.log
  path: /mongodb/log/mongod.log

# Where and how to store data.
storage:
#  dbPath: /var/lib/mongo
  dbPath: /mongodb/data
  directoryPerDB: true
  journal:
    enabled: true

< .. 중략 ..>



그 외 MongoDB 의 기본 포트인 27017 이 아닌 다른 포트를 사용할 경우 아래와 같이 SELinux 에서 정책 추가가 필요 합니다.

sudo semanage port -a -t mongod_port_t -p tcp 포트번호

      

mongod.conf 수정

MongoDB 시작 전에 필요한 설정 변경을 mongod.conf 파일에서 수정하도록 합니다.
기본 파일 위치: /etc/mongod.conf

vi /etc/mongod.conf

storage:
  dbPath: /var/lib/mongo
  directoryPerDB: true

또는 

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
  directoryPerDB: true


# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1  
  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or,
   alternatively, use the net.bindIpAll setting.

포스팅에서는 storage 항목에서 directoryPerDB: true 를 추가하였습니다.

기본 BindIP 는 127.0.0.1 로 설정 되어있으며 외부 접속이 필요한 경우 0.0.0.0 으로 설정하시면 됩니다.

   

OS 방화벽

OS 방화벽(firewalld)이 활성화 되어있고 외부 접속이 필요할 경우 아래와 같이 MongoDB 포트를 Open 을 합니다.

sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

      

MongoDB 시작

설치 및 추가 설정사항이 완료되었다면 아래와 같이 systemctl 을 통해서 MongoDB 서비스를 시작합니다.

systemctl enable mongod

systemctl start mongod


정상적으로 시작되었다면 특이사항이 있는지 등은 로그를 체크하도록 합니다.

sudo tail -100f /var/log/mongodb/mongod.log

    

Reference

Reference URL
 • mongodb.com/install-mongodb-on-red-hat
 • mongodb.com/v4.4/install-mongodb-on-red-hat
 • mongodb.com/v4.4/transparent-huge-pages
 • mongodb.com/v4.4/supported-platforms
 • mongodb.com/v4.4/configuration-options


연관된 다른 글 

 

 

 

                

4
0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x