안녕하세요, 저희 사이트가 centos7에서 almalinux8로 업그레이드하면서
php나, nginx, mariadb도 최신버전으로 (대략 5년이상 업데이트수준) 업데이트 하면서
기존에 안정적으로 크래쉬 없이 운영하던 데몬들이
며칠에 걸쳐 하루 2~4번씩 이유 없이 순간적으로
접속 안 되는 증상이 있었습니다.
처음엔 라이믹스 서드파티 모듈이나 PHP 문제인 줄 알았는데,
결국 MariaDB 서버 자체의 크래시(SIGSEGV)로 확인됐고, 정확한 원인까지
찾아서 MariaDB 공식 버그트래커에 리포트했습니다. 비슷한 증상 겪으시는
분들 계실까 해서 공유합니다.
[증상]
- 사이트가 갑자기 잠깐(몇 초) 완전히 안 뜨다가 저절로 복구됨
- 에러 화면도 없이 그냥 "서버에 연결할 수 없음" 식으로 끊김
- 재현 조건이 특정되지 않고 랜덤하게 발생
[확인 방법]
서버에서 다음 로그를 확인해보세요:
sudo grep "got signal 11" /var/log/mysql/error.log
여기에 기록이 있고, 시점이 사이트 접속 안 되던 시간과 겹치면 같은 문제일
가능성이 높습니다.
[원인]
라이믹스나 PHP 설정 문제가 아니라, MariaDB 서버 자체의 쿼리 실행 정리
코드(JOIN::free_pushdown_handlers)에 있는 메모리 관련 버그로 확인됐습니다.
심지어 아주 단순한 단일 테이블 SELECT 쿼리에서도 발생해서, 특정 쿼리
패턴이나 데이터 문제가 아니라 MariaDB 자체의 문제입니다.
MariaDB 11.4.12 → 11.8.8로 업그레이드하니 빈도는 줄었지만(하루 7.6회 →
2.7회) 완전히는 안 없어졌습니다.
공식 버그 리포트: https://jira.mariadb.org/browse/MDEV-40578
(자세한 스택트레이스/재현 쿼리는 여기 참고하세요)
[임시 대응]
근본 해결은 MariaDB 쪽 패치를 기다려야 하지만, systemd 서비스에 자동
재시작(Restart=on-abnormal, MariaDB 기본 설정에 이미 포함)이 되어 있으면
크래시 나도 몇 초 안에 자동 복구되어서 실질적 피해를 크게 줄일 수 있습니다.
혹시 비슷한 증상 겪으신 뒤 해결대안을 찾으신분이 계시다면 의견부탁드립니다 ㅠ
댓글 6
구버전 사용중이라 최신버전으로 올릴까 했는데 이런 이슈가 있었네요
공유해주셔서 감사합니다!
아무래도 안정적인 버전을 쓰시고 올리는게 좋은 것 같습니다.
최신버전이 성능이 빠를까 싶어서 욕심냈는데 사이트 빠른거 욕심내다가 사이트가 죽어있으면 더 손해인 것 같습니다
DB는 최신 버전으로 올리셨는데
OS는 지원 기간이 3년도 안 남은 버전을 현 시점에 굳이...?
(DB 크래시는 OS 종류/버전에 따른 영향도 있을 수 있습니다. libc 버전 같은 것이 미묘하게 다르니까요. 저는 유독 록키9에서만 특정 버전의 Redis가 segfault하는 것도 본 적이 있습니다.)
너무 구형 os를쓰다가 최신버전을 쓰면 혹시 문제가 있을까싶어서
9버전보다 8버전 거쳐서 9로 옮기려했는데 한방에 9로 갈껄 그랬습니다.
os지원기간이 3년도 안남았는지 몰랐습니다 ㅠㅠ
php-fpm도 redis쪽 크래쉬가 지속되서 memcached로 변경했습니다.
php nginx mariadb도 이렇게 최신버전을 올릴생각이 없었는데 nginx빼고는 크래쉬 문제가 심해서 하나씩
버전업하다보니 최신버전으로 온 것 같습니다 ㅠ
아, 그랬군요. 복잡하게 됐네요.
하드웨어, OS, 주요 프로그램들은 비슷한 시기에 발표된 것으로 맞추는 것이 좋기는 합니다. 개발자들도 수많은 리눅스 배포판의 여러 버전에서 모두 테스트할 수는 없으니, 자기들이 주로 사용하는 비교적 최근 버전에서만 집중적으로 확인할 가능성이 높거든요.
그런데 Redis까지 크래쉬하는 상황이라면 현재 사용하시는 OS가 어딘가 잘못되었을 가능성도 있습니다. AlmaLinux는 재설치 없이 8에서 9로 업그레이드할 수 있는 것으로 알고 있는데, 한 번 시도해 보심이...?
와 almalinux8에서 9 업글 가능한 꿀팁정보 감사합니다 알아보고 가능하면 9 로 업그레이드해야겠어요