웹사이트 검색

CentOS 7에 MongoDB를 설치하는 방법


소개

MongoDB는 무료이며 오픈 소스인 문서 지향 데이터베이스입니다. 기존의 테이블 기반 관계형 데이터베이스 구조에 의존하지 않기 때문에 NoSQL 데이터베이스로 분류됩니다. 대신 동적 스키마가 있는 JSON과 유사한 문서를 사용합니다. 관계형 데이터베이스와 달리 MongoDB는 데이터베이스에 데이터를 추가하기 전에 미리 정의된 스키마가 필요하지 않습니다. 업데이트된 스키마로 새 데이터베이스를 설정하지 않고도 필요할 때마다 언제든지 스키마를 변경할 수 있습니다.

이 튜토리얼에서는 CentOS 7 서버에 MongoDB Community Edition을 설치합니다.

전제 조건

이 튜토리얼을 따르기 전에 다음이 있는지 확인하십시오.

  • 루트가 아닌 sudo 사용 사용자가 있는 CentOS 7 서버. 지침은 CentOS 7을 사용한 초기 서버 설정 자습서를 참조하십시오.

1단계 - MongoDB 리포지토리 추가

mongodb-org 패키지는 CentOS의 기본 리포지토리 내에 존재하지 않습니다. 그러나 MongoDB는 전용 리포지토리를 유지합니다. 우리 서버에 추가합시다.

vi 편집기를 사용하여 CentOS용 패키지 관리 유틸리티인 yum.repo 파일을 만듭니다.

  1. sudo vi /etc/yum.repos.d/mongodb-org.repo

그런 다음 MongoDB 설명서의 Red Hat에 설치 섹션을 방문하여 최신 안정 릴리스에 대한 리포지토리 정보를 파일에 추가합니다.

[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

ESC 키를 눌러 변경 사항을 파일에 저장한 다음 :wq를 입력하고 ENTER를 누르십시오.

계속하기 전에 MongoDB 리포지토리가 yum 유틸리티 내에 있는지 확인해야 합니다. repolist 명령은 활성화된 리포지토리 목록을 표시합니다.

  1. yum repolist
Output
. . . repo id repo name base/7/x86_64 CentOS-7 - Base extras/7/x86_64 CentOS-7 - Extras mongodb-org-6.0/7/x86_64 MongoDB Repository updates/7/x86_64 CentOS-7 - Updates . . .

MongoDB Repository가 있으면 설치를 진행할 수 있습니다.

2단계 - MongoDB 설치

yum 유틸리티를 사용하여 타사 저장소에서 mongodb-org 패키지를 설치할 수 있습니다.

  1. sudo yum install mongodb-org

두 개의 Is this ok [y/N]: 프롬프트가 있습니다. 첫 번째는 MongoDB 패키지 설치를 허용하고 두 번째는 GPG 키를 가져옵니다. MongoDB 게시자는 소프트웨어에 서명하고 yum은 키를 사용하여 다운로드한 패키지의 무결성을 확인합니다. 각 프롬프트에서 Y를 입력한 다음 ENTER 키를 누릅니다.

다음으로 systemctl 유틸리티를 사용하여 MongoDB 서비스를 시작합니다.

  1. sudo systemctl start mongod

이 자습서에서는 사용하지 않지만 reloadstop 명령을 사용하여 MongoDB 서비스의 상태를 변경할 수도 있습니다.

reload 명령은 mongod 프로세스가 /etc/mongod.conf 구성 파일을 읽고 다시 시작할 필요 없이 변경 사항을 적용하도록 요청합니다.

  1. sudo systemctl reload mongod

stop 명령은 실행 중인 모든 mongod 프로세스를 중지합니다.

  1. sudo systemctl stop mongod

systemctl 유틸리티는 start 명령을 실행한 후 결과를 제공하지 않았지만 mongod.log 의 끝을 보면 서비스가 시작되었음을 확인할 수 있습니다. 파일을 tail 명령으로:

  1. sudo tail /var/log/mongodb/mongod.log
Output
. . . [initandlisten] waiting for connections on port 27017

연결 대기 중 출력은 MongoDB가 성공적으로 시작되었으며 MongoDB 셸을 사용하여 데이터베이스 서버에 액세스할 수 있음을 확인합니다.

  1. mongo

참고: MongoDB Shell을 시작하면 다음과 같은 경고가 표시될 수 있습니다.

** 경고:** soft rlimits가 너무 낮습니다. rlimits는 4096개 프로세스, 64000개 파일로 설정됩니다. 프로세스 수는 최소 32000: 파일 수의 0.5배여야 합니다.

MongoDB는 스레드 애플리케이션입니다. 워크로드를 처리하기 위해 추가 프로세스를 시작할 수 있습니다. 이 경고는 MongoDB가 가장 효율적이 되려면 스핀업 권한이 부여된 프로세스 수가 지정된 시간에 열 수 있는 파일 수의 절반이어야 한다고 명시합니다. 경고를 해결하려면 20-nproc.conf 파일을 편집하여 mongod에 대한 processes 소프트 rlimit 값을 변경하십시오.

  1. sudo vi /etc/security/limits.d/20-nproc.conf

파일 끝에 다음 줄을 추가합니다.

. . .
mongod soft nproc 32000

ESC 키를 눌러 변경 사항을 저장했는지 확인한 다음 :wq를 입력하고 ENTER를 누르십시오.

MongoDB에서 새 제한을 사용할 수 있도록 하려면 systemctl 유틸리티를 사용하여 MongoDB를 다시 시작하십시오.

  1. sudo systemctl restart mongod

그런 다음 MongoDB Shell에 연결할 때 경고가 더 이상 존재하지 않아야 합니다.

셸에서 MongoDB와 상호 작용하는 방법을 알아보려면 db 개체에 대한 메서드 목록을 제공하는 db.help() 메서드의 출력을 검토할 수 있습니다.

  1. db.help()
Output
DB methods: db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ] db.auth(username, password) db.cloneDatabase(fromhost) db.commandHelp(name) returns the help for the command db.copyDatabase(fromdb, todb, fromhost) db.createCollection(name, { size : ..., capped : ..., max : ... } ) db.createUser(userDocument) db.currentOp() displays currently executing operations in the db db.dropDatabase() . . .

