programing

도커의 MariaDB Galera 클러스터에서 "WSREP: SST failed: 1(조작이 허용되지 않음)"을 디버깅하는 방법은 무엇입니까?

closeapi 2023. 8. 14. 22:52
반응형

도커의 MariaDB Galera 클러스터에서 "WSREP: SST failed: 1(조작이 허용되지 않음)"을 디버깅하는 방법은 무엇입니까?

요구 사항: MariaDB 10.x Galera 클러스터를 제공하는 CentOS 기반 Docker 컨테이너

호스트 환경: OX X El Capitan 10.11.6, Docker 1.12.5(1477)

도커 컨테이너 OS: CentOS 리눅스 릴리스 7.3.1611(코어)

DB: 10.1.20-마리아DB

유망한 도커 이미지를 찾았지만 설명서가 구식인 것 같습니다. 클러스터를 시작하는 명령이 작동하지 않습니다.이미지를 쓸 때 wsrep_sst_sync = rsync를 사용하므로 다음 명령이 작동해야 한다고 판단했습니다(/Users/Me/someb를 호스트의 빈 디렉토리로 대체).

docker pull dayreiner/centos7-mariadb-10.1-galera

docker run -d --name db1 -h db1host -p 3306:3306 -e CLUSTER_NAME=joe -e CLUSTER=BOOTSTRAP -e MYSQL_ROOT_PASSWORD='pwd' -v /Users/Me/somedb:/var/lib/mysql dayreiner/centos7-mariadb-10.1-galera:latest

docker run -d --name db2 -h db2host -p 3307:3306 --link db1 -e CLUSTER_NAME=joe -e CLUSTER=db1host,db2host -e MYSQL_ROOT_PASSWORD='pwd' -v /Users/Me/somedb:/var/lib/mysql dayreiner/centos7-mariadb-10.1-galera:latest

첫 번째 컨테이너(db1)가 나타나고 정상으로 보입니다.그러나 db2를 Galera 클러스터의 두 번째 노드로 추가하려는 마지막 행에서 다음 오류가 발생합니다(도커 로그 db2).

2017-01-10 15:26:10 139742710823680 [Note] WSREP: New cluster view: global state: :-1, view# 0: Primary, number of nodes: 1, my index: 0, protocol version 3
2017-01-10 15:26:10 139742711142656 [ERROR] WSREP: SST failed: 1 (Operation not permitted)
2017-01-10 15:26:10 139742711142656 [ERROR] Aborting

저는 여기서 무엇이 잘못되었는지 파악할 수 없었고 이것을 더 분석하는 방법에 대한 아이디어에 감사할 것입니다.이것은 rsync, Galera, 심지어 Docker의 문제입니까?

도커허브에서 찍은 제 사진입니다.

지금까지 단일 호스트에서 클러스터를 테스트하지 않았으며 여러 호스트에서만 실행되었습니다.그렇지만 한 호스트에서 두 개를 실행하면 시작 시 두 번째 노드가 중단되는 것 같습니다.

이 문제는 기본 브리지 네트워크가 제대로 작동하지 않기 때문에 발생한 것으로 보입니다.상태 전송을 위해 포트를 처리하는 데 문제가 있을 수 있습니다.이유는 잘 모르겠습니다.

명령을 수정하여 클러스터된 컨테이너가 백엔드에서 사용할 사용자 지정 네트워크를 먼저 생성한 다음 해당 네트워크를 사용하여 클러스터 멤버를 실행하면 단일 호스트에서 두 개의 노드를 실행할 때 작동하는 것 같습니다.

# docker network create mariadb

# docker run -d --network=mariadb -p 3307:3306 --name db1 -e CLUSTER_NAME=test -e CLUSTER=BOOTSTRAP -e MYSQL_ROOT_PASSWORD=test -v /opt/test/db1:/var/lib/mysql dayreiner/centos7-mariadb-10.1-galera:latest

# docker run -d --network=mariadb -p 3308:3306 --name db2 -e CLUSTER_NAME=test -e CLUSTER=db1,db2 -e MYSQL_ROOT_PASSWORD=test -v /opt/test/db2:/var/lib/mysql dayreiner/centos7-mariadb-10.1-galera:latest

두 번째 노드에서 이번에는 오류가 없습니다.

# docker logs db2 -f
...snip
2017-01-12 20:33:08 139726185019648 [Note] WSREP: Signalling provider to continue.
2017-01-12 20:33:08 139726185019648 [Note] WSREP: SST received: 42eaa277-d906-11e6-b98a-3e6b9531c1b7:0
2017-01-12 20:33:08 139725604124416 [Note] WSREP: 1.0 (f170852fe1b6): State transfer from 0.0 (951fdda2454b) complete.
2017-01-12 20:33:08 139725604124416 [Note] WSREP: Shifting JOINER -> JOINED (TO: 0)
2017-01-12 20:33:08 139725604124416 [Note] WSREP: Member 1.0 (f170852fe1b6) synced with group.
2017-01-12 20:33:08 139725604124416 [Note] WSREP: Shifting JOINED -> SYNCED (TO: 0)
2017-01-12 20:33:08 139726105180928 [Note] WSREP: Synchronized with group, ready for connections
2017-01-12 20:33:08 139726105180928 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
2017-01-12 20:33:08 139726185019648 [Note] mysqld: ready for connections.
Version: '10.1.20-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server

해보세요, 어떻게 되는지 보세요.또한 도커 컴포지트를 사용하여 실행하면 문제없이 작동합니다.작성은 기본적으로 전용 작성 컨테이너 네트워크를 작성하기 때문일 수 있습니다. 요지에서 파일 작성 예제를 볼 수 있습니다.

각 mariadb 인스턴스에 대해 서로 다른 디렉토리를 사용해야 합니다. 클러스터를 시작한 후 db1을 중지하고 일반 클러스터 구성원으로 다시 시작합니다. 그렇지 않으면 다음에 db1을 시작할 때 새 클러스터의 부트스트래핑이 계속됩니다.

Docker 이미지를 MariaDB 10.2.3(10.1.20에서)으로 업그레이드한 후 작동합니다.

현재 진정으로 유효한 클러스터가 있는지 100% 확신할 수는 없지만 적어도show status like "wsrep_cluster_size";다음 출력을 생성하며 DB를 사용할 수 있습니다.

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

참고: 또한 -v 옵션을 생략하고 DB 파일을 외부 볼륨이 아닌 Docker 컨테이너 안에 배치했습니다.클러스터와 관련하여 이것이 차이가 있다고 생각하지 않지만 10.2.3을 -v로 확인하지 않았습니다.하지만 10.1.20을 두 가지 버전(외부 볼륨과 -v 및 컨테이너 내부 파일)으로 모두 시도했지만 모두 작동하지 않았습니다.

언급URL : https://stackoverflow.com/questions/41573048/how-to-debug-wsrep-sst-failed-1-operation-not-permitted-with-a-mariadb-gal

반응형