설치
download
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.3.tgz
버전 확인할 것
압축 풀기
tar xvfz mongodb-linux-x86_64-2.6.3.tgz
링크 걸기
ln -sf mongodb-linux-x86_64-2.6.3 mongodb
.bashrc에 다음 추가
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH=/home/terzeron/mongodb/bin:${PATH}
환경변수 재적용
. .bashrc
저장 디렉토리 생성
sudo mkdir -p /data/db
daemon 실행
nohup sudo mongod --replSet "rs0" &
nohup.out 파일을 살펴볼 것
replication 구성
서버 구성
3대의 서버 중에서 두 대는 replica set을 구성하고 나머지 한 대는 장애 발생 시에 primary를 결정할 결정권자(arbiter) 역할을 맡김
storage1.server 10.0.0.1
storage2.server 10.0.0.2
storage3.server 10.0.0.3 arbiter
호스트명 관리
- DNS에 IP/domain name을 등록하거나 /etc/hosts 파일 수정
- DNS 등록이 중요한 이유는 첫번째 서버에서 rs.initiate()를 할 때, 자신만 알고 있는 자신의 domain name을 등록하고 rs.add()할 때 전파하는데 역방향으로 두번째 서버가 첫번째 서버를 인지하지 못함
- 만약, rs.status()나 rs.config()로 조회했을 때 IP 대신 DN으로 나오면 rs.reconfig(cfg)로 수정할 필요가 있음. 특히 회사의 nCloud 서버에 public DN이 등록되어 있지 않으면 PC client에서 접속 불가능함
- IP나 domain name 중 한 가지로 일관성있게 사용해야 문제가 생기지 않음
실
아무 서버에서나 mongo를 실행하고 replica set 시작
rs.initiate()
rs.add("10.0.0.2")
rs.addArb("10.0.0.3")
client에서 접속할 때
conn = new Mongo("rs0/10.0.0.1,10.0.0.2,10.0.0.3")
MEAN stack의 mongoose 설정
db: 'mongodb://10.0.0.1,10.0.0.2,10.0.0.3/mean-dbname',
db_options: {
replset: {
rs_name: 'rs0'
},
},
Mongoose 기능
- mongoosejs의 내부 에러 핸들링(retry) 로직은 없음
- heartbeat interval 조절은 하드코드되어 있어서 조절 불가능함
- mongodb 자체의 connect option에 다음과 같은 옵션이 제공되어 처음 커넥션 만들 때만 유효한 것으로 확인됨. db_options 항목에 다음 옵션을 추가하면 됨
{ server: { auto_reconnect: true } }