2017-06-07 21 views
4

スウォームモードでは、コンテナは任意の結合ノードに展開できます。私はhost1にmysqlデータフォルダとして共有nfsフォルダを作成しました。Mysqlコンテナはnfsフォルダにデータをマウントできません

mkdir -p /nfs/data-volume 

別のホスト2では、この共有フォルダにマウントされます。そして、必要な許可を加えました。私はこのnfs共有フォルダにテキストファイルを読み書きしてみました。それはとてもうまくいった。 (許可エラーはありませんでした) これらのnfs設定の後、私はこのようなコンテナボリュームを定義しました。

mysqldb-read: 
    image: demo/db-slave 
    ports: 
    - "3308:3306" 
    volumes: 
    - /nfs/data-volume:/var/lib/mysql 

結果は次のとおりです。mysqlのコンテナがhost1で実行する場合は、 非常に良い作品。 mysqlコンテナがhost2で実行されている場合、起動しません。しかし、コンテナは出なくなり、スレッドはそこにとどまり、何かを待っているように見えます。チェックlogコマンドを実行することにより は:

docker logs -f mymysql 

それはこのようにログを示しています。このログに

2017-06-07T02:40:13.627195Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 
2017-06-07T02:40:13.632313Z 0 [Note] mysqld (mysqld 5.7.18-log) starting as process 52 ... 
2017-06-07T02:40:13.648010Z 0 [Note] InnoDB: PUNCH HOLE support available 
2017-06-07T02:40:13.648054Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 
2017-06-07T02:40:13.648059Z 0 [Note] InnoDB: Uses event mutexes 
2017-06-07T02:40:13.648062Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier 
2017-06-07T02:40:13.648066Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.3 
2017-06-07T02:40:13.648069Z 0 [Note] InnoDB: Using Linux native AIO 
2017-06-07T02:40:13.648326Z 0 [Note] InnoDB: Number of pools: 1 
2017-06-07T02:40:13.648770Z 0 [Note] InnoDB: Using CPU crc32 instructions 
2017-06-07T02:40:13.651011Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M 
2017-06-07T02:40:13.760444Z 0 [Note] InnoDB: Completed initialization of buffer pool 
2017-06-07T02:40:13.829981Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority(). 

何よりも、それはこの行で停止します。 私はコンテナにログインしようとした、と入力コマンド

mysqld -uroot -proot 

示すログが全く同じです。

これはnfsによって引き起こされたと思います。しかし、私はグーグルでデータを共有するためにnfsの使用を提案しているほとんどすべての資料を見つけました。この仕事を成功させる人は誰ですか?または私に何か提案?

おかげ

+0

情報を追加するだけです。あなたの 'mysqld -root -proot'は間違っています。 mysqld(サーバ)の代わりにmysql(クライアント)を実行する必要があります。 – Robert

答えて

1

Q1:正常にこの仕事をする人はいますか?

私の経験は... いいえです。私は数ヶ月前にNFS、MySQL、Docker Swarm(v1.12)を試してみましたが、失敗しました。

彼らはMySQL documentationから、実際にそれとはかなりはっきりしている:

NFSを使用して

MySQLのでMySQLでNFSを使用して検討する際

注意をお勧めします。オペレーティングシステムとNFSのバージョンによって異なる潜在的な問題は、次のとおりです。

  • MySQLのデータをとロックされ、使用できなくなってきてNFSボリュームに置かれたファイル...
  • データの不整合...
  • に最大を記録ファイルサイズの制限

は私も... file locks、スロークエリと遅い書き込みを経験した

質問2:または私に何か提案がありますか?

docker-swarmのうちの1つは、実際にはデータ、特にデータベースに関するものです。あなたは魔女のホストでmysqlコンテナが実行されるかどうかわかりません。

1.スウォームモードサービスの作成--constraintオプション

このオプションは、たとえば、同じホスト上で常にMySQLのコンテナを展開するドッキングウィンドウを指示します:

私はこれを克服する二つの選択肢を使用しました
mysqldb-read: 
    image: demo/db-slave 
    ports: 
    - "3308:3306" 
    volumes: 
    - /nfs/data-volume:/var/lib/mysql 
    deploy: 
    placement: 
     constraints: [node.hostname == host1] 

ドッカーswarmサービスmysqldb-readが再起動した場合、これは常にhost1ノードになります。

2.ドッカーボリューム

別のオプションは、起動前にMySQLサービスへdynamically attach a shared docker volumeにあります。 The documentation states:そこ

あなたのデータが持続する場合、データは任意のノードからアクセスできるように、指定されたボリュームとマルチホストを認識しているボリュームのドライバを使用して...

あなたがそれを可能にするいくつかはdocker volume pluginsです。私は個人的にAWS環境でを試しましたが、ボリュームの削除、同期などの問題もあります。

this popular SO thread about swarm and docker volumesもご覧になれます。

PS:約NFS

私はあなたが私はまだread-onlyコンフィギュレーションファイルのためにそれを使用し、他のドッキングウィンドウのサービスのためにNFSをあきらめなければならないことは言わないよ(Apache Tomcatのとnginxの設定、等...)しかし、MySQLの場合、それは無駄です。

私の経験が助けてくれることを願っています!

関連する問題