참고
#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 명령어로 확인 가능
# repo 추가
vi /etc/yum.repos.d/mongodb-org-3.4.repo 이후 아래 입력
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.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("arbiter장비IP:37017",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
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
설정들 데몬에 반영
systemctl daemon-reload
#참고 mongod.conf 1번
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# 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:
# http://docs.mongodb.org/manual/reference/configuration-options/
# 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: