文章连接刚开始用docker,有点疑惑?
认证0级讲师
데이터베이스가 도커에 배치되기에 적합하지 않다는 삐뚤어진 글이 2개 있습니다. 하나는 원본 포스터에 게시된 것이고, 두 번째는 번역된 이 글입니다
여전히 같은 관점:
볼륨이 작으면 부담없이 할 수 있지만, 볼륨이 크면 작동하지 않는 경우가 있습니다. 기존 데이터베이스와 Docker는 직접 컨테이너화하지 않는 것이 좋습니다. 데이터베이스를 구축하려면 미들웨어 시스템, 컨테이너화된 시스템을 비롯한 다양한 시스템의 지원이 필요합니다.
데이터베이스가 자동으로 확장, 재해 복구, 전환이 가능하고 자체 다중 노드 솔루션이 제공된다면 Docker가 더 나은 솔루션입니다.
그렇지 않다면 docker를 사용하지 마세요.
원문에도 매우 명확하게 나와 있습니다.
교통량이 적을 때는 무엇이든 컨테이너화할 수 있습니다. 데이터베이스, 애플리케이션, hadoop, 다양한 노드, nginx.
볼륨이 클 경우 스토리지 관련 서비스는 컨테이너화에 적합하지 않습니다. 애플리케이션 레이어, 비즈니스 레이어와 같은 상태 비저장 서비스는 캐시와 같은 메모리 집약적인 서비스를 컨테이너화하는 데 적합합니다.
간단히 말하면 재해 복구, 성능, 데이터 일관성이라는 세 가지 문제가 있습니다.
MySQL과 같은 기존 데이터베이스에는 다음과 같이 나열할 수 있는 문제가 너무 많습니다.
mysql을 어떻게 컨테이너화하나요?
메인 데이터베이스 mysqld가 다운되면 어떻게 해야 하나요?
본관 dockerd가 무릎을 꿇으면 어떻게 해야 하나요?
슬레이브 mysqld가 무릎을 꿇으면 어떻게 해야 하나요?
노예 도커드가 무릎을 꿇으면 어떻게 해야 하나요?
최고점에 가까워지면 컨테이너를 통해 mysql을 빠르게 확장할 수 있나요? 계획?
데이터 마스터-슬레이브 스위칭 솔루션? 일관성을 보장하는 방법은 무엇입니까?
피크 기간 동안의 볼륨은 충분히 크며 때로는 물리적 머신의 용량이 하나의 mysql 프로세스에만 충분할 때도 있습니다.
그래서 단일 머신인데 왜 mysql을 직접 시작할 수 없나요?
왜 용기를 밖에 놓아야 하나요? 성능 손실은 얼마나 되나요?
MySQL을 어떻게 업그레이드하나요?
데이터 볼륨이 커지면 데이터가 손실되나요? (컨테이너 파손을 여러번 겪었습니다...)
그러나 mysql이 완전히 컨테이너화 불가능한 것은 아닙니다. 데이터 손실에 민감하지 않은 비즈니스(예: JD.com 검색에서 찾은 제품)를 디지털화하고 데이터베이스 샤딩을 사용하여 인스턴스 수를 늘려 처리량을 늘릴 수 있습니다.
원문 기사에 언급된 문제들에 대해서는 부족한 부분도 있지만 잘 생각해 봤습니다. 예를 들어 다음 질문은 매우 문제가 많습니다(공유 데이터 디렉터리 관련).
지금까지 접한 데이터베이스 중 cassandra(tidb 및 Cockroachdb도 있지만 지금까지 대기업에서 사용 사례를 접한 적이 없음)와 같은 데이터베이스만 컨테이너화에 적합합니다.
그러나 Cassandra 자체도 상태 비저장에 가깝습니다. 자체 재해 복구, 용량 확장, 전환 솔루션을 제공합니다.
다음은 JD.com에 대한 언급입니다.
JD.com은 특이점이지만 JD.com에서도 유사한 문제와 주의가 필요한 사항을 언급했습니다.
심지어 docker에도 많은 사용자 정의가 이루어졌습니다.
JD.com 공유를 보실 수 있습니다.
부적합, 불가능
단일 머신에 문제가 없더라도 어떤 경우에는 여전히 도움이 됩니다. 예를 들어 이전에 우리 회사의 Oracle 데이터베이스가 매개변수를 조정할 때 데이터베이스가 충돌하여 시작할 수 없었습니다. 그때는 그냥 데이터 디렉터리를 원본 디렉터리로 지정해서 직접 실행했습니다.
클러스터를 어떻게 생성하든 도커나 스웜 같은 도구를 사용하여 수동으로 설정하는 것은 쉽지 않습니다. 물리적인 머신에 직접 구축하는 것이 문제를 방지하는 데 좋습니다.
해외에 도커 데이터 스토리지 솔루션을 전문으로 하는 회사가 있습니다. 예를 들어 Flocker, Rancher's Convoy
Docker는 무국적자에게 더 적합하며 서비스를 변경하지 않습니다.
클러스터 수가 많은 경우: docker 파일을 작성합니다. 그런 다음 코드가 코드 웨어하우스에 업로드되면 docker 파일을 배포한 후 릴리스 스크립트를 통해 docker 서비스를 일괄적으로 빌드하고 서비스 코드를 여기에 넣습니다.
MySQL뿐만 아니라 redis와 유사한 것, mc도 docker에 넣기에 적합하지 않습니다. 즉, docker에 데이터베이스를 넣는 것은 단지 docker를 사용하기 위한 것일 뿐 큰 이점이 없습니다.
네, 왜냐하면 docker의 특성상 데이터 저장에 적합하지 않다고 판단하기 때문입니다. 데이터베이스뿐만 아니라 모든 저장 관련 서비스도 docker를 사용하기에 적합하지 않습니다.
공식 mysql 이미지가 어느 디렉터리에 데이터를 저장하는지조차 알 수 없습니다.
데이터베이스가 도커에 배치되기에 적합하지 않다는 삐뚤어진 글이 2개 있습니다. 하나는 원본 포스터에 게시된 것이고, 두 번째는 번역된 이 글입니다
여전히 같은 관점:
볼륨이 작으면 부담없이 할 수 있지만, 볼륨이 크면 작동하지 않는 경우가 있습니다. 기존 데이터베이스와 Docker는 직접 컨테이너화하지 않는 것이 좋습니다. 데이터베이스를 구축하려면 미들웨어 시스템, 컨테이너화된 시스템을 비롯한 다양한 시스템의 지원이 필요합니다.
데이터베이스가 자동으로 확장, 재해 복구, 전환이 가능하고 자체 다중 노드 솔루션이 제공된다면 Docker가 더 나은 솔루션입니다.
그렇지 않다면 docker를 사용하지 마세요.
원문에도 매우 명확하게 나와 있습니다.
으아악교통량이 적을 때는 무엇이든 컨테이너화할 수 있습니다. 데이터베이스, 애플리케이션, hadoop, 다양한 노드, nginx.
볼륨이 클 경우 스토리지 관련 서비스는 컨테이너화에 적합하지 않습니다. 애플리케이션 레이어, 비즈니스 레이어와 같은 상태 비저장 서비스는 캐시와 같은 메모리 집약적인 서비스를 컨테이너화하는 데 적합합니다.
간단히 말하면 재해 복구, 성능, 데이터 일관성이라는 세 가지 문제가 있습니다.
MySQL과 같은 기존 데이터베이스에는 다음과 같이 나열할 수 있는 문제가 너무 많습니다.
mysql을 어떻게 컨테이너화하나요?
메인 데이터베이스 mysqld가 다운되면 어떻게 해야 하나요?
본관 dockerd가 무릎을 꿇으면 어떻게 해야 하나요?
슬레이브 mysqld가 무릎을 꿇으면 어떻게 해야 하나요?
노예 도커드가 무릎을 꿇으면 어떻게 해야 하나요?
최고점에 가까워지면 컨테이너를 통해 mysql을 빠르게 확장할 수 있나요? 계획?
데이터 마스터-슬레이브 스위칭 솔루션? 일관성을 보장하는 방법은 무엇입니까?
피크 기간 동안의 볼륨은 충분히 크며 때로는 물리적 머신의 용량이 하나의 mysql 프로세스에만 충분할 때도 있습니다.
그래서 단일 머신인데 왜 mysql을 직접 시작할 수 없나요?
왜 용기를 밖에 놓아야 하나요? 성능 손실은 얼마나 되나요?
MySQL을 어떻게 업그레이드하나요?
데이터 볼륨이 커지면 데이터가 손실되나요? (컨테이너 파손을 여러번 겪었습니다...)
그러나 mysql이 완전히 컨테이너화 불가능한 것은 아닙니다.
데이터 손실에 민감하지 않은 비즈니스(예: JD.com 검색에서 찾은 제품)를 디지털화하고 데이터베이스 샤딩을 사용하여 인스턴스 수를 늘려 처리량을 늘릴 수 있습니다.
원문 기사에 언급된 문제들에 대해서는 부족한 부분도 있지만 잘 생각해 봤습니다. 예를 들어 다음 질문은 매우 문제가 많습니다(공유 데이터 디렉터리 관련).
으아악지금까지 접한 데이터베이스 중 cassandra(tidb 및 Cockroachdb도 있지만 지금까지 대기업에서 사용 사례를 접한 적이 없음)와 같은 데이터베이스만 컨테이너화에 적합합니다.
그러나 Cassandra 자체도 상태 비저장에 가깝습니다. 자체 재해 복구, 용량 확장, 전환 솔루션을 제공합니다.
다음은 JD.com에 대한 언급입니다.
JD.com은 특이점이지만 JD.com에서도 유사한 문제와 주의가 필요한 사항을 언급했습니다.
으아악심지어 docker에도 많은 사용자 정의가 이루어졌습니다.
JD.com 공유를 보실 수 있습니다.
부적합, 불가능
단일 머신에 문제가 없더라도 어떤 경우에는 여전히 도움이 됩니다. 예를 들어 이전에 우리 회사의 Oracle 데이터베이스가 매개변수를 조정할 때 데이터베이스가 충돌하여 시작할 수 없었습니다. 그때는 그냥 데이터 디렉터리를 원본 디렉터리로 지정해서 직접 실행했습니다.
클러스터를 어떻게 생성하든 도커나 스웜 같은 도구를 사용하여 수동으로 설정하는 것은 쉽지 않습니다. 물리적인 머신에 직접 구축하는 것이 문제를 방지하는 데 좋습니다.
해외에 도커 데이터 스토리지 솔루션을 전문으로 하는 회사가 있습니다. 예를 들어 Flocker, Rancher's Convoy
Docker는 무국적자에게 더 적합하며 서비스를 변경하지 않습니다.
클러스터 수가 많은 경우:
docker 파일을 작성합니다. 그런 다음 코드가 코드 웨어하우스에 업로드되면 docker 파일을 배포한 후 릴리스 스크립트를 통해 docker 서비스를 일괄적으로 빌드하고 서비스 코드를 여기에 넣습니다.
MySQL뿐만 아니라 redis와 유사한 것, mc도 docker에 넣기에 적합하지 않습니다. 즉, docker에 데이터베이스를 넣는 것은 단지 docker를 사용하기 위한 것일 뿐 큰 이점이 없습니다.
네, 왜냐하면 docker의 특성상 데이터 저장에 적합하지 않다고 판단하기 때문입니다. 데이터베이스뿐만 아니라 모든 저장 관련 서비스도 docker를 사용하기에 적합하지 않습니다.
공식 mysql 이미지가 어느 디렉터리에 데이터를 저장하는지조차 알 수 없습니다.