mongodb 설정 - 기본설정
0. 설정순서
/etc/mongod.conf수정/etc/hosts에 domain 추가- 몽고db 실행
- replicaSet 설정
- 재실행테스트
- mongodb collection initialization
- ‘mceadm’ 을 mongod 그룹에 추가
- 추가사항
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 실행
- root 계정 필요
- 매주 서버 하드웨어 리부팅시 systemctl을 이용해서 자동 재시작 할 수 있도록 설정
- 참고 : How to run MongoDB as a non root user in Linux? - Database Administrators Stack Exchange
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;
- rs.secondaryOk()
- Secondary node 에서 query 시 : session 당 한번
rs.secondaryOk()실행 후 테스트 - 참고 : https://stackoverflow.com/questions/8990158/mongodb-replicates-and-error-err-not-master-and-slaveok-false-code#8990428
- Secondary node 에서 query 시 : session 당 한번
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 현대차증권 운영)