[MySQL] Network 및 Replication 파라미터(MySQL 5.6기준)

MySQL에서 복제 환경을 운영할때 격게 되는 이슈중 이해가 안되는 이슈가 하나가 있는데 바로 네트워크 관련 이슈입니다.
이 네트워크 이슈에 대해 알아보겠습니다. 이 네트워크 이슈는 네트워크 관련 파라미터에 대해서 특별히 설정하지 않을 시 시간이 지나고 난 후에야 알게되는 경우가 많습니다.
관련하여 이 문제에 대해 한번 알아보겠습니다.

■ 상황
MySQL서버 자체가 전원이 꺼지가나 문제가 생기면 서버에서 에러 로그가 발생하게 됩니다. 서버에 접속을 할 수 없다는 에러가 나타나게 됩니다. 그러나 마스터에서 네트워크 이슈가 발생하게 되면 MySQL은 인지를 하지 못하고 설정해 놓은 시간동안 대기를 하면서 마스터의 이벤트를 계속 기다리게 됩니다. 이때 이 마스터의 이벤트 대기 시간이 너무 길기 때문에 복제이슈가 발생하게 됩니다. 이 네트워크 이슈에 대해 한번 알보겠습니다.

1. 시스템 리부팅
원인 : 시스템 관련 문제로 재시작되거나 시스템 전원이 off된 경우
로그 :
2021-06-20T13:38:06.993723Z 1 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
2021-06-20T13:38:06.995086Z 1 [ERROR] Slave I/O for channel '': error reconnecting to master 'root@10.30.224.100:3306' - retry-time: 60  retries: 1, Error_code: 2003
에러로그에 인식이 안되고 문제가 발생한지 모르게 됩니다. 그러다 네트워크 카드가 시스템에 올라오는 경우(네트워크를 통한 SSH 접속이 되는경우)에 에러를 출력합니다.

2. MySQL 데몬 다운
원인 : OOM Killer나 기타 다른 이유로 인해 MySQL 시스템 데이몬이 다운된 경우.
로그 :

2021-06-20T13:31:36.965194Z 1 [ERROR] Error reading packet from server for channel '': Lost connection to MySQL server during query (server_errno=2013)
2021-06-20T13:31:36.965378Z 1 [Note] Slave I/O thread: Failed reading log event, reconnecting to retry, log 'binary_log.000010' at position 458 for channel ''
2021-06-20T13:31:36.965407Z 1 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
2021-06-20T13:31:36.965819Z 1 [ERROR] Slave I/O for channel '': error reconnecting to master 'root@10.30.224.100:3306' - retry-time: 60  retries: 1, Error_code: 2003


에러 로그에 바로 인식이 되고 복제문제가 발생하게 됩니다.

3. 네트워크 문제.
원인 : 서버 네트워크 어댑터 다운, 혹은 네트워크 장애.
로그 : 아무런 로그 메세지가 나타나지 않음. slave_net_timeout의 값에 따라 추후 인식.

 

* 가장 큰 문제
이 상황들중에 3번의 네트워크 문제가 가장 큰 문제입니다. 이유는 MySQL 5.6에서 slave_net_timeout은 기본적으로 1시간(3600초)이기 때문입니다.
이 값을 환경에 맞게 지정해주지 않으면 네트워크 어댑터 장애시 한시간이 될때까지 인식을 못하는 경우가 있습니다.

■ 이슈 내용
네트워크 이슈내용을 순차적으로 정리하면 다음과 같습니다.
- 네트워크 다운 발생.
- slave_net_time 파라미터의 시간만큼 네트워크 응답을 대기. 문제는 이 네트워크 시간이 장시간일 경우 네트워크 다운을 인지하지 못하고 계속 대기하게 됨.
즉 이 파라미터 시간만큼 네트워크를 계속 체크하게 되는데 값이 크다면 그 시간만큼을 인지하지 못하게 됨.

■ 파라미터 확인
복제 환경에서 네트워크에 관련된 파라미터는 대표적으로 다음과 같은 것이 있습니다.
slave_net_timeout : 재 연결을 시도하기 전에 기다리는 시간.(기본값 36000초)
master_retry_count : 재 연결 시도 횟수.(기본값 86400)
master_connect_retry : 재 연결 시도전 대기 시간. (기본값 60)

■ 결론
slave_net_timeout 파라미터 조절 필요. 특히 MySQL 5.6일경우 이 값을 필히 조절 필요.
참고로 MySQL5.7은 10초.

Designed by JB FACTORY