ラベル MySQL の投稿を表示しています。 すべての投稿を表示
ラベル MySQL の投稿を表示しています。 すべての投稿を表示

2013年11月11日月曜日

MySQL Pool Scanner(MPS) の仕組み

2013年の記事ですが・・・途中まで訳したので公開します。
Facebookでの、MySQL運用の話ですね。

https://www.facebook.com/notes/facebook-engineering/under-the-hood-mysql-pool-scanner-mps/10151750529723920


以下翻訳

Facebookは数多くのMysql database clustersを運用しているプロジェクトの一つだ。
このサーバ群は、2つの大陸にある様々なデータセンターの数千のサーバで構成されている。

小さなチームでこのサイズのclusterを運用することは、DBAがそうするようにclusterが自分自身で走るよう、ほぼすべてを自動化することによって達成される。
その自動化のための1つの仕組みに、私たちがMPS(MySQL Pool Scanner)と呼ぶものがある。

MPSは多くがPythonで書かれたstate machineだ。それはDBAのルーチンワークに変わる物で、人間の介入をなくしてくれる。

クラスターはシングルデータベースノードをみる
数千のサーバの一つ一つはいくつかのMysql Instanceを格納できる。
Instanceは分割されたProcesである。それぞれのデータセットをもち、別のポートで動く。シンプルにするために1つのサーバに2つインスタンスがあると仮定する。

データセットは数千のシャードに分割されている。それぞれのインスタンスはいくつかのシャードを保持している。
Facebookユーザのプロファイルは作成時にいずれかのシャードに割り当てられる。それぞれのシャードは数千のユーザのプロファイルを持つ。

簡単に図を用いて説明する。





すべてのインスタンスは、他のサーバ(通常の場合、他のデータセンター)で持っているデータのコピーをいくつか持っている。
これは2つの目標を達せうするために行われる。


  1. 高可用性 サーバがダウンした場合。我々はどこかに提供可能なデータを持っている。
  2. パフォーマンス 地理的に異なる読み込みが近くで行われるように、独自のレプリカを持っている。
これを実現させるための方法は、単純なMySQLのマスター/スレーブだ。すべてのインスタンスはレプリカセットの一部である。レプリカセットは1つのマスタと複数のスレーブを持つ。レプリカセットへのすべての書き込みは、マスターで発生している必要がある。

スレイブは、書き込みイベントがきてすぐにそれらを書き込みストリームに予約する。
マスターとスレーブはほぼ同じデータを持っているので、読み込みはレプリカセットのいずれかに行われる。

次の図は、それぞれが1つのインスタンスをホストし、他のインスタンスは空である。(我々はこれをスペアと呼ぶ。)


サーバーはインスタンスのコンテナであり、実際にはもっと複雑だ。
例えば、マスターインスタンスをホストしているサーバーは、他のマスターのスレイブインスタンスをホストしていることがあります。




2つの重要な「ビルドブロック」操作にMPSは依存している。


1. サーバ配置、コピー
1つ目の「ビルドブロック」操作は、他のホストにコピーを作成する。我々はもっともパフォーマンスよくコピーをするために、Xtrabackupの改良版を使用している。付け替えは、コピーが完了した後、削除を行うのと同じ作業である。

最初にシステムは、操作のために新しい予備のインスタンスを割り当てます。スレーブまたはマスターを一つ選択し、割り当てられた新しい予備のインスタンスに、データをコピーします。下の図は付け替え作業を示しています。コピーが完了したあと、インスタンスが削除されます。


2. マスターインスタンス昇格

2つ目のビルディングブロックは、レプリカセット内のインスタンスをマスターに昇格させるアクションである。
昇格の間、昇格させるターゲットをきめて、レプリカセットへの書き込みを止める。新しいマスターからレプリケーションするようにスレイブを変更する。そして書き込みを始める。下記の図では、プロモーション完了後、古いマスターが削除される操作をしめす。単純にするために、レプリカセットは3つのインスタンスのみを含む物とする。



これらの2つの操作は完全に自動化されている。人間の介入無しに、日に100回、1000回実行することができる。

ホストマネジメントと状態

基礎的なところを理解したところで、ビルディングブロックの抽象的概念をみてみよう。

現在の状態、メタデータ、現在過去のMPSコピー操作を保持しているリポジトリーとMPSは協力して動く。それらはデータベース自体で管理され、スケールする。そしてMPSは複雑なアプリケーションのインストールを必要としない。

事実、MPS自体はステートレスである。ホスト独自のプールで実行され、状態管理されているリポジトリーを使用して動く。状態は別々に、並列に処理される。

2013年8月12日月曜日

