2017-01-10 7 views
1

要件:CentOSのベースドッカーコンテナMariaDB 10.xのガレラクラスタを提供DockerのMariaDB Galeraクラスタで「WSREP:SST failed:1(操作が許可されていません)」をデバッグするには?

ホスト環境:OX Xエルキャピタン10.11.6、ドッカー1.12.5(14777)

ドッカーコンテナOS:CentOSのLinuxのリリース1611年7月3日(コア)

DB:10.1.20-MariaDB

私はa promising Docker imageを見つけましたが、ドキュメントは時代遅れであると思われる、クラスタを起動するコマンドは動作しません。画像を書いている時点で(自分のホスト上に空のディレクトリと/ユーザ/ ME/somedbを置き換える)wsrep_sst_method = rsyncをを使用していますので、私は次のコマンドが動作する必要があることを考え出し:

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)が現れ、OKと思われます。しかし、次のエラーでガレラクラスタ結果と、第2ノード(ドッカログのDB2)として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の問題ですか?

答えて

1

これはドッカーハブの私のイメージです。

私は1つのホスト上で(今まで)クラスタをテストしていませんでしたが、複数のホスト上でのみ動作していました。あなたが正しいですが、1つのホスト上で2つを実行すると、開始時に2番目のノードが中止されるようです。

これは、デフォルトのブリッジネットワークがうまく動作しないために発生しているように見えます。おそらく、状態転送のためにポートを処理する際に問題があります。なぜ本当にわからない。

クラスタ化されたコンテナがバックエンドで使用するカスタムネットワークを最初に作成し、そのネットワークを使用してクラスタメンバーを実行するようにコマンドを変更した場合、1つのホスト上で2つのノードを実行すると機能します。

# 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 

2番目のノードでエラーなしこの時間:

# 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がデフォルトで専用のコンポジションコンテナネットワークを作成するためです。例文の構成ファイルin this gistを見ることができます。

mariadbインスタンスごとに異なるディレクトリを使用し、クラスタを起動した後でdb1を停止し、それを通常のクラスタメンバーとして再起動します(そうしないと、db1が次回起動されたときに新しいクラスタをブートストラップします)。

+0

解決策を見つけて追加の説明をいただきありがとうございます!このように私は今、MariaDBのバージョン10.1.20でも働いています。 – StaticNoiseLog

+1

乾杯、うれしい!デフォルトのブリッジネットワークがなぜこのような障壁になるのかは本当にわかりません。私の唯一の推測は、socatによって開かれたSSTポートは常にではなく、状態転送中にオンデマンドであるためです。ポートがコンテナの起動時に開かれていないので、おそらくそれを処理するいくつかの問題。マルチホストを実行する場合、私はいつもa)ホストネットワーキングモードか、b)swarm + overlayネットワークを使ってSSTポート通信を行います。その場合、標準的なポート転送もborkに見えます。 – Jon

+0

追加情報ありがとう!私は10.2.3の作品を見ました(自分の答えを見てください)。多分ポートの処理に関して何かが修正されたかもしれません。 – StaticNoiseLog

0

以降、DockerイメージをMariaDB 10.2.3(10.1.20以降)にアップグレードした後に動作します。

私は今、真に有効なクラスタを持っているかどうかを100%確実ではないけど、少なくともshow status like "wsrep_cluster_size";は、次の出力を生成し、DBが使用可能である:私はまた、-vオプションを省略して:

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

注意DBファイルを外部ボリュームではなくDockerコンテナ内に配置しました。私はこれがクラスタに関して違いを生じるとは思わないが、10.2.3を-vで検証しなかった。しかし、両方のバリエーション(外部​​ボリュームは-vとコンテナ内部ファイル)で10.1.20を試しましたが、どちらもではなく、という仕事がありました。

関連する問題