웹사이트 검색

CentOS 7에 MongoDB 샤드 클러스터를 설치하는 방법


이 페이지에서

  1. 샤딩 및 복제
  2. 세 가지 샤딩 구성 요소
  3. 1단계 - SELinux 비활성화 및 호스트 구성\n
  4. 2단계 - 모든 인스턴스에 MongoDB 설치
  5. 3단계 - 구성 서버 복제 세트 만들기
  6. 4단계 - 샤드 복제 세트 생성
  7. 5단계 - mongos/쿼리 라우터 구성
  8. 6단계 - mongos/Query Router에 샤드 추가
  9. 7단계 - 테스트
  10. 참조

샤딩은 여러 시스템에 데이터 세트를 저장하는 MongoDB 프로세스입니다. 이를 통해 데이터의 수평적 확장을 수행하고 독립 인스턴스 간에 데이터를 분할할 수 있으며 복제 세트가 될 수 있습니다. 샤딩의 데이터 세트 파티셔닝은 샤드 키를 사용합니다. 샤딩을 사용하면 스택의 데이터 증가에 따라 더 많은 시스템을 추가할 수 있습니다.

샤딩 및 복제

간단하게 만들어 보겠습니다. 음악 컬렉션이 있는 경우 Sharding은 음악 컬렉션을 다른 폴더에 저장하고 보관합니다. 반면 복제는 음악 컬렉션을 다른 인스턴스와 동기화하는 것입니다.

세 가지 샤딩 구성 요소

샤드 - 모든 데이터를 저장하는 데 사용되며 프로덕션 환경에서 각 샤드는 복제본 세트입니다. 고가용성 및 데이터 일관성을 제공합니다.

구성 서버 - 클러스터 메타데이터를 저장하는 데 사용되며 클러스터 데이터 세트 및 샤드의 매핑을 포함합니다. 이 데이터는 작업을 제공하기 위해 mongos/query 서버에서 사용됩니다. 프로덕션 환경에서 3개 이상의 인스턴스를 사용하는 것이 좋습니다.

Mongos/Query Router - 애플리케이션 인터페이스로 실행되는 mongo 인스턴스입니다. 애플리케이션이 mongos 인스턴스에 요청을 하면 mongos가 샤드 키를 사용하여 요청을 샤드 복제본 세트에 전달합니다.