백그라운드에서 실행 중인 mongod 프로세스는 그대로 두고 exit 명령을 사용하여 셸을 종료합니다.

  1. exit
Output
Bye

3단계 – 시작 확인

데이터베이스 기반 애플리케이션은 데이터베이스 없이 작동할 수 없기 때문에 MongoDB 데몬인 mongod가 시스템과 함께 시작되도록 할 것입니다.

systemctl 유틸리티를 사용하여 시작 상태를 확인하십시오.

  1. systemctl is-enabled mongod; echo $?

0 출력은 우리가 원하는 활성화된 데몬을 확인합니다. 그러나 1은 시작되지 않는 비활성화된 데몬을 확인합니다.

Output
. . . enabled 0

데몬이 비활성화된 경우 systemctl 유틸리티를 사용하여 활성화하십시오.

  1. sudo systemctl enable mongod

이제 시스템 재부팅 후 자동으로 시작되는 실행 중인 MongoDB 인스턴스가 있습니다.

4단계 – 예제 데이터 세트 가져오기(선택 사항)

다른 데이터베이스 서버와 달리 MongoDB는 test 데이터베이스에 데이터를 제공하지 않습니다. 프로덕션 데이터를 사용하여 새로운 소프트웨어를 실험하고 싶지 않기 때문에 MongoDB 예제에서 샘플 데이터 세트를 다운로드합니다. 이 JSON 문서에는 MongoDB와의 상호 작용을 연습하고 민감한 데이터에 대한 피해를 방지하는 데 사용할 식당 모음이 포함되어 있습니다.

쓰기 가능한 디렉토리로 이동하여 시작하십시오.

  1. cd /tmp

curl 명령과 MongoDB의 링크를 사용하여 JSON 파일을 다운로드합니다.

  1. curl -LO https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

mongoimport 명령은 테스트 데이터베이스에 데이터를 삽입합니다. --db 플래그는 사용할 데이터베이스를 정의하고 --collection 플래그는 데이터베이스에서 정보를 저장할 위치를 지정하고 --file 플래그는 가져오기 작업을 수행할 파일을 명령에 알려줍니다.

  1. mongoimport --db test --collection restaurants --file /tmp/primer-dataset.json

출력은 primer-dataset.json 파일에서 데이터 가져오기를 확인합니다.

Output
connected to: localhost imported 25359 documents

샘플 데이터 세트가 있으면 이에 대해 쿼리를 수행할 수 있습니다.

MongoDB 셸을 다시 시작합니다.

  1. mongo

셸은 기본적으로 데이터를 가져온 test 데이터베이스를 선택합니다.

find() 메서드로 레스토랑 컬렉션을 쿼리하여 데이터세트의 모든 레스토랑 목록을 표시합니다. 컬렉션에는 25,000개 이상의 항목이 포함되어 있으므로 선택적 limit() 메서드를 사용하여 쿼리 출력을 지정된 수로 줄이십시오. 또한 pretty() 메서드는 새 줄과 들여쓰기를 사용하여 정보를 사람이 더 쉽게 읽을 수 있도록 합니다.

  1. db.restaurants.find().limit(1).pretty()
Output
{ "_id" : ObjectId("57e0443b46af7966d1c8fa68"), "address" : { "building" : "1007", "coord" : [ -73.856077, 40.848447 ], "street" : "Morris Park Ave", "zipcode" : "10462" }, "borough" : "Bronx", "cuisine" : "Bakery", "grades" : [ { "date" : ISODate("2014-03-03T00:00:00Z"), "grade" : "A", "score" : 2 }, { "date" : ISODate("2013-09-11T00:00:00Z"), "grade" : "A", "score" : 6 }, { "date" : ISODate("2013-01-24T00:00:00Z"), "grade" : "A", "score" : 10 }, { "date" : ISODate("2011-11-23T00:00:00Z"), "grade" : "A", "score" : 9 }, { "date" : ISODate("2011-03-10T00:00:00Z"), "grade" : "B", "score" : 14 } ], "name" : "Morris Park Bake Shop", "restaurant_id" : "30075445" }

샘플 데이터 세트를 계속 사용하여 MongoDB에 익숙해지거나 db.restaurants.drop() 메서드로 삭제할 수 있습니다.

  1. db.restaurants.drop()

마지막으로 exit 명령으로 셸을 종료합니다.

  1. exit
Output
Bye

결론

이 자습서에서는 타사 리포지토리를 yum에 추가하고 MongoDB 데이터베이스 서버를 설치하고 샘플 데이터 세트를 가져오고 간단한 쿼리를 수행했습니다. 컬렉션으로 데이터베이스를 만들고, 많은 문서로 데이터베이스를 채우고, 강력한 애플리케이션을 구축하는 등 MongoDB로 할 수 있는 일이 훨씬 더 많습니다. MongoDB에 대해 자세히 알아보려면 MongoDB에 대한 시리즈 자습서를 확인하십시오.