CentOS 7에서 MongoDB 샤드 클러스터를 배포하는 방법
이 페이지에서
- 샤딩 및 복제
- 세 가지 샤딩 구성 요소
- 1단계 - SELinux 비활성화 및 호스트 구성\n
- 2단계 - 모든 인스턴스에 MongoDB 설치
- 3단계 - 구성 서버 복제 세트 만들기
- 4단계 - 샤드 복제 세트 생성
- 5단계 - mongos/쿼리 라우터 구성
- 6단계 - mongos/Query Router에 샤드 추가
- 7단계 - 테스트
- 참조
샤딩은 여러 시스템에 데이터 세트를 저장하는 MongoDB 프로세스입니다. 이를 통해 데이터의 수평적 확장을 수행하고 모든 데이터를 독립 인스턴스 간에 분할할 수 있습니다. 샤딩을 사용하면 스택에 데이터 증가에 따라 더 많은 시스템을 추가할 수 있습니다.
샤딩 및 복제
간단하게 만들어 보겠습니다. 음악 컬렉션이 있는 경우 복제가 음악 컬렉션을 다른 인스턴스와 동기화하는 동안 샤딩은 음악 컬렉션을 다른 인스턴스 또는 복제본 세트의 다른 폴더에 저장하고 유지합니다.
세 가지 샤딩 구성 요소
샤드 - 모든 데이터를 저장하는 데 사용됩니다. 프로덕션 환경에서 각 샤드는 복제 세트입니다. 고가용성 및 데이터 일관성을 제공합니다.
구성 서버 - 클러스터 메타데이터를 저장하는 데 사용되며 클러스터 데이터 세트 및 샤드의 매핑을 포함합니다. 이 데이터는 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 버전(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
Vim 편집기를 사용하여 기본 mongodb 구성 mongod.conf를 편집합니다.
vim /etc/mongod.conf
DB 저장소 경로를 자신의 디렉터리로 변경합니다. 첫 번째 서버에는 /data/db1을 사용하고 두 번째 구성 서버에는 /data/db2 디렉토리를 사용합니다.
storage:
dbPath: /data/db1bindIP 줄의 값을 내부 네트워크 주소로 변경합니다. IP 주소가 10.0.15.31인 configsvr1과 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/db1bindIP 행에서 내부 네트워크 주소를 사용하도록 값을 변경하십시오.
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 27017shardreplica01이라는 이름으로 복제 세트를 시작하고 구성원은 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:27017mongos 인스턴스가 실행 중입니다.
6단계 - mongos/Query Router에 샤드 추가
이전 단계에서 다른 셸을 열고 mongos 서버에 다시 연결한 다음 mongo 셸에 액세스합니다.
ssh
mongo --host mongos --port 27017sh 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단계 - 테스트
설정을 테스트하려면 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 Sharded Cluster가 성공적으로 설치 및 배포되었습니다.
참조
- http://stackoverflow.com/questions/11571273/in-mongo-what-is-the-difference-between-sharding-and-replication