アクティブ/パッシブトポロジーのRAWデバイス上のMySQL InnoDB
質問
共有RAWストレージとの2つのx86複合施設があるアクティブ/パッシブトポロジを持ち、特定の瞬間のノードの1つだけが共有ストレージ(AKA The Activeノード)にアクセスできます。アクティブノードのフェールオーバーの場合、パッシブノードは引き継ぎを開始し、共有ストレージへのアクセスを持つアクティブノードになります。各ノードには、ファイルシステムを備えた独自のブートデバイスストレージがあります。ただし、共有ストレージにファイルシステムをマウントすることはできません。
両方のノードでMySQLをインストールすることに興味があり、そのデータが共有ストレージに存在し、アクティブノードのみがサーバーを実行しています。
InnoDBを搭載したMySQLは生の上で実行可能です。 DEVICE と、 MySQL 。ただし、2番目の例では、それらは共有ストレージにマウントされたファイルシステムを持っています。ファイルシステムの問題は大きな関心事を提起します:
ib_logfile *はまだファイルシステムを必要とします。そのため、RAW MySQL機能は正確にはまったく生のものではありません。間違っているなら私を修正してください。これらのファイルを生のストレージに保存する回避策はありますか? REDOログ(ib_logfile0
、ib_logfile1
)をノードの起動デバイスに保存し、サーバーが起動する前にそれらのファイルを常に削除できます(たとえば、複数のフェールオーバーの場合は古いログファイルはありません)。ただし、これは、取引の途中で障害が発生した場合には、コミットされていないトランザクションに部分的にコミットされる可能性があり、したがってトランザクションの全体的なアイデアと矛盾します。
このトポロジのMySQLの動作に影響を与える可能性のある多くのファイル/機能はありますか?
解決
InnoDBの書き込み先のログ(WAL)、ib_logfile *がファイルシステムを必要とする唯一のものではないことは注目に値する。あなたは:
を持っています- システムテーブルMySQLスキーマ内のシステムテーブル(テーブルごとに.ford、.fyi)を使用する可能性が高い(ほとんどは現在、5.7でInnoDBを使用しています)
- 。各InnoDBテーブルのファイルのファイル(必要なテーブルメタデータ) を使用しています。
- MySQLログファイル(エラーログ、一般ログ、バイナリログ)
- SSLアーティファクト
- auto.cnf(MySQLインスタンスuuidが生成され、自動的に保存されている場合)
- 各スキーマのdb.optファイル(
/<datadir>/<schema>/
) - .parファイルパーティションテーブルを作成した場合(5.7で終了しました)
- .trnと.trgファイルトリガーを作成した場合
- InnoDB TMPテーブルスペース(5.6 +)
- 永続化バッファー・プール・ページマップ(IB_BUFFER_POOL、5.6 +)
上記のすべては典型的にはデータディレクトリの範囲内にあります。 datadir=/some/valid/fs/path
を持っている限り - それはまた2つのノード間の複製されるか、共有される(例えば、NFS、GFS、OCFS)、あなたは大丈夫になるでしょう。
.frm、.par、.trn、.trg、および.optファイルが新しいデータ辞書。
今後数ヶ月以内にいくつかの大きな発表のために調整されたまま! :)
あなたがRAWデバイスを使っている理由は私には明らかではありませんか?私はあなたがあなたの理由があると確信しています。 :)
他のヒント
生の記憶技術は、 Innodb_file_per_table 無効。
これを数回
に設定しました-
Jul 25, 2012
:データベース設計 - テーブルサイズの制限の頭痛を避けるための複数のデータベースの作成 -
Feb 26, 2013
: MySQLのメンテナンスinnodb_file_per_tableが無効になっているとき
ノートInnoDBアーキテクチャ(Percona Cto Vadim Tkachenkoからの写真)
href="https://i.stack.imgur.com/9ecri.jpg" rel="nofollow noreferrer">
REDOログに関しては、そのフォルダ内の/var/lib/mysql
とib_logfile0
を使用して、ib_logfile1
を保持するだけで小型のDRBDブロックデバイスを持つことを検討する必要があります。したがって、フェイルオーバーは次のようになります
- 2つのサーバーの間にDRBDを破る
- 新しいサーバーのDRBD状態を
Primary/Unknown
に設定します。
- DRBDマウント
- IBDATA1の情報 でRAWデバイスをマウントします。
-
/var/lib/mysql
- DRBDデバイス
- セットアップ pacemaker /
ucarp 次のフェイルオーバー の準備をする
フェールオーバー設定のためにDRBD / UCARPを好みます。 それらの古い投稿を参照してください
アップデート2015-10-14 11:30 EDT
既に述べたように、REDOログはservice mysql start
にマウントされているDRBDブロックデバイスになければなりません。
- バイナリログ
- リレーログ
- エラーログ
- スローログ
- 一般ログ
これらのファイルはすべて/var/lib/mysql
にもなければなりません。そのようにして、フェールオーバーはすべてMySQL関連を持ちます(あなた自身のディスクにある生データを引いたもの)。
警告:この設定はMyisamテーブル用ではありません。ハードフェールオーバーが発生した場合、クラッシュ/フェイルオーバーの前にすべての開いているMyISAMテーブルは破損としてマークされ、Myisamテーブルに影響を与える一般的な/var/lib/mysql
を実行する必要があります。
すべてのテーブルがInnoDBの場合は、この警告を無視してください。残りのMyISAMテーブルをInnoDBに変換すると、この警告は無視できます。 (REPAIR TABLE
スキーマにInnoDBにMyISAMテーブルを変換しないでください)。