Libraryまとめ参考文献VitessについてVitessとはVitessとはMySQLの水平方向スケールアウトを提供するためのデータベースクラスタリングシステムYoutubeで2011年から使われていたそうです。以下のような特徴があります。スケーラビリティ一般的にはRDBはスケールするのが難しいという印象でしょう。MySQLはReplicaを置くことができますが、それでもスケール性は高いとは言えません。NoSQLのようにすると以下のようにシャーディングすることができます。Vitessを使うことによってNoSQLのようなスケール性を提供します。これはシャーディングをしているからです。ハイパフォーマンスVitessはデータベースパフォーマンスを悪くするクエリを自動で書き換えて効率よくします。キャッシングや中間クエリを使って重複したクエリが実行されないように自然に置き換えます。マネジメントのしやすさVitessはマスターフェイルオーバーやバックアップというものを自動的に行ってくれます。ロックサーバーを使って管理者サーバーを監視して、データベースのトポロジーを意識せずに済む様にします。コネクションプールMySQLの接続にかかる多大なメモリオーバーヘッドを削減します。gRPCベースのプロトコルは一度に1000以上の接続でも捌けます。クライアントからもgRPCで接続します。シャードマネジメントMySQLは本来はシャーディングはサポートしていないが、データベースに対して必要になるときがくるかもしれない。それをバックエンドで自動でやってくれるので、何もアプリケーションは書く必要がなくなる。ワークフロークラスタについてメタデータを常に追跡し続けるのでクラスタ監視は常に最新な状態に保つことができます。Keyspace論理データベースである。シャードをしていなければMySQLの名前で直接マッピングされます。シャードされていたら、keyspaceはいくつものMySQLデータベースにマッピングされるが、一つのデータベースにアクセスしているようにみえる。Cellセルとは特定の範囲で物理的に独立した配置されたサーバとネットワークインフラのグループです。serviceがあって、セルの中にホスティングされます。tabletsの情報を格納しています。Serviceバックエンドで走っている処理をこと。それぞれはトポロジーデータと分散ロッキングシステムを提供している。VitnessはKubernetes上だとetcdを使っていてKey-Value形式になっています。Tabletmysqldとvttabletプロセスのコンビです。ShardKeyspaceを分割したもので、MySQLマスターとスレーブから構成されます。アーキテクチャ以下のようなアーキテクチャです。大きくruntimeとadminに分かれていてadminに関するところが私たちの部分です。一方でruntimeはデプロイしているアプリケーション側の話です。ここで役割について解説します。したら特にvttabletなどはこっちの図の方がみやすいかもしれません。Serviceはメタデータを格納して動作しているサーバーの情報を持ち、シャーディングのスキーマなりを保持しています。バックエンドにはデータストアがあり、vtctlCLIツールとvtctldというWebインターフェースからアクセスすることができる。storeにはetcdが使われています。これには二つのインスタンスの種類があります。Localインスタンスがある。Globalインスタンスはあまり変わらないトポロジーのグローバルなデータを格納しています。Keyspaceやシャードについてです。セル一つにつき、一つのローカルインスタンスがあり、セルの設定情報を保持している。rolled-upデータを持っていて、クライアントがデータを探しやすいようにする。Globalインスタンスが停止してもあまり影響はないが、Localインスタンスが停止すると、そのセルは使わない方がいいです。Vitnessはクエリを処理するのにTopologyを使うことはなく、起動時やバックグラウンドでTopologyさーばーにアクセスしてTopologyの情報を得ている。スキーマ管理Vitnessでは二つのスキーマがあります。keyspaceとどのようにシャーディングされるかを指定しますシャーディングとは何かというと以下のようにシャードキーによって水平分散をすることです。vtgatevtgateは軽量なプロキシサーバーで、正しいvttabletにトラフィックをルーティングする役割を持つ。それぞれの結果に対して合算した結果を返します。クライアントはvtgateさえ見つけられればクエリを投げることができます。ここがシャーディングスキーマなりレイテンシ、tabletsの稼働状況などを持っています。vttabletvttabletはMySQLのプロキシサーバーである。SidecarのようにそれぞれのMySQLインスタンスの前に存在する。役割としては、vttabletはスループットを最大化するようにして、MySQLをひどいクエリから守ります。コネクションプーリング、クエリ書き換え、クエリのキャッシュの機能もある。これを挟むことによってMySQLドライバではなくて、Vitessクライアントを使うようになる。vtctldこれはWebインターフェース用のサーバーである。vitess.io/vitess/go/cmd/vtctlclientクラスタを作成する以下の様にしてクラスタを作成してください。storage-rwあとあとわかったのですが、--machine-type=n1-standard-4以上にしないとCPU不足になり起動できませんので注意してください。Storageのスコープを付与しています。Storageバケットを作成する以下のように作成します。アクセスしないので安いnearlineにしています。以下のように実行します。gs://vitess-backup-tutorialetcd-operatorを作成etcd-operatorはKubernetes上でのetcdクラスタを管理します。etcd-operator以下の様に確認できます。以下のようにクラスタの全てのデータをKey-Valueで持っているTopologyのためのetcdを起動します。createdすると以下のようになっています。以下のようにしてvtcdldを起動します。http://localhost:8001/api/v1/namespaces/default/services/vtctld:web/proxy同じく確認すると以下のようになっています。以下のようにしてポート転送をします。以下のURLにアクセスして確認してみます。--port=8001port-forwardでもいけます。port-forward特定のPodへのポート転送なのでhttp://localhost:[PORT]でアクセスできる違いがある。以下のURLにアクセスします。http://localhost:8001/api/v1/proxy/namespaces/default/services/vtctld:web/すると以下のような画面がみられるはずです。gRPCでクライアントにアクセスする以下のようにkvtlctlを使うことでgRPCでアクセスすることができる。tabletがスケールアウトを実現する上で必要である。以下のようにデプロイをします。./vttablet-up.shここでリソースが足りなかったのでスケールアウトさせました。--size=5これでも足りなかったです。いうよりCPUが足りないのでスケールアウトというよりはスケールアップをしないといけないのです。以下のコマンドで確認できます。vttablet-100再度確認すると以下のようになっている。test_keyspaceこれは以下のようになっています。ENGINE=InnoDBBackupをとる以下のようにしてバックアップを取ってみます。test-104vgateをデプロイこのままではルーティングをしてくれるvgateがないためアクセスできません。./vtgate-up.shのようにして立ち上げます。アプリケーション側のコードを書いてデプロイこれをvgateあてに接続すれば大丈夫です。今回はコードは省略します。クリーンアップ以下のようにしてクリーンアップします。LibraryGoのライブラリは以下の通りです。github.comこのvt以下にVitess用のライブラリが入っています。BufferのServiceが一つ定義されているのでimportして使うとAPIを使うことができる。私は以前、ポートフォリオサイトを作成しました。私は、いくつか家内サービスを運用しています。C...2018-12-23Concourseで継続的デリバリー。»プロフィール学生エンジニア。忘れてしまうので備忘録です。flaskでServerlessにホストするTelepresence概論スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。