MongoDB는 기본을 자주 전환합니다.

MongoDB는 기본을 자주 전환합니다.

우리는 기본, 보조, 중재자의 3개 구성원으로 구성된 Mongo 2.6 복제 세트를 실행하고 있습니다. 거의 매일 MongoDB는 어떤 서버가 기본 서버인지 전환하고 있으며 이로 인해 해당 DB에 대한 모든 연결이 중단됩니다. 서버 중 하나가 실제로 다운되었기 때문에 이 작업을 수행했다면 완벽할 것입니다. 문제는 각 경우에 "다운된" 서버가 실제로 다운되지 않은 것처럼 보인다는 것입니다. 내내 켜져 있었어요.

우리가 알고 있는 내용은 다음과 같습니다.

  1. 3개 서버 모두의 프로세스 mongod가 다시 시작되거나 중단되지 않았습니다.
  2. 서버는 계속해서 New Relic에 보고하고 있었습니다.
  3. mongo 로그에서 하트비트 오류가 자주 발생하는 것을 볼 수 있습니다.
  4. 서버는 실제로 어떤 시점에서도 부하가 매우 높지 않습니다. 매 시간 약 10분마다 CPU 스파이크가 발생하는 것을 볼 수 있지만 이는 오류와 깔끔하게 일치하지 않습니다.

show log rs다음은 현재 기본 데이터베이스에 쉘을 넣은 동안 의 결과입니다 .

2015-05-17T15:05:49.339+0000 [rsBackgroundSync] replSet sync source problem: 10278 dbclient error communicating with server: server1:27017
2015-05-17T15:05:49.358+0000 [rsBackgroundSync] replSet syncing to: server1:27017
2015-05-17T15:05:56.444+0000 [rsBackgroundSync] replset setting syncSourceFeedback to server1:27017
2015-05-17T22:11:36.638+0000 [rsHealthPoll] replSet info server1:27017 is down (or slow to respond):
2015-05-17T22:11:36.644+0000 [rsHealthPoll] replSet member server1:27017 is now in state DOWN
2015-05-17T22:11:37.495+0000 [rsMgr] not electing self, we are not freshest
2015-05-17T22:11:38.656+0000 [rsHealthPoll] replSet member server1:27017 is up
2015-05-17T22:11:38.656+0000 [rsHealthPoll] replSet member server1:27017 is now in state PRIMARY
2015-05-17T22:11:39.140+0000 [rsBackgroundSync] replSet syncing to: server1:27017
2015-05-17T22:11:39.147+0000 [rsBackgroundSync] replset setting syncSourceFeedback to server1:27017
2015-05-17T23:05:47.431+0000 [rsBackgroundSync] replSet sync source problem: 10278 dbclient error communicating with server: server1:27017
2015-05-17T23:05:47.431+0000 [rsBackgroundSync] replSet syncing to: server1:27017
2015-05-17T23:05:47.876+0000 [rsBackgroundSync] replset setting syncSourceFeedback to server1:27017
2015-05-18T10:05:46.821+0000 [rsBackgroundSync] replSet sync source problem: 10278 dbclient error communicating with server: server1:27017
2015-05-18T10:05:46.822+0000 [rsBackgroundSync] replSet syncing to: server1:27017
2015-05-18T10:05:51.014+0000 [rsBackgroundSync] replset setting syncSourceFeedback to server1:27017
2015-05-18T22:12:11.433+0000 [rsHealthPoll] replSet info server1:27017 is down (or slow to respond):
2015-05-18T22:12:11.434+0000 [rsHealthPoll] replSet member server1:27017 is now in state DOWN
2015-05-18T22:12:11.507+0000 [rsMgr] replSet info electSelf 3
2015-05-18T22:12:14.708+0000 [rsMgr] replSet PRIMARY
2015-05-18T22:12:14.709+0000 [rsHealthPoll] replSet member server1:27017 is up
2015-05-18T22:12:14.709+0000 [rsHealthPoll] replSet member server1:27017 is now in state PRIMARY
2015-05-18T22:12:21.610+0000 [rsHealthPoll] replSet member server1:27017 is now in state ROLLBACK
2015-05-18T22:12:23.612+0000 [rsHealthPoll] replSet member server1:27017 is now in state SECONDARY
2015-05-19T22:13:13.004+0000 [rsHealthPoll] couldn't connect to server1:27017: couldn't connect to server server1:27017 (x.x.x.x), connection attempt failed
2015-05-19T22:13:24.127+0000 [rsHealthPoll] couldn't connect to server1:27017: couldn't connect to server server1:27017 (x.x.x.x) failed, connection attempt failed
2015-05-19T22:13:29.267+0000 [rsHealthPoll] replset info server1:27017 just heartbeated us, but our heartbeat failed: , not changing state
2015-05-20T22:14:35.832+0000 [rsHealthPoll] replset info server1:27017 just heartbeated us, but our heartbeat failed: , not changing state

하트비트 오류와 작동 중지 알림이 자주 발생하는 것을 볼 수 있지만, 각 경우마다 서버는 몇 초 안에 작동 중지에서 백업으로 전환됩니다. 문제의 원인이 무엇인지 알아내기 위해 어디에서 시작해야 할지 잘 모르겠습니다.

답변1

나는 이것을 자주 보는데 항상 프로세스 외부에 있습니다 mongod. DNS 확인자 문제, TCP/IP 스택 문제, 네트워크 링크, 물리적 하드웨어 등 프로세스에서 벗어나십시오 mongod. 호스트 OS에서 네트워킹 오류를 확인하고, 물리적 링크를 확인하고(물리적 링크가 방정식에 있는 경우), 지역에 걸쳐 있는 경우 두 서버 사이의 클라우드 공급자를 확인하세요. 아마도 이것은 호스트 OS에 관한 것이며 MongoDB 자체와는 아무 관련이 없습니다.

답변2

이 문제가 해결되었습니다. 핵심 문제는 호스팅 제공업체가 VMWare 스냅샷을 백업 메커니즘으로 실행하고 있다는 것이었습니다. 이러한 스냅샷으로 인해 VM이 일시적으로 정지 상태에 빠졌습니다. 기술적 용어로 VM이 정지되는 것이라고 생각합니다.

이러한 스냅샷을 비활성화한 후에는 더 이상 문제가 발생하지 않았습니다.

관련 정보