MySQL vs Maria DB


MySQLと互換性を保ち、完全なオープンソースとして存在しており、これから主役になるといわれているMariaDBについての面白い記事。翻訳と感想を。訳せないところは英文のまま


MariaDBは有名なリレーショナルDBであるMySQLのフォークプロジェクトで、遅いながらも確実に、強いコミュニティを作りMySQLのユーザをとりこんでいる。その明確な証拠は、The Registerの本日のレポートから来ている。それはGoggleがMariaDB Fundationに常勤のエンジニアをアサインしたことだ。

オラクルは、それはMysqlの多様性を生み出す想定内の計画だと答えている。
Googleが開発者を一人送る。それ自体は大きなニュースに見えないかもしれません。しかし、それはMysqlとの戦いのトレンドを成長させていくことを指しています。

MySQLはOracleに買収されて以来、ますます孤立しているオープンソースプロジェクトとなっている。
『孤立している』このケースで言うと、オラクルが外部の寄与を受け付けていないという認識だ。

MysqlはGNU Public Licenceの元2つのデュアルライセンスで提供されている。
GPLが鍵だMysqlをフォークして作られたあらゆるプロジェクトは、ソースコードを公開することを要求される。おそらくそれがMysqlチームの利益になる。これはフリーソフトウエァの"copyleft(ソフトウェアの自由許諾権)"の本質だ。それは、改善が多数のプロジェクト間で共有されることを保証する。
しかし、MySQL、MariaDBのオリジナル製作者であるMonty Wideniusのような人は関係が続いている。オラクルは慎重にいくつかの変更を受け付けている。
GPLに親プロジェクトにコードの変更が受け付けられなければならないというルールはない。

そのような政策によって、MariaDBのようなMySQLから派生したDBが、MySQLと互換性を保つことを難しくしている。
While some forked projects in the open source world don't give a flying fig about compatibility  MariaDB most certainly does—otherwise, it would not be able to be a one-to-one replacement for existing MySQL databases.

WideniusとMariaDBチームはグーグルの参入によって、開発はギアアップされると思っている。彼らは多様性がMariaDBをよりよいプロジェクトにし、 そして商業的な1つにコントロールされなくなると信じている。
 確かにレジスターの記事はなぜグーグルが開発に開発に参入したか推測する。
グーグルのクラウドSQLプロダクトは、MySQLをベースにしている。そのためオラクルの気まぐれに運命を縛られるからである。

SkySQLのCEO Patrik SallnerはThe Regに「なぜGoogleが参加しているか?」かれの理論を述べている。彼らが、金銭面のスポンサーになっていないが、リソースを提供している会社はたくさんある。なぜならば彼らはコミュニティーの一員であることに価値を見るので。
That's another thing we learned from MySQL, to make sure there are enough contributors. At MySQL there were not that many externally,' he said.
'None, none,' Widenus [sic] chipped in during our conversation.
Did Oracle Pick Up The Clue Phone?
Widenius may have gotten ahead of himself with that statement to the Register, as Oracle may be wising up to the fact that if it wants to keep interest going in MySQL as an open source project, it has better start opening the shell a little.

MySQLのコミュニティーマネージャーである、Dave Stokes は外部のコントリビューターに呼びかけを行った。Stokesのリクエストは嘲笑と、苦情を受けた。それは、Oracle Contributors Agreementに同意を求めるものだ。そららは知的財産権の放棄などに関する物で、開発コミュニティーをイライラさせた。

以前のMySQL CommunityのマネージャGiuseppe Maxia は数日後に、オラクルの援護に現れた。

私はそれが好みではないが、私がオラクルを去ったときはそれはビジネスの一部でそれが残っていると思う。この機能はオープンソースを造るために、開発者を助けると思う。合理的なトレードオフだと思う。
それにMontyProgramも同じことを求めているし、ApacheもCanonicalも同じだとMaxiaは書いている。

Myxiaは彼の経験から、MySQLのコントリビューターになることは他のプロジェクトよりも難しいと挙げている。それはデータベースのソースコードの複雑さに起因することだ。


もしオラクルの取り組みがうまくいけば、プロジェクトの多様性を増加させる。
しかし、MariaDBのmore open than Mysqlからくる動きを止めることはできない。

もめてるようですねー。しかし長い目でみると、オラクルが面倒なことを続ける限りコントリビューターが減って、トーンダウンしそう。
ただ、世の中のMySQLがMariaDBに変わって行くかといわれると、なかなかその動きは見えないですね、少なくとも日本では。まあ、DBというシステムの根幹に関わるミドルウェアだと慎重になりますよね。
私的には引き続き、付かず離れずですね。