04_MongoDB설정(1/2)

mongodb 설정 - 기본설정

0. 설정순서

  1. /etc/mongod.conf 수정
  2. /etc/hosts 에 domain 추가
  3. 몽고db 실행
  4. replicaSet 설정
  5. 재실행테스트
  6. mongodb collection initialization
  7. ‘mceadm’ 을 mongod 그룹에 추가
  8. 추가사항

1. /etc/mongod.conf 수정

설정에서 사용할 directory 생성

mkdir -p /mceadm/apps/mongo/data
mkdir -p /mceadm/apps/mongo/log

# mceadm 으로 log 등을 읽는 등의 작업을 위해 필요하다.
usermod -a -G mongod mceadm
# mongod 에서 /mceadm/apps/ 내의 folder, file 을 접근하기 위해 필요
usermod -a -G hmc mongod

chmod 755 /mceadm/apps
chmod 755 /mceadm/apps/mongo
chown mceadm:hmc /mceadm/apps/mongo

# mongodb 를 설치하면 mongod user/group도 같이 생성된다.
chown mongod:mongod /mceadm/apps/mongo/data
chown mongod:mongod /mceadm/apps/mongo/log

/etc/hosts 에 다음 사항을 추가

replication:
   replSetName: "rs0"
net:
   bindIp: localhost,<hostname(s)|ip address(es)>

※ “rs0” 는 변경가능 → 이 이름을 rs.initiate 를 할 때 사용

• 참고: https://github.com/userhabit/uh-issues/issues/598#issuecomment-1016304501

# mongod.conf in "uhs1.userhabit.io"

# Where and how to store data.
storage:
  dbPath: /mceadm/apps/mongo/data
  journal:
    enabled: true

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /mceadm/apps/mongo/log/mongod.log

# network interfaces
net:
  port: 27617
  bindIp: 127.0.0.1,uhs1.userhabit.io

# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

# auth - 계정을 먼저 만들고 활성화 해야 한다.
# security:
#  authorization: enabled
#  keyFile: /mceadm/apps/mongo/replica_set_key
#  keyFile: /var/lib/mongo/replica_set_key

replication:
   replSetName: "rs0"

2. /etc/hosts 에 domain 추가

echo -e "10.227.108.251  uhs1.userhabit.io\n10.227.108.252  uhs2.userhabit.io\n10.227.108.253  uhs3.userhabit.io\n" >> /etc/hosts

3. 몽고db 실행

systemctl start mongod

기타

  • rpm 설치 시 아래 두 가지가 자동으로 생성됨을 확인할 수 있다.
-rw-r--r-- 1 root root /usr/lib/systemd/system/mongod.service
-rw-r--r-- 1 root root /etc/mongod.conf
  • /etc/mongod.conf 를 보면, 기본 path 로 다음 2가지를 쓰고 있는 것을 알 수 있다.
  • dbPath : /var/lib/mongo
  • log : /var/log/mongod/mongod.log
drwxr-xr-x 2 mongod mongod /var/log/mongod
drwxrw-rw- 1 mongod mongod /var/lib/mongo
srwx------ 1 mongod mongod /tmp/mongodb-27017.sock
  • 참고로, systemctl start mongod 를 수행하면, mongod 계정으로 실행하게 된다.
  • mongod version 확인방법: /usr/bin/mongod --version

4. replicaSet 설정

  • 3개의 서버 내 mongodb 를 전부 실행한 후 한 곳에 가서 mongo로 접속한다.
  • 이후 rs.initiate() 로 replicaSet 설정을 진행한다.
  • 설정 확인은 rs.status() 진행한다.
$ mongo mongodb://uhs1.userhabit.io:27617

...

> rs.initiate( {
       _id : "rs0",
       members: [
          { _id: 0, host: "uhs1.userhabit.io:27617" },
          { _id: 1, host: "uhs2.userhabit.io:27617" },
          { _id: 2, host: "uhs3.userhabit.io:27617" }
       ]
    })
...

> rs.status()

...
//
// 1번째 node 의 priority 를 높여서 항상 primary 가 되도록 설정
//
> cfg = rs.conf()
> cfg.members[0].priority = 2
> rs.reconfig(cfg)
  • priority 설정이 없기 때문에 실행 순서와 관계 없이 3개 중 한개가 primary node로 설정된다
  • 재실행 하면 primary 가 바뀔 수 있지만 성능 및 정상동작 여부와 관계 없음

5. 재실행테스트

  • 3개의 서버내 mongodb는 shutdown 및 restart를 실행하여도 아무런 문제가 없어야 한다.
  • ex) 모두 shutdown 후 restart 시 정상동작 확인 임의의 1개 node만 shutdown 후 restart 시 정상동작 확인

6. mongodb collection initialization

  • 폴라리스 서버를 처음 시작하면 자동으로 collection이 생성됨
  • replcaSet 의 primary 가 있는 서버에서 polaris 를 실행(폴라리스 설치 챕터 참고)
  • primary node 에서 collection 생성을 확인 → secondary node에서도 동기화 확인
mongo
...
rs0:PRIMARY> use userhabit;
rs0:PRIMARY> show collections;
...
rs0:SECONDARY> rs.secondaryOk();
rs0:SECONDARY> show collections;

7. mceadm 을 mongod 그룹에 추가

  • mongodb log 확인을 위해 ‘mceadm’ 을 mongod 그룹에 추가
usermod -a -G mongod mceadm

8. 추가사항

  • 포트변경(22-04-19)
운영 : 27617
개발 : 27917
  • mongod 를 hmc group 에 추가
    • /mceadm 은 others 의 접근 권한이 없기에 mongod 를 hmc group 에 넣는다 (from 현대차증권 운영)