보조 확인 방법이 지금 동기화되었는지 여부
세 개의 구성원(기본, 보조, 보조)이 있는 복제본이 있습니다.보조 장치 중 하나가 하루 동안 작동을 중단하고 보조 장치를 복제본으로 돌아온 후 어떻게 찾을 수 있는지, 아직 동기화되지 않았는지 가정해 보겠습니다.
테스트 환경에서 그렇게 했지만 유용한 데이터를 찾을 수 없었습니다.rs.status()그리고.db.printReplicationInfo().
다음에 "로그 길이 시작부터 끝까지"가 있습니다.db.printReplicationInfo()하지만 기본적으로 시간이 많이 걸리고 보조 시스템이 다운되면 커집니다.
참고: 아크셀던이 제공하는 답변에서 사용자에게 친숙한 답변을 확인해야 합니다.
의 출력을 사용할 수 있습니다.rs.status()보조 장치가 동기화되어 생성되지 않은 경우slaveDelay그때의 선택optime그리고.optimeDatesecondary의 값은 primary의 값과 같거나 가까워야 합니다(현재 연산이 있는 경우).그런 경우에는stateStr다음과 같아야 합니다.SECONDARY따라서 보조 동기화된 경우 다음과 유사한 출력이 표시됩니다(명확한 설명을 위해 한 멤버가 출력에서 제거됨).
{
"set" : "rs0",
"date" : ISODate("2013-11-08T14:58:49Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "hostname:27001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 155,
"optime" : Timestamp(1383915748, 1),
"optimeDate" : ISODate("2013-11-08T13:02:28Z"),
"self" : true
},
{
"_id" : 2,
"name" : "hostname:27003",
"health" : 0,
"state" : 8,
"stateStr" : "SECONDARY",
"uptime" : 0,
"optime" : Timestamp(1383915748, 1),
"optimeDate" : ISODate("2013-11-08T13:02:28Z"),
"lastHeartbeat" : ISODate("2013-11-08T14:58:48Z"),
"lastHeartbeatRecv" : ISODate("2013-11-08T14:58:42Z"),
"pingMs" : 0,
"syncingTo" : "hostname:27001"
}
],
"ok" : 1
}
여기에 의 출력이 있습니다.rs.status()두 번째 복제본 중 하나가 동기화되지 않은 경우 동일한 복제본 세트에 대해 선택합니다.무엇보다도 당신은 그것을 보게 될 것입니다.optime그리고.optimeDate위해서hostname:27003기본 상태와 다릅니다. stateStr은 다음과 같이 설정됩니다.RECOVERING그리고 거기에 적절한 것이 있습니다.lastHeartbeatMessage.
{
"set" : "rs0",
"date" : ISODate("2013-11-08T15:01:34Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "hostname:27001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 320,
"optime" : Timestamp(1383922858, 767),
"optimeDate" : ISODate("2013-11-08T15:00:58Z"),
"self" : true
},
{
"_id" : 2,
"name" : "hostname:27003",
"health" : 1,
"state" : 3,
"stateStr" : "RECOVERING",
"uptime" : 14,
"optime" : Timestamp(1383915748, 1),
"optimeDate" : ISODate("2013-11-08T13:02:28Z"),
"lastHeartbeat" : ISODate("2013-11-08T15:01:34Z"),
"lastHeartbeatRecv" : ISODate("2013-11-08T15:01:34Z"),
"pingMs" : 0,
"lastHeartbeatMessage" : "still syncing, not yet to minValid optime 527cfc90:19c4",
"syncingTo" : "hostname:27001"
}
],
"ok" : 1
}
보조 장치가 다음을 사용하여 생성된 경우slaveDelay그리고나서optime그리고.optimeDate다를 수 있지만,stateStr그리고.lastHeartbeatMessage약간의 지연이 있는지 표시합니다.
2017년 2월 13일 업데이트
승인된 답변에 동의합니다.rs.status()적절한 정보를 제공하며 기억하기 쉬운 명령입니다.하지만 (개인적으로 현재 Mongo 3를 사용하고 있지만) 의 편리함과 가독성도 매우 좋아합니다.
다음과 같은 출력을 제공합니다.
rs.printSlaveReplicationInfo()
source: node-2:27017
syncedTo: Mon Feb 13 2017 06:15:17 GMT-0500 (EST)
0 secs (0 hrs) behind the primary
source: node-3:27017
syncedTo: Mon Feb 13 2017 06:15:16 GMT-0500 (EST)
1 secs (0 hrs) behind the primary
보다시피 복제본 집합의 노드 간 동기화가 정상인지 여부를 쉽게 파악할 수 있습니다.
@arcseldon은 정답을 제시했지만 rs.printSlaveReplicationInfo()는 곧 삭제됩니다.
rs0:PRIMARY> rs.printSlaveReplicationInfo() 경고: printSlaveReplication정보는 더 이상 사용되지 않으며 다음 주요 릴리스에서 제거될 수 있습니다.printSecondary 복제를 사용하십시오.대신 정보를 제공합니다.
대신 rs.printSecondaryReplicationInfo()를 사용합니다.
rs0:PRIMARY> rs.printSecondaryReplicationInfo()
source: mongo-1.mongo.ns.svc.cluster.local:27017
syncedTo: Sat Sep 26 2020 01:26:32 GMT+0000 (UTC)
10 secs (0 hrs) behind the primary
source: mongo-2.mongo.ns.svc.cluster.local:27017
syncedTo: Sat Sep 26 2020 01:26:32 GMT+0000 (UTC)
10 secs (0 hrs) behind the primary
mongoDB 쉘을 위한 작은 스크립트를 작성했습니다.optime과 optimeDate 사이의 차이를 보여줍니다.수동으로 복제 세트 구성원을 비교하는 대신 사용할 수 있습니다.
var isMaster = rs.isMaster();
var me = isMaster.me;
if(!isMaster.ismaster && isMaster.secondary)
{
var status = rs.status();
var master = isMaster.primary;
var masterOptime = 0;
var masterOptimeDate = 0;
var myOptime = 0;
var myOptimeDate = 0;
for(var i = 0 ; i < status.members.length ; i++)
{
var member = status.members[i];
if(member.name == me)
{
if(member.stateStr == "SECONDARY") {
myOptime = member.optime.getTime();
myOptimeDate = member.optimeDate.getTime();
}
else
{
print(me + ' is out of sync ' + member.stateStr);
break;
}
}
else if(member.name == master)
{
masterOptime = member.optime.getTime();
masterOptimeDate = member.optimeDate.getTime();
}
}
if(myOptime && myOptimeDate)
{
var optimeDiff = masterOptime - myOptime;
var optimeDateDiff = masterOptimeDate - myOptimeDate;
print('optime diff: ' + optimeDiff);
print('optimeDate diff: ' + optimeDateDiff);
}
}
else
{
print(me + ' is not secondary');
}
명령어rs.printSecondaryReplicationInfo()일 때,즉 2 " 동 가 초 동 된 경 즉 우 화 기 STARTUP2그러면 출력은 다음과 같습니다.
shard_03:PRIMARY> db.printSecondaryReplicationInfo()
source: mongo-1.mongo.ns.svc.cluster.local:27017
syncedTo: Thu Jan 01 1970 01:00:00 GMT+0100 (CET)
1623062383 secs (450850.66 hrs) behind the primary
초기 동기화가 완료될 수 있는 시점은 표시되지 않습니다.이 값을 얻으려면 기본이 아닌 보조에 연결합니다.
shard_03:STARTUP2> db.printSecondaryReplicationInfo()
source: mongo-2.mongo.ns.svc.cluster.local:27017
InitialSyncSyncSource: mongo-1.mongo.ns.svc.cluster.local:27017
InitialSyncRemainingEstimatedDuration: 1 hour(s) 11 minute(s)
그게 더 유용할 겁니다.
로컬 로그 파일에서 진행률도 확인할 수 있습니다. 다음 예를 참조하십시오.
$ tail -f /var/log/mongodb/mongod.log | grep Repl
{"t":{"$date":"2021-06-07T12:44:57.310+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplWriterWorker-15","msg":"progress meter","attr":{"name":"data.sessions.20210603 collection clone progress","done":2541288,"total":14003530,"percent":18,"units":"documents copied"}}
{"t":{"$date":"2021-06-07T12:46:02.478+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplWriterWorker-15","msg":"progress meter","attr":{"name":"data.sessions.20210603 collection clone progress","done":5703094,"total":14003530,"percent":40,"units":"documents copied"}}
{"t":{"$date":"2021-06-07T12:47:11.357+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplWriterWorker-15","msg":"progress meter","attr":{"name":"data.sessions.20210603 collection clone progress","done":9131425,"total":14003530,"percent":65,"units":"documents copied"}}
{"t":{"$date":"2021-06-07T12:48:13.295+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplWriterWorker-15","msg":"progress meter","attr":{"name":"data.sessions.20210603 collection clone progress","done":11761778,"total":14003530,"percent":83,"units":"documents copied"}}
{"t":{"$date":"2021-06-07T12:49:01.000+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplCoordExtern-0","msg":"progress meter","attr":{"name":"Index Build: inserting keys from external sorter into index","done":4847100,"total":14003530,"percent":34}}
{"t":{"$date":"2021-06-07T12:49:04.001+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplCoordExtern-0","msg":"progress meter","attr":{"name":"Index Build: inserting keys from external sorter into index","done":10169600,"total":14003530,"percent":72}}
{"t":{"$date":"2021-06-07T12:49:05.952+02:00"},"s":"I", "c":"INDEX", "id":20685, "ctx":"ReplCoordExtern-0","msg":"Index build: inserted keys from external sorter into index","attr":{"namespace":"data.sessions.20210603","index":"tsi_1_t0_1_t_1","keysInserted":14003530,"durationMillis":8000}}
{"t":{"$date":"2021-06-07T12:49:09.000+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplCoordExtern-0","msg":"progress meter","attr":{"name":"Index Build: inserting keys from external sorter into index","done":6208700,"total":14003530,"percent":44}}
{"t":{"$date":"2021-06-07T12:49:11.977+02:00"},"s":"I", "c":"INDEX", "id":20685, "ctx":"ReplCoordExtern-0","msg":"Index build: inserted keys from external sorter into index","attr":{"namespace":"data.sessions.20210603","index":"si_1","keysInserted":14003530,"durationMillis":5000}}
{"t":{"$date":"2021-06-07T12:49:15.001+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplCoordExtern-0","msg":"progress meter","attr":{"name":"Index Build: inserting keys from external sorter into index","done":4498400,"total":14003530,"percent":32}}
{"t":{"$date":"2021-06-07T12:49:18.001+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplCoordExtern-0","msg":"progress meter","attr":{"name":"Index Build: inserting keys from external sorter into index","done":11187800,"total":14003530,"percent":79}}
{"t":{"$date":"2021-06-07T12:49:19.557+02:00"},"s":"I", "c":"INDEX", "id":20685, "ctx":"ReplCoordExtern-0","msg":"Index build: inserted keys from external sorter into index","attr":{"namespace":"data.sessions.20210603","index":"tsi_1_si_1","keysInserted":14003530,"durationMillis":7000}}
{"t":{"$date":"2021-06-07T12:49:19.697+02:00"},"s":"I", "c":"INDEX", "id":20345, "ctx":"ReplCoordExtern-0","msg":"Index build: done building","attr":{"buildUUID":null,"namespace":"data.sessions.20210603","index":"tsi_1_t0_1_t_1","commitTimestamp":{"$timestamp":{"t":1623062959,"i":22000}}}}
{"t":{"$date":"2021-06-07T12:49:19.698+02:00"},"s":"I", "c":"INDEX", "id":20345, "ctx":"ReplCoordExtern-0","msg":"Index build: done building","attr":{"buildUUID":null,"namespace":"data.sessions.20210603","index":"si_1","commitTimestamp":{"$timestamp":{"t":1623062959,"i":22000}}}}
{"t":{"$date":"2021-06-07T12:49:19.699+02:00"},"s":"I", "c":"INDEX", "id":20345, "ctx":"ReplCoordExtern-0","msg":"Index build: done building","attr":{"buildUUID":null,"namespace":"data.sessions.20210603","index":"tsi_1_si_1","commitTimestamp":{"$timestamp":{"t":1623062959,"i":22000}}}}
{"t":{"$date":"2021-06-07T12:49:26.001+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplCoordExtern-0","msg":"progress meter","attr":{"name":"Index Build: inserting keys from external sorter into index","done":5717400,"total":14003530,"percent":40}}
{"t":{"$date":"2021-06-07T12:49:29.000+02:00"},"s":"I", "c":"-", "id":51773, "ctx":"ReplCoordExtern-0","msg":"progress meter","attr":{"name":"Index Build: inserting keys from external sorter into index","done":12567700,"total":14003530,"percent":89}}
{"t":{"$date":"2021-06-07T12:49:29.618+02:00"},"s":"I", "c":"INDEX", "id":20685, "ctx":"ReplCoordExtern-0","msg":"Index build: inserted keys from external sorter into index","attr":{"namespace":"data.sessions.20210603","index":"_id_","keysInserted":14003530,"durationMillis":9000}}
{"t":{"$date":"2021-06-07T12:49:29.833+02:00"},"s":"I", "c":"INDEX", "id":20345, "ctx":"ReplCoordExtern-0","msg":"Index build: done building","attr":{"buildUUID":null,"namespace":"data.sessions.20210603","index":"_id_","commitTimestamp":{"$timestamp":{"t":1623062969,"i":7002}}}}
{"t":{"$date":"2021-06-07T12:49:29.839+02:00"},"s":"I", "c":"STORAGE", "id":20320, "ctx":"ReplCoordExtern-0","msg":"createCollection","attr":{"namespace":"data.sessions.20210601","uuidDisposition":"provided","uuid":{"uuid":{"$uuid":"bddc70be-463a-472a-a1e9-bdc5162a13f0"}},"options":{"uuid":{"$uuid":"bddc70be-463a-472a-a1e9-bdc5162a13f0"}}}}
{"t":{"$date":"2021-06-07T12:49:29.846+02:00"},"s":"I", "c":"INDEX", "id":20384, "ctx":"ReplCoordExtern-0","msg":"Index build: starting","attr":{"namespace":"data.sessions.20210601","buildUUID":null,"properties":{"v":2,"key":{"tsi":1.0,"t0":1.0,"t":1.0},"name":"tsi_1_t0_1_t_1"},"method":"Hybrid","maxTemporaryMemoryUsageMB":66}}
{"t":{"$date":"2021-06-07T12:49:29.849+02:00"},"s":"I", "c":"INDEX", "id":20384, "ctx":"ReplCoordExtern-0","msg":"Index build: starting","attr":{"namespace":"data.sessions.20210601","buildUUID":null,"properties":{"v":2,"key":{"si":1.0},"name":"si_1"},"method":"Hybrid","maxTemporaryMemoryUsageMB":66}}
{"t":{"$date":"2021-06-07T12:49:29.853+02:00"},"s":"I", "c":"INDEX", "id":20384, "ctx":"ReplCoordExtern-0","msg":"Index build: starting","attr":{"namespace":"data.sessions.20210601","buildUUID":null,"properties":{"v":2,"key":{"tsi":1.0,"si":1.0},"name":"tsi_1_si_1"},"method":"Hybrid","maxTemporaryMemoryUsageMB":66}}
{"t":{"$date":"2021-06-07T12:49:29.859+02:00"},"s":"I", "c":"INDEX", "id":20384, "ctx":"ReplCoordExtern-0","msg":"Index build: starting","attr":{"namespace":"data.sessions.20210601","buildUUID":null,"properties":{"v":2,"key":{"_id":1},"name":"_id_"},"method":"Hybrid","maxTemporaryMemoryUsageMB":200}}
언급URL : https://stackoverflow.com/questions/19675117/how-to-check-secondary-is-synced-now-or-not
'programing' 카테고리의 다른 글
| Angular | 데코레이터에 서비스를 주입 (0) | 2023.06.30 |
|---|---|
| 속성 파일의 Spring boot 외부 구성 (0) | 2023.06.25 |
| 성능 테스트를 위해 오라클 캐시를 비활성화하는 방법 (0) | 2023.06.25 |
| Oracle에서 임시 테이블로 선택 (0) | 2023.06.25 |
| 스프링 업로드 파일 크기 제한 오류 (0) | 2023.06.25 |