2017. 12. 5. 11:53ㆍ서버 프로그래밍
AWS에서 RDBMS는 RDS를 이용하여 쉽게 처리가 가능한데, MongoDB는 EC2에 세팅을 해서 사용하고 있다. 문제는 기본적으로 사용하는 SSD기반의 EBS가 비싸다는 것이다. 이를 해결하기 위해 마그네틱 HDD 중에 EBS COLD HDD (sc1)이 s3 수준으로 낮은 비용으로 사용할 수 있다는 것을 알게 되어, COLD HDD를 추가하여 장착하여 MongoDB의 데이터 폴더로 마운트해서 사용하기로 했다.
AWS EBS COLD HDD(sc1) 볼륨 추가 및 EC2에 연결하기
AWS 콘솔에서 볼륨 추가하고 EC2에 연결을 하고 나니 다음과 같이 연결된 HDD가 곧바로 확인된다.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
└─xvda1 202:1 0 20G 0 part /
xvdf 202:80 0 500G 0 disk
새로 추가된 HDD를 확인하고 바로 포맷을 한다.
$ sudo file -s /dev/xvdf
/dev/xvdf: data
$ sudo mkfs -t ext4 /dev/xvdf
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 131072000 4k blocks and 32768000 inodes
Filesystem UUID: def4ac88-aabe-4d65-bd8c-0c669c505c36
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
$ sudo file -s /dev/xvdf
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=def4ac88-aabe-4d65-bd8c-0c669c505c36 (extents) (large files) (huge files)
몽고디비의 데이터 파일을 저장하기 위한 폴더를 생성하여 마운트한다.
$ sudo mkdir /data
$ sudo mount /dev/xvdf /data
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
└─xvda1 202:1 0 20G 0 part /
xvdf 202:80 0 500G 0 disk /data
부팅시마다 자동으로 마운트 되도록 설정 파일도 수정한다.
$ sudo vi /etc/fstab
:
:
LABEL=cloudimg-rootfs / ext4 defaults,discard 0 0
/dev/xvdf /data ext4 defaults,nofail 0 0
새로 추가된 볼륨으로 몽고디비 데이터 폴더 변경하기
이미 실행중인 몽고디비를 종료하기 위해서 서비스를 중단시키는데, 중단되었다고 나와도 계속 살아 있는 것이 확인된다.
$ service mongod stop
Stopping mongod: [ OK ]
$ service --status-all
:
mongod (pid 2651) is running...
그래서 몽고디비 클라이언트로 접속을 해서 강제 종료를 하니 몽고디비 서비스가 죽었다고 나온다.
$ mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
Server has startup warnings:
2017-10-11T04:19:51.773+0000 I STORAGE [initandlisten]
2017-10-11T04:19:51.773+0000 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-10-11T04:19:51.773+0000 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-10-11T04:19:52.423+0000 I CONTROL [initandlisten]
2017-10-11T04:19:52.423+0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-10-11T04:19:52.424+0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-10-11T04:19:52.424+0000 I CONTROL [initandlisten]
> use admin
switched to db admin
> db.shutdownServer();
server should be down...
2017-12-05T02:10:38.797+0000 I NETWORK [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2017-12-05T02:10:38.797+0000 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused
2017-12-05T02:10:38.797+0000 I NETWORK [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed
>
>
>
> exit
bye
$ service --status-all
:
mongod dead but subsys locked
그 다음에 몽고디비 서비스를 중단 시키니 제대로 중단이 된다.
$ service mongod stop
Stopping mongod: [ OK ]
$ service --status-all
:
mongod is stopped
이제 데이터 폴더와 로그 폴더를 새로 마운트된 HDD로 이동시키고, 그에 맞게 몽고디비 설정 파일을 수정한다.
$ sudo mv /var/lib/mongo /data/db
$ sudo mv /var/log/mongodb /data/log
$ sudo vi /etc/mongod.conf
# 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: /data/log/mongod.log
# path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /data/db
# dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
설정 파일을 수정한 다음, 몽고디비 서비스를 시작한다.
$ sudo service mongod start
Starting mongod: [ OK ]
http://trend21c.tistory.com/1570
http://pyungyi.blogspot.kr/2013/03/blog-post.html