* 기존 몽고 3.x 버전 설치문서를 기반으로 작성해서 몇 가지는 틀릴 수 있습니다.
* 참고로, 4.x에서는 기존 3.x에서 남아있던 소스를 많이 제거해서 성능적인 부분이 많이 개선되었으며, secondary에서 read 때 lock부분이 변경되어(복제 적용 중에 읽기가 허용됨) 대용량의 서비스에 더 좋아진 것 같습니다.
참고
#OS튜닝
# nofile 및 nprc 갯수 튜닝
echo "* soft nofile 64000" >> /etc/security/limits.conf
echo "* hard nofile 64000" >> /etc/security/limits.conf
echo "* soft nproc 64000" >> /etc/security/limits.conf
echo "* hard nproc 64000" >> /etc/security/limits.conf
vim /etc/security/limits.d/20-nproc.conf 후에 64000으로 변경
Run the sysctl command below to apply the changed limits to the system:
sysctl -p
ulimit -a 명령어로 확인 가능
기타
- system service 의 resource limits들은 /etc/systemd/system.conf 여기에 설정해야 함
# repo 추가
vi /etc/yum.repos.d/mongodb-org-4.0.repo 이후 아래 입력
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
# 설치
yum install -y mongodb-org
# 기본 설정 작업
#huge 설정
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
#재 부팅시 자동으로 시작(필요시)
chkconfig mongod on
#몽고 데이터 저장 디렉토리 생성 및 mongod계정의 소유로 변경(예)
mkdir -p /data/mongo/repl_0
chown -R mongod:mongod /data
# 몽고 시작
#몽고 서비스 시작
systemctl start mongod
#몽고 프롬프트에 접속
mongo
#참고 : 몽고 삭제
systemctl stop mongod
#Remove any MongoDB packages that you had previously installed.
yum erase $(rpm -qa | grep mongodb-org)
#Remove MongoDB databases and log files.
rm -rf /var/log/mongodb
rm -rf /var/lib/mongo
#필요시
rm -rf /data
#참고 : 몽고 설정(/etc/mongod.conf)
특정파일의 config 파일을 이용하려면 mongod --config 파일경로 (이 명령어로는 root로 프로세스가 실행되니 필요시 init.d 등을 이용할수도 있음)
vi /etc/mongod.conf 후 아래샘플을 참고하여 수정해서 사용
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
quiet: true
storage:
dbPath: /data/mongo/repl_0
journal:
enabled: true
#wiredTiger:
#engineConfig:
#cacheSizeGB: 0.5
net:
port: 27017
#bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces. (주석으로 막으면 모든 IP에서 접속 가능. AWS에서는 SG로 보안처리 하고 있어서 편의상 모두 허용하기도 함)
replication:
replSetName: repl_set
#참고 : 몽고 replica 설정
primary가 될 서버에서 몽고 콘솔로 접속 : mongo
#Replica set 초기화
rs.initiate()
#Secondary 노드 추가
rs.add("secondary장비의 IP:27017")
#Arbiter 노드 추가
rs.add( { host: "arbiter장비IP:27017", arbiterOnly: true } )
# 잘 저장되는지 테스트
use testdb
db.test_collection.insert({'msg':'test message'})
db.test_collection.find()
#Secondary에서는 아래 명령 실행 후 조회해 보면 됨
db.slaveOk(true)
#참고 - 1개 장비에 여러개의 몽고데몬을 실행시켜야할 경우
1개의 몽고DB를 설치하면 아래에 service 파일이 생성됨
/etc/systemd/system/multi-user.target.wants
해당 디렉토리의 mongod.service 심볼릭링크가 가리키는 파일(/usr/lib/systemd/system/mongod.service) 이 하나의 데몬 파일
/usr/lib/systemd/system/mongod.service 파일을 복사하여 한개 더 생성(ex. cp /usr/lib/systemd/system/mongod.service /usr/lib/systemd/system/mongod2.service)
복사한 해당 파일의 내용을 적당히 수정
예)
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongod
Group=mongod
Environment="OPTIONS=--quiet -f /etc/mongod2.conf"
ExecStart=/usr/bin/mongod $OPTIONS run
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb2
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb2
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb2
PermissionsStartOnly=true
PIDFile=/var/run/mongodb2/mongod.pid
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
[Install]
WantedBy=multi-user.target
설정들 데몬에 반영
systemctl daemon-reload
#참고 mongod.conf 1번
# mongod.conf
# for documentation of all options, see:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
quiet: true
# Where and how to store data.
storage:
dbPath: /data/mongo/repl_0
journal:
enabled: true
# engine:
# mmapv1:
wiredTiger:
engineConfig:
cacheSizeGB: 0.4
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
# network interfaces
net:
port: 27017
# bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
#security:
#operationProfiling:
#replication:
replication:
replSetName: repl_set
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
#참고 mongod2.conf(1개 서버에 2개 프로세스 동시에 띄울때 사용할 목적)
# mongod.conf
# for documentation of all options, see:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod2.log
# quiet: true
# Where and how to store data.
storage:
dbPath: /data/mongo/repl_1
journal:
enabled: true
# engine:
# mmapv1:
wiredTiger:
engineConfig:
cacheSizeGB: 0.4
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb2/mongod.pid # location of pidfile
# network interfaces
net:
port: 27018
# bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
#security:
#operationProfiling:
#replication:
replication:
replSetName: repl_set
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
'NoSql > mongo(또는 tokumx)' 카테고리의 다른 글
mongodb 4.2서버에 java client 4.0.4로 커넥션 및 insert하는 샘플소스 (0) | 2020.07.07 |
---|---|
몽고DB replica 재 설정 방법(샘플) (0) | 2019.09.04 |
mongo 3.4 설치방법 정리 (0) | 2017.05.10 |
tokumx 설치 (0) | 2017.04.18 |
Mongo DB tokumx엔진 퀵 설치 방법 (0) | 2016.08.08 |