mongodb의 레플리카 세트 구성 실습
sudo mongod --replSet application --dbpath /data/node1/ --port 9927 --oplogSize 1024
sudo mongod --replSet application --dbpath /data/node2/ --port 9928 --oplogSize 1024
sudo mongod --replSet application --dbpath /data/arbiter/ --port 9929 --oplogSize 1024
application이 복제본 세트의 이름인 경우 노드는 동일해야 하고 dbpath는 데이터베이스 저장 경로를 지정하고 port는 수신 포트를 지정하며 oplogSize는 데이터 동기화 전 캐시 크기를 지정하고 임시로 1G를 지정합니다. 포트 9927의 인스턴스를 마스터 노드로 선택하고 9927의 셸을 입력합니다.mongo localhost:9927
레플리카 세트를 초기화하기 위해서는 구성 테이블이 필요하며, 구성 테이블은 다음과 같이 선언된다.config = {_id: "application", members: []}
_id는 복제본 세트가 시작하는 공유 이름과 동일합니다. 노드의 데이터 정보를 점진적으로 추가해 봅시다.config.members.push({_id: 0, host: "localhost:9927"})
config.members.push({_id: 1, host: "localhost:9928"})
config.members.push({_id: 2, host: "localhost:9929", arbiterOnly: true})
rs.add 및 rs.addArb 함수를 사용하여 동일한 작업을 수행할 수도 있습니다. 그런 다음 이 테이블을 매개변수로 사용하여 복제본 세트를 초기화하고 포트 9927의 셸에서 실행해야 합니다.> rs.initiate(config)
{ "info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1}
ok를 1로 되돌리면 초기화가 성공한 것입니다.세 노드가 서로 감지하고 통신하며 약 1분 정도 걸립니다(응답이 충분히 느립니다 ^-).세 개의 터미널 창에서 정보를 확인하여 확인할 수 있습니다. 후 통신이 완료되면 포트 9927의 쉘에서 Enter 키를 눌러 실행합니다. 구성을 확인하는 명령:> rs.isMaster()
{ "setName" : "application",
"ismaster" : true,
"secondary" : false,
"hosts" : [ "localhost:9927", "localhost:9928"],
"arbiters" : [ "localhost:9929" ],
"primary" : "localhost:9927",
"me" : "localhost:9927",
"maxBsonObjectSize" : 16777216,
"localTime" : ISODate("2013-01-26T13:34:03.378Z"),
"ok" : 1
}
참고로 포트 9927번의 인스턴스는 ismaster, secondary는 false, 호스트는 2개의 인스턴스, Arbiter는 1개의 요소, 기본키는 마스터 노드를 나타냅니다. 통신이 여러 번 완료된 후 포트의 인스턴스 쉘을 볼 수 있습니다. 9927. 프롬프트가 application:PRIMARY로 변경되었습니다. 자세한 내용은 다음을 참조하십시오.
응용 프로그램:PRIMARY> rs.status()
{ "set" : "application",
"date" : ISODate("2013-01-26T13:34:35Z"),
"myState" : 1, "members" : [
{
"_id" : 0,
"name" : "localhost:9927",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 140,
"optime" : Timestamp(1359207200000, 1),
"optimeDate" : ISODate("2013-01-26T13:33:20Z"),
"self" : true
},
{
"_id" : 1,
"name" : "localhost:9928",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 63,
"optime" : Timestamp(1359207200000, 1),
"optimeDate" : ISODate("2013-01-26T13:33:20Z"),
"lastHeartbeat" : ISODate("2013-01-26T13:34:34Z"),
"pingMs" : 0
},
{
"_id" : 2,
"name" : "localhost:9929",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 63,
"lastHeartbeat" : ISODate("2013-01-26T13:34:34Z"),
"pingMs" : 0
}
],
"ok" : 1
}
각 노드의 상태, 이름, 시작 시간, 노드 유형 등이 표시됩니다. 현재 복제본 세트에 대한 구성 테이블 보기:응용 프로그램:기본> rs.conf()
{
"_id" : "application",
"version" : 1,
"members" : [
{
"_id" : 0,
"host" : "localhost:9927"
},
{
"_id" : 1,
"host" : "localhost:9928"
},
{
"_id" : 2,
"host" : "localhost:9929",
"arbiterOnly" : true
}
]
}
테스트 데이터 삽입:
application:PRIMARY> db.users.insert({username: "visionwang", age: 26})
9928 슬레이브 노드를 입력하고 뷰 컬렉션을 실행합니다.application:SECONDARY> show collections
application:SECONDARY> show collections
Sat Jan 26 21:39:40 uncaught exception: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
셸에서 예외가 발생하여 slaveOK가 false이고 현재 복제 세트가 슬레이브 노드 매개변수를 지정하고 함수를 실행해야 함을 보여줍니다.application:SECONDARY> rs.slaveOk()
application:SECONDARY> show collections
system.indexes
users
쿼리 테스트 데이터:application:SECONDARY> db.users.find()
{
"_id" :
ObjectId("5103dbc8f556a05a96a28e69"),
"username" : "visionwang",
"age" : 26
}
데이터를 삽입해도 예외가 발생하지 않지만 마스터가 표시되지 않아 현재 슬레이브 노드가 읽기 전용임을 나타냅니다.application:SECONDARY> db.users.insert({username: "nl", age: 25})
not master
9927 마스터 노드로 전환하고 시스템 공간 라이브러리를 사용하여 복제본 세트 정보를 쿼리합니다.응용 프로그램:PRIMARY> db.system.replset.findOne()
{
"_id" : "application",
"version" : 1,
"members" : [
{
"_id" : 0,
"host" : "localhost:9927"
},
{
"_id" : 1,
"host" : "localhost:9928"
},
{
"_id" : 2,
"host" : "localhost:9929",
"arbiterOnly" : true
}
]
}
application:PRIMARY> db.getReplicationInfo()
{
"logSizeMB" : 1024,
"usedMB" : 0.01,
"timeDiff" : 169,
"timeDiffHours" : 0.05,
"tFirst" : "Sat Jan 26 2013 21:33:20 GMT+0800 (CDT)",
"tLast" : "Sat Jan 26 2013 21:36:09 GMT+0800 (CDT)",
"now" : "Sat Jan 26 2013 21:48:07 GMT+0800 (CDT)"
}
포트 9929를 입력하면 중재 노드의 프롬프트 기호를 볼 수 있습니다.
mongo localhost:9929application:ARBITER>
장애 조치 테스트를 수행하려면 ctrl+c를 사용하여 9927의 마스터 노드를 삭제하고 터미널 정보 프롬프트를 관찰하고 9927이 다운 상태에 있고 9928 슬레이브 노드가 마스터 노드로 부트스트랩됩니다. 9927이 온라인으로 전환되고 추가됩니다. 슬레이브 노드로 설정한 다음 ctrl+c를 누르면 9928 노드가 드롭됩니다. 잠시 후 9927 포트가 마스터 노드로 복원되고 9928이 온라인 상태가 되고 시스템이 원래 복제 세트로 복원됩니다.의 역할 중재 노드는 리더 선출을 조정하고 시스템의 작동 상태를 모니터링하고 노드가 서로 통신할 수 있도록 데이터 정보를 제공합니다.mongodb도 간단한 마스터-슬레이브 복제를 지원하지만 강력한 레플리카 세트를 사용하면 단순한 마스터-슬레이브 복제 전략을 사용할 이유가 거의 없으며, mongodb의 샤딩(자동 샤딩)도 레플리카 세트를 사용하여 구현됩니다.
51CTO에는 Windows 버전 http://database.51cto.com/art/201301/379033.htm도 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[DB] SQLP 실기 - 5많은 건수테이블 에서 존재하는지 검사 위 쿼리에서 order 테이블이 가장 크기가 크지만, orderdt 의 날짜가 2009년 이후인지만 체크하고 있다. 2009년 이후 모든 데이터를 가져와 중복제거를 원하는 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.