mongodb 3.4 on Armbian
2018-06-22 내용 정리, User auth 링크
{:.right-history}
이 문서는 MongoDB Community Edition 3.4 버전을 64bit OS인 Amd64, Arm64 지원 OS에 설치해 사용하기 위해서 Install MongoDB Community Edition, on-ubuntu를 따라서 진행했다.
여기서는 Arm을 사용하는 SBC[^2] 컴퓨터에 mongodb 3.4 버전을, Hardkernel Odroid C2를 사용해서 설치를 진행했다.
- Odroid C2 for 64bit
- Armbian Ubuntu Xeniel
MongoDB Community edition
테스트한 Arm64 기반의 Odroic C2 에서는 MongoDB Community Edition을 설치한 후에 systemd
관련 스크립트와 설정 파일등이 적절히 설치되지 않아서, 이 부분에 대한 언급을 추가했다.
사전준비
여기서는 Odroid C2 를 사용하고 Armbian 배포본에서 Ubuntu Xeniel 버전을 사용했다.
- Armbian 배포본 Debian Jessie 에는 아직 mongodb 64bit 를 제공하지 않고 있다.
레포지토리 등록
아래 같이 키 서버를 등록하고 apt source list에 mongodb 를 등록한다.
여러분 시스템이 적용되는 지는 [^1]에 잘 설명되어 있다.
키서버 등록
1 | $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6 |
Mongodb 3.4 는 /etc/apt/sources.list.d/mongodb-org-3.4.list
파일 생성하고 아래 같이 해당 리눅스 버전에 맞는 소스 목록을 추가한다.
Ubuntu 16.04
1 | echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list |
Ubuntu 14.04
1 | echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list |
remove key & ppa
설치 후 필요 없어서 키 서버, 저장소 목록을 지우려면,
삭제할 키 해시 코드 확인: 다음 같이 8자리 코드로 나오거나
1 | sudo apt-key list |
다음 같이 긴 해시 코드로 나온다.
1 | -------------------- |
이 키를
1 | sudo apt-key del A15703C6 |
설치
그리고 apt
명령으로 소스 캐시를 갱신하고 mongodb-org 커뮤니티 버전의 mongodb를 설치한다.
1 | sudo apt update |
설치전 mongodb 3.x 버전은 데이터 저장 파일 시스템으로 xfs 를 권장하고 있다.
create systemd / service entry
mongodb-org 설치후 systemctl
스크립트가 /etc/init.d
에 복사되지 않았다.
여기서는 odroid-c2 armbian 설치 상태, 일반 리눅스 배포본은 잘 된다.
아래 명령을 실행해 mongodb.service 가 없으면 새로 생성해야 한다.
1 | $ sudo systemctl list-unit-files --type=service |grep mongodb |
만약 mongodb.service 가 없다면, /lib/systemd/system/mongod.service
파일을 다음 같이 활성화 시켜준다.
1 | $ cd /lib/systemd/system |
mongodb.service 가 있고,
1 | $ sudo systemctl list-unit-files --type=service |grep mongodb |
disable 상태면 systemctl
명령으로 enable 시킨다.
1 | $ sudo systemctl enable mongodb.service |
그리고 서비스를 시작한다.
1 | $ sudo systemctl start mongod.service |
mongod 서비스가 제대로 실행됐으면 mongo 클라이언트로 테스트해 볼 수 있으면 접속해 볼 수 있다.
Mongo Database 설정
- mongodb 사용자와 디렉토리 퍼미션 확인
- mongod.conf 설정
- mongo client 접속 테스트
- mongodb 인증
mongodb 사용자 확인
mongodb-org 설치하면 사용자 mongodb가 만들어 지지만, 혹시 생성되지 않았으면 시스템에 사용자 mongodb 가 없으면 새로 만든다.
1 | $ sudo adduser --disabled-password --gecos "" --no-create-home --disabled-password --disabled-login mongodb |
로그 디렉토리 /var/log/mongo 그리고 데이터 디렉토리 /data/mongodata 라면 해당 디렉토리에 몽고디비 사용자가 쓸 수 있는 퍼미션을 준다.
1 | $ sudo chown mongo.daemon /var/log/mongodb |
mongod.conf 설정
MongoDB의 systemd
서비스는 데이터베이스 구성 파일 /etc/mongod.conf
을 참조한다.
/etc/mongod.conf
파일에 인증을 제외한 데이터 디렉토리, bindIp, 로그 부분만 설정한다.
1 | storage: |
- dbPath : 데이터베이스 스토리지 위치
- bindIp: 서버 외에서 mongo 클라이언트가 접근하려면 IP 를 입력한다.
현재는 mongo.conf
설정 파일에 접근 제어가 없는 상태에서 mongo 클라이언트로 접속한다
Admin 사용자
mongo
클라이언트로 접속에 성공하면 > 프롬프트가 나온다. admin 데이터베이스로 전환한다.
1 | $mongo |
admin 데이터베이스에서 관리자 role을 가진 사용자를 추가하고, 사용할 데이터베이스의 사용자와 접근 제어를 추가해서 사용하기 위해서 작업한다.
user administrator
userAdmin role
혹은 userAdminAnyDatabase role
을 가진 사용자 만든다. 다음은 admin 데이터베이스에서 사용자를 관리하는 admin 계정을 생성하고 있다.
1 | >db.createUser( |
admin 사용자 패스워드 변경
은
1 | > db.changeUserPassword("accountUser", "SOh3TbYhx8ypJPxmt1oOfL") |
사용자의 role
을 변경,
1 | > db.grantRolesToUser( 'admin', [{role: 'userAdmin', db:'admin'}]) |
혹은 updateUser 를 사용할 수 있다:
1 | db.updateUser( "appClient01", ... |
security.authorization
mongodb.conf 파일에 security.authorization
을 활성화 한다
1 | security: |
systemd 로 서비스를 재시작 한다.
1 | $ sudo systemctl restart mongod.service |
이제 인증 모드에서 데이터베이스에 접속해야 한다.
인증모드로 접속
데이터베이스 시스템에 접근제어가 활성화 되면 mongo
클라이언트 접속시 -u <username>, -p <password>
와 --authenticationDatabase <database>
를 지정해 주어야 한다.
1 | $ mongo --port 27017 -u "admin" -p "****" --authenticationDatabase "admin" |
### `mongod` 명령 사용
명령 mongod
로 MongoDB를 시작해 설정 파일 등이 제대로 동작하는지 확인할 수 있다.
비인증 모드 시작
다음 같이 mongod
를 시작해 동작을 확인한다.
1 | $ sudo mongod --port 27017 --dbpath /data/mongodata |
인증 모드 시작
앞서 시작한 명령행 mongodb를 종료하고 명령라인에서 재시작 --auth
옵션을 붙여 시작한다.
1 | $ mongod --auth --port 27017 --dbpath /data/mongodata |
접근제어 --auth
옵션으로 데이터베이스를 시작하면 로그인시 -u <username>, -p <password>
와 --authenticationDatabase <database>
를 지정해 주어야 한다.
1 | $ mongo --port 27017 -u "admin" -p "****" --authenticationDatabase "admin" |
명령행으로 시작한 mongod 는 종료하고 설정 파일에 인증을 넣자.
데이터베이스 생성과 인증
새 데이터베이스에 컬렉션을 생성하고 데이터베이스 사용자를 접근제어할 수 있는 내용은 MongoDB User Authentication 에서 다루고 있다.
### 기타
WiredTiger library panic
ext4 파일시스템에서 wiredTiger engine으로 실행중 아래 같은 에러가 발생, 여기[^10] 에서 --repair
로 재구성한 후 사용하도록 권장한다.
1 | 2017-07-21T23:26:57.991+0900 E STORAGE [conn31] WiredTiger error (-31804) [1500647217:991504][803:0x7f |
--repair
로 재구성
1 | $ sudo mongod --storageEngine wiredTiger --repair --dbpath /data/dbdata/ |
repaire를 sudo로 진행해서 /data/dbdata 안의 index 파일들이 root 소유권으로 바뀐다. 그래서 /data/dbdata 저장소를 chown으로 mongodb 사용자로 다시 설정
1 | $ sudo chown -R mongodb.mongodb /data/dbdata |
이제 재시작 하면 된다.
XFS warning
1 | I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strong$y recommended with the WiredTiger storage engine |
USB Memory 디스크 사용시
Odroid C2에 64GB USB Memory를 외부 저장장치로 구성할 때 아래 같이 에러를 발생하며 diagnostic.data 폴더 에러, mongodb 가 다운된다. 아마 ext3 파일 시스템을 사용해서 그런 것 같다.
1 | FTDC [ftdc] Uncaught exception in 'FileNotOpen: Failed to open interim file /data/mongodata/diagnostic.data/metrics.interim.temp' in full-time diagnostic data capture subsys |
stackoverflow 에 diagnostic-data 폴더를 지우고 다시 시작하도록 제시되고 있다:
1 | $ sudo rm -f /var/lib/mongo/diagnostic.data/* |
그리고 /etc/mongod.conf
에 full time diagnostic을 비활성화 했다.
1 | setParameter: |
## MongoDB 관련 글
MongoDB Community Edition Installations 시리즈:ㅇ
MongoDB Tutorials 시리즈:
MongoDB와 Middleware Platform:
이전 버전과 기타 자료:
- MongoDB User Authentication
- MongoDB Community Edition 3.6 on Ubuntu(ARM64)
- Mongodb 3.4 install on Armv8
- Raspberry Pi 3 64bit OS openSUSE: Build MongoDB 3.4
참고
[^1]: Install mongodb on Ubuntu
[^2]: SBC Sigle Board Computer. Raspberry Pi, Odroid 등등…
[^3]: mongodb installation on Debian
[^10]: UnsupportedFormat fatal assertion in wiredTiger following
mongodb 3.4 on Armbian
https://blog.thinkbee.kr/2017-04-11-mongodb-3.4-install-armv8-f692faebaa20/