mariadb를 사용하다 보니 문제가 생겼습니다.

rkdckddn77의 이미지

환경은 리눅스 Centos 7.6 64bit를 사용하고 있고, mariadb는 10.4.8을 사용하고 있습니다.

문제는 mariadb가 실행이 되지 않은 문제입니다.

저는 장비 2대의 이중화를 고려하고 있습니다.

장비 #1, 장비 #2 는 이중화 구성이 되어 있고, mariadb datadir는 장비 #3의 특정 경로를 mount 시켜서 사용하고 있습니다.

Active 장비에서만 mariadb를 실행시키고, standby 장비에서는 mariadb를 실행하지 않습니다.

mariadb가 양쪽 장비에서 동시에 실행 안되도록 설정을 해두었습니다.

또한, mariadb를 정상적으로 종료를 시킨 후, 절체가 됩니다.

정상적인 상황에서는 문제가 없고, 절체 되었을 때도 문제가 없습니다.

이번에 테스트를 하면서 Active 장비의 link를 down 시켜 보았습니다.

Active 장비는 link down으로 인하여 장비 #3과의 mount에 문제가 생기고, mariadb도 문제가 생깁니다.

link down을 시켜버리면 mariadb가 정상적으로 종료가 되지 않고, 락(?)이 걸리는 것처럼 보여, 절체된 장비에서 실행이 되지 않더라구요.

Standby 장비가 Active로 절체가 되면서, mariadb가 실행이 되어야 하는데, mariadb가 실행이 되지 않습니다.

재시도를 계속 하지만, mariadb가 실행이 되지 않습니다.

에러는 아래와 같습니다.

mysqld: 2020-01-29 9:42:42 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
mysqld: 2020-01-29 9:42:42 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same
InnoDB data or log files.
mysqld: 2020-01-29 9:42:43 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
mysqld: 2020-01-29 9:42:43 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same
InnoDB data or log files.
mysqld: 2020-01-29 9:42:44 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
mysqld: 2020-01-29 9:42:44 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same
InnoDB data or log files.

구글링을 해보고, 이것저것 해보았지만 해결이 되지 않네요.

도움 좀 부탁 드립니다.

세벌의 이미지

http://database.sarang.net/?criteria=mysql
에 물어보면 어떨지요?
MySQL 과 mariadb 비슷하니...

rkdckddn77의 이미지

글 한번 적어볼게요

letitkang

익명 사용자의 이미지

말 그대로 Check that you do not already have another mysqld process using the same
체크합니다.
돌아가고 있는 데몬이 없다면 마리나디비가 폴트로 죽었다는 것을 예상할 수 있습니다.

그런데 lock 파일을 제3의 경로에 작성 또는 통제권을 획득해야 하는 것 같은데... 파일 시스템 마운트에 문제가 있는 것 같기도 하네요. 로그 파일을 확인하면 뭐가 문제인지 바로 알 수 있겠습니다.

rkdckddn77의 이미지

답변 감사합니다.

현재 장비 2대 모두 mariadb가 떠있지 않습니다.

지금 보이는 로그는 /var/log/messages의 내용이고, 다른 로그파일이 보이긴한데 (hostname.log) 파일을 열어도 내용이 깨져있네요.

mount에는 문제가 없어보이는게 link down이 된 장비는 통신이 안되고, 절체되면서 Active가 된 장비는 ping도 잘 가고, mount 경로에 가서 ls 명령어를 쳤을 때 파일들이 다 보입니다. 파일도 잘 열리구요.

letitkang

익명 사용자의 이미지

lock 이라는게 파일로 되어 있을 겁니다.
데몬 실행시키면 파일을 만들고 락을 겁니다.
데몬을 또 실행시키면 파일에 락 거는게 실패합니다.
대부분의 데몬이 비슷한 방법으로 락을 겁니다.
따라서 journalctl 로 로그를 확인해보시고,
ps aux 로 데몬이 작동중인지 확인하세요.
그래도 답이 안 나오면 유료 기술지원을 받거나 마리나 main 함수 소스코드를 확인해보셔야 겠네요

rkdckddn77의 이미지

mariadb 데몬을 실행했을 때 생기는 파일들이 4가지 정도로 보이더라구요.

아마 이 파일들이 lock에 관련된 파일 같아 보이더라구요.

