gpt4 book ai didi

docker - 如何在Docker中使用MariaDB Galera集群调试 “WSREP: SST failed: 1 (Operation not permitted)”?

转载 作者:行者123 更新时间:2023-12-02 19:38:35 27 4
gpt4 key购买 nike

要求:基于CentOS的Docker容器提供了MariaDB 10.x Galera集群

主机环境:OX X El Capitan 10.11.6,Docker 1.12.5(14777)

Docker容器操作系统:CentOS Linux版本7.3.1611(核心)

数据库:10.1.20-MariaDB

我找到了a promising Docker image,但是文档似乎已经过时,启动集群的命令不起作用。在编写镜像时,使用 wsrep_sst_method = rsync ,因此我认为以下命令应该可以工作(将/ Users / Me / somedb替换为主机上的空目录):

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集群的最后一行会导致以下错误(Docker日志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的问题吗?

最佳答案

这是我在dockerhub上的图像。

我尚未在单个主机上测试群集(直到现在),仅在多个主机上运行。没错,虽然在一台主机上运行两个节点似乎会在启动时中止第二个节点。

这似乎是由于默认网桥网络运行不正常引起的。处理端口进行状态传输时可能会出现一些问题。不太确定为什么。

如果您修改命令以首先为集群容器创建一个自定义网络,以供后端使用,然后使用该网络运行集群成员,那么在单个主机上运行两个节点时,这似乎可以工作:

# 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

试试看,看看进展如何。另外,如果您使用docker-compose运行它,它也可以正常工作。这很可能是因为compose默认情况下会创建一个专用的compose容器网络。您可以看到一个示例撰写文件 in this gist

只需确保为每个mariadb实例使用不同的目录,然后在启动集群后,停止db1并将其重新启动为常规集群成员(否则,下次启动db1时,它将继续引导新集群)。

关于docker - 如何在Docker中使用MariaDB Galera集群调试 “WSREP: SST failed: 1 (Operation not permitted)”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41573048/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com