오랜만에 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을 설정 하지 못해서 삽질을 한적이 있는데.. 이번에 다시 정리하면서 확실하게 이해했습니다.