그래서 상황 재현 후, 파일 4가지를 삭제 했는데, 똑같네요.

이 상황에서 락만 어떻게 해결해서 다른 장비가 mariadb를 실행할수 있게만 하면 될거같은데,,

답변 감사합니다 ㅠ

letitkang

ymir의 이미지

#1 과 #2 에서 각각 mariadb 를 구동하고, db directory 는 #3 을 네트워크로 mount 해서 쓴다는 건가요?
그리고 #1 과 #3 사이의 #1 인터페이스를 link down 한 거고...??

만약 그렇다면, #1 의 mysqld 가 db 를 open 한 상태이기 때문에..
#3 의 입장에서는 db 디렉토리의 파일들이 close 되지 않은 상태로 남아 있고..
다시 #2 에서 mysqld 를 실행하면, #3 의 입장에서는 mysqld 가 중복 실행되는 상태가 될겁니다.
(#1 이 정상적으로 close 안 하고 사라졌기 때문에..)

이런 상황에서라면..
#1 과 #3, #2 와 #3 사이는 다이렉트로 물려서라도 절대 장애가 생기지 않도록 해야 할 것 같습니다.
그래야 #1 이 active 에서 standby 로 전환하더라도, 정상적으로 db 를 close 하고 빠질 수 있으니까요..
그 쪽 라인은 장애 시험의 대상이 아닌거죠.

아니면 아예 #3 에 mariadb 를 띄우고..
#1 과 #2 의 서버들이 번갈아 가며 #3 의 mariadb 에 접속하는게 더 나을 것 같습니다.
이 경우에는 내부 라인도 DB 에 접근 가능한지 점검을 해줘야 할거구요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

rkdckddn77의 이미지

저도 스위치가아닌 다이렉트로 bond구성해서 묶는것도 생각을 했습니다.

근데 그렇게 바꾸는게 쉬운게 아니라서 ㅠㅠ

답변 감사합니다.

letitkang

ymir의 이미지

> #1 과 #2 에서 각각 mariadb 를 구동하고, db directory 는 #3 을 네트워크로 mount 해서 쓴다는 건가요?

이 구성이 맞다면, 이건 사실상 잘 동작하기 어려운 구성으로 보입니다.
서버 3대로 나뉘어져 있지만, 실제로는 하나의 시스템인 것처럼 동작을 해야 하니까요.

#1 과 #2 에서 각각 프로세스가 따로 돌고 있는것 처럼 보이지만..
#3 에서 lock 을 공유하기 때문에, #3 입장에서는 자기 서버에서 도는 거와 유사한 상황이 됩니다.

결국 누가 뜨던 상관 없고.. 알아서 lock 만 잘 관리해라는 입장이 되어 버리는데..
그런데 #1 이 아무것도 안 하고 사라져 버리면.. 그게 관리가 잘 안 되는거죠.

그래서 #1 과 #3, #2 와 #3 의 사이에, 각각 케이블을 직접 연결해서라도..
어떻게든 중간 링크가 끊어지지 않도록 구성해야 한다는 의미입니다.
스위치가 끼면 위험 요소가 하나 더 늘어나게 되니까요.

물론 #1 이 active 인 상황에서 #1 의 전원이 나가면, 역시 똑같은 문제가 발생할 겁니다.
게다가 성능면에서도 이미 충분히 손해를 보고 있는 상태구요.

어차피 서버가 3대니 #1,2,3 에 각각 db 를 구성하고, #1,2,3 을 모두 replication 으로 묶고..
#1,2 는 master-slave 로, #3 은 db backup 용으로만 쓰는 것도 괜찮을 것 같네요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

rkdckddn77의 이미지

현재 상황이 그렇지가 않아서 이 구성에서 어떻게든 해결을 해보고 싶은 마음입니다.

쉽지가 않네요 ㅠ 답변 감사합니다

letitkang

김정균의 이미지

$ mv ibdata1 ibdata1.org
$ cp -af ibdata1.org ibdata
$ rm -f ibdata
rkdckddn77의 이미지

그렇게 해도 안되더라구요.

일단 해결은 했습니다.

장비 #3에 mount 할 때 nolock 옵션을 추가하였습니다.

장비 #3에서 lock이 걸려버려서 문제가 있던거더라구요.

letitkang

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.