전제 조건

  • 구성 복제 세트로 centOS 7 서버 2개
      • 10.0.15.31 configsvr1
      • 10.0.15.32 configsvr2

        • 10.0.15.21 shardsvr1
        • 10.0.15.22 shardsvr2
        • 10.0.15.23 shardsvr3
        • 10.0.15.24 shardsvr4

          • 10.0.15.11 몽고

          1단계 - SELinux 비활성화 및 호스트 구성

          이 자습서에서는 SELinux를 비활성화합니다. SELinux 구성을 적용에서 비활성화로 변경합니다.

          OpenSSH를 통해 모든 노드에 연결합니다.

          ssh 

          구성 파일을 편집하여 SELinux를 비활성화하십시오.

          vim /etc/sysconfig/selinux

          SELinux 값을 비활성화로 변경합니다.

          SELINUX=disabled

          저장 및 종료.

          그런 다음 각 서버에서 호스트 파일을 편집합니다.

          vim /etc/hosts

          다음 호스트 구성을 붙여넣습니다.

              10.0.15.31      configsvr1
              10.0.15.32      configsvr2
              10.0.15.11      mongos
              10.0.15.21      shardsvr1
              10.0.15.22      shardsvr2
              10.0.15.23      shardsvr3
              10.0.15.24      shardsvr4

          저장 및 종료.

          이제 모든 서버를 다시 시작하십시오.

          reboot

          2단계 - 모든 인스턴스에 MongoDB 설치

          모든 인스턴스에 최신 MongoDB(MongoDB 3.4)를 사용합니다. 다음 명령을 실행하여 새 MongoDB 리포지토리를 추가합니다.

          cat <<'EOF' >> /etc/yum.repos.d/mongodb.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
          EOF

          이제 아래 yum 명령을 사용하여 mongodb 저장소에서 mongodb 3.4를 설치합니다.

          sudo yum -y install mongodb-org

          mongodb를 설치한 후 다음과 같은 방법으로 mongo 또는 mongod 명령을 사용하여 버전 정보를 확인합니다.

          mongod --version

          3단계 - 구성 서버 복제 세트 생성

          전제 조건 섹션에서 우리는 이미 configsvr1 및 configsvr2 머신 2개로 구성 서버를 정의했습니다. 그리고 이 단계에서는 이를 복제 세트로 구성합니다.

          서버에서 실행 중인 mongod 서비스가 있으면 다음 systemctl 명령으로 중지합니다.

          systemctl stop mongod

          기본 mongodb 구성 mongod.conf를 편집합니다.

          vim /etc/mongod.conf

          DB 저장소 경로를 자신의 디렉터리로 변경합니다. 첫 번째 서버에는 /data/db1을 사용하고 두 번째 구성 서버에는 /data/db2 디렉토리를 사용합니다.

          storage:
            dbPath: /data/db1

          bindIP 행의 값을 내부 네트워크 주소로 변경하십시오. configsvr1은 IP 주소가 10.0.15.31이고 두 번째 서버는 10.0.15.32입니다.

          bindIP: 10.0.15.31

          복제 섹션에서 복제 이름을 설정합니다.

          replication:
            replSetName: "replconfig01"

          그리고 샤딩 섹션에서 인스턴스의 역할을 정의합니다. 이 두 인스턴스를 configsvr로 사용합니다.

          sharding:
            clusterRole: configsvr

          저장 및 종료.

          다음으로 MongoDB 데이터를 위한 새 디렉터리를 만든 다음 해당 디렉터리의 소유권 권한을 mongod 사용자로 변경해야 합니다.

          mkdir -p /data/db1
          chown -R mongod:mongod /data/db1

          다음으로 다음 명령으로 mongod 서비스를 시작합니다.

          mongod --config /etc/mongod.conf

          netstat 명령을 사용하여 mongod 서비스가 포트 27017에서 실행 중인지 확인할 수 있습니다.

          netstat -plntu

          Configsvr1 및 Configsvr2는 복제 세트에 대해 준비되었습니다. configsvr1 서버에 연결하고 mongo 셸에 액세스합니다.

          ssh 
          mongo --host configsvr1 --port 27017

          아래 쿼리를 사용하여 모든 configsvr 구성원으로 복제본 세트 이름을 시작합니다.

          rs.initiate(
            {
              _id: "replconfig01",
              configsvr: true,
              members: [
                { _id : 0, host : "configsvr1:27017" },
                { _id : 1, host : "configsvr2:27017" }
              ]
            }
          )

          결과가 { "ok" : 1 }인 경우 configsvr이 이미 복제본 세트로 구성되었음을 의미합니다.

          어떤 노드가 마스터이고 어떤 노드가 보조인지 확인할 수 있습니다.

          rs.isMaster()
          rs.status()

          구성 서버 복제 세트의 구성이 완료되었습니다.

          4단계 - 샤드 복제 세트 생성

          이 단계에서는 4개의 centos 7 서버를 2개의 복제 세트가 있는 샤드 서버로 구성합니다.

          • 2 서버 - 복제 세트 이름이 shardsvr1 및 shardsvr2: shardreplica01
          • 2 서버 - 복제본 세트 이름이 있는 shardsvr3 및 shardsvr4: shardreplica02

          각 서버에 연결하고 mongod 서비스를 중지하고(서비스가 실행 중인 경우) MongoDB 구성 파일을 편집합니다.

          systemctl stop mongod
          vim /etc/mongod.conf

          기본 저장소를 특정 디렉터리로 변경합니다.

          storage:
            dbPath: /data/db1

          bindIP 줄에서 값을 내부 네트워크 주소로 변경합니다.

          bindIP: 10.0.15.21

          복제 섹션에서 첫 번째 및 두 번째 인스턴스에 shardreplica01을 사용할 수 있습니다. 세 번째와 네 번째 샤드 서버에는 shardreplica02를 사용합니다.

          replication:
            replSetName: "shardreplica01"

          다음으로 서버의 역할을 정의합니다. 이 모든 것을 shardsvr 인스턴스로 사용합니다.

          sharding:
            clusterRole: shardsvr

          저장 및 종료.

          이제 MongoDB 데이터를 위한 새 디렉터리를 만듭니다.

          mkdir -p /data/db1
          chown -R mongod:mongod /data/db1

          몽고 서비스를 시작합니다.

          mongod --config /etc/mongod.conf

          아래 명령으로 MongoDB가 실행 중인지 확인합니다.

          netstat -plntu

          MongoDB가 로컬 네트워크 주소에서 실행되는 것을 볼 수 있습니다.

          다음으로 이 2개의 샤드 인스턴스에 대한 새 복제본 세트를 만듭니다. shardsvr1에 연결하고 mongo 셸에 액세스합니다.

          ssh 
          mongo --host shardsvr1 --port 27017

          shardreplica01이라는 이름으로 복제 세트를 시작하고 구성원은 shardsvr1 및 shardsvr2입니다.

          rs.initiate(
            {
              _id : "shardreplica01",
              members: [
                { _id : 0, host : "shardsvr1:27017" },
                { _id : 1, host : "shardsvr2:27017" }
              ]
            }
          )

          오류가 없으면 아래와 같은 결과가 나타납니다.

          복제 세트 이름이 shardreplica02인 shardsvr3 및 shardsvr4의 결과.

          다른 복제 세트 이름 shardreplica02를 사용하여 shardsvr3 및 shardsvr4 서버에서 이 단계를 다시 실행하십시오.

          이제 샤드로 shardreplica01 및 shardreplica02라는 2개의 복제 세트를 생성했습니다.

          5단계 - mongos/쿼리 라우터 구성

          쿼리 라우터 또는 mongos는 mongos를 실행하는 인스턴스일 뿐입니다. 구성 파일을 사용하여 mongos를 실행하거나 명령줄만으로 실행할 수 있습니다.

          mongos 서버에 로그인하고 MongoDB 서비스를 중지합니다.

          ssh   
          systemctl stop mongod

          아래 명령어로 mongos를 실행합니다.

          mongos --configdb "replconfig01/configsvr1:27017,configsvr2:27017"

          --configdb 옵션을 사용하여 구성 서버를 정의하십시오. 프로덕션 환경에 있는 경우 구성 서버를 3개 이상 사용하세요.

          아래에 결과가 표시됩니다.

          Successfully connected to configsvr1:27017
          Successfully connected to configsvr2:27017

          mongos 인스턴스가 실행 중입니다.

          6단계 - mongos/Query Router에 샤드 추가

          5단계에서 다른 셸을 열고 mongos 서버에 다시 연결한 다음 mongo 셸에 액세스합니다.

          ssh 
          mongo --host mongos --port 27017

          sh mongodb 쿼리로 샤드 서버를 추가합니다.

          shardreplica01 인스턴스의 경우.

          sh.addShard( "shardreplica01/shardsvr1:27017")
          sh.addShard( "shardreplica01/shardsvr2:27017")

          shardreplica02 인스턴스의 경우.

          sh.addShard( "shardreplica02/shardsvr3:27017")
          sh.addShard( "shardreplica02/shardsvr4:27017")

          오류가 없는지 확인하고 샤드 상태를 확인합니다.

          sh.status()

          아래 스크린샷과 같이 샤딩 상태가 됩니다.

          스택에서 실행 중인 2개의 샤드 복제 세트와 1개의 mongos 인스턴스가 있습니다.

          7단계 - 테스트

          이제 샤딩을 활성화하여 MongoDB 서버를 잘 테스트한 다음 문서를 추가합니다.

          mongos 서버 mongo 셸에 액세스합니다.

          ssh 
          mongo --host mongos --port 27017

          데이터베이스에 대한 샤딩 활성화

          새 데이터베이스를 생성하고 새 데이터베이스에 대해 샤딩을 활성화합니다.

          use lemp
          sh.enableSharding("lemp")
          sh.status()

          이제 데이터베이스의 상태를 확인하십시오. 복제본 세트 shardreplica01로 분할되었습니다.

          컬렉션에 샤딩 활성화

          다음으로 샤딩 지원을 통해 데이터베이스에 새 컬렉션을 추가합니다. 샤드 컬렉션 이름이 있는 스택이라는 새 컬렉션을 추가한 다음 데이터베이스 및 컬렉션 상태를 확인합니다.

          sh.shardCollection("lemp.stack", {"name":1})
          sh.status()

          샤드 컬렉션 이름이 있는 새로운 컬렉션 스택이 추가되었습니다.

          컬렉션 스택에 문서를 추가합니다.

          이제 컬렉션에 문서를 삽입합니다. 샤드 클러스터의 컬렉션에 문서를 추가할 때 샤드 키를 포함해야 합니다.

          아래 예를 사용할 수 있습니다. 컬렉션에 샤딩을 활성화할 때 추가한 샤드 키 이름을 사용하고 있습니다.

          db.stack.save({
              "name": "LEMP Stack",
              "apps": ["Linux", "Nginx", "MySQL", "PHP"],
          })

          다음 스크린샷과 같이 문서가 컬렉션에 성공적으로 추가되었습니다.

          데이터베이스를 테스트하려면 복제 세트 shardreplica01 PRIMARY 서버에 연결하고 mongo 쉘을 열 수 있습니다. shardsvr2 PRIMARY 서버에 로그인하고 있습니다.

          ssh 
          mongo --host shardsvr2 --port 27017

          복제 세트에서 사용 가능한 데이터베이스를 확인하십시오.

          show dbs
          use lemp
          db.stack.find()

          데이터베이스, 컬렉션 및 문서가 복제본 세트에서 사용 가능한 것을 볼 수 있습니다.

          CentOS 7의 MongoDB 샤드 클러스터가 성공적으로 설치 및 배포되었습니다.

          참조

          • https://docs.mongodb.com/manual/tutorial/deploy-shard-cluster/