特定の記事をご覧ください私のGithubのノートを 見ます!
キーの組み合わせ:表+ハッシュキー+のSortKey
-
分離表のリアライズの業務データ
-
-
SortKeyは、スライスのソートデータを決定しました
コヒーレンス・プロトコル
データの複数のコピーの一貫性を確保するために使用パシフィカ契約。
<! - 追加 - >
機械
ペガサスは、少なくともこれらのマシンをクラスタの必要性を分散しました:
-
メタサーバ
-
リンク:メタサーバの設計
-
要件:2 SSDのないマシン3へ。
-
アクション:情報テーブルとフラグメントテーブルを保存します。
-
-
ReplicaServer:
-
リンク:レプリカサーバの設計
-
SSDにリンクされた少なくとも3台のマシン、推奨されますが必要です。例えば、サーバ8または12は、SSDをぶら下げ。これらのマシンは、すなわち、同様の構成を有し、同じ構成を必要としています。
-
役割:少なくとも3 ReplicaServer。各ReplicaServerは、複数のレプリカから構成されています。各レプリカは、プライマリまたはセカンダリのデータ片の表現です。
-
-
コレクター:オプションの役割、SSDのない一台のマシン。プロセスは、主に負荷が小さい場合には、クラスタを収集し、集約統計のために使用され、それがマシンのいずれかのメタサーバに推奨されます。
レプリカ
-
3レプリカに対応するデータ断片。
-
プライマリおよびセカンダリ:レプリカの2種類があります。
-
1に対応する3つの以上のレプリカデータ片では、1つのプライマリ、残りは二次です。
-
ReplicaServerとReplicaServer、レプリカ種の数からなるレプリカが同じではありません。
-
必ずしもレプリカのReplicaServerすべての原発では、必ずしもすべてのセカンダリ。
-
-
基本的なペガサスクラスタは、3 ReplicaServerの最小値が必要です。
ペガサス、レプリカで次の状態:
-
主要
-
二次
-
PotentialSecondary(学習者):
-
グループは、セカンダリ前の状態でその完全な補完データに新しいメンバーを追加するとき
-
-
非活性:
-
メタサーバ状態と切断時、又は場合グループへ状態要求はメタサーバのPartitionConfiguration修飾
-
-
エラー:
-
ステータスレプリカまたは論理エラーが発生した場合ときIO
-
書き込み処理
二相に似た書き込みプロセスがコミットします。
-
最初のクエリは、クライアントキーメタサーバ、対応するスライスに対応するキーReplicaServerを問い合わせます。具体的には、クライアントが実際にReplicaServerスライス原発が配置されている必要があります。
-
プライマリReplicaServerクライアントは、書き込み要求を開始します。
-
プライマリReplicaServerは、二つ以上の二次ReplicaServerそれに対応したデータをコピーします。
-
データはセカンダリReplicaServer成功書き込まれた後、プライマリReplicaServerがクライアントに正常な応答を返しました。
ReplicaServerにつながる可能性が書かれた理由は、要求に応答できません。
-
ReplicaServerメタサーバ、自動ログオフにハートビートを報告していきません。
-
IO、自動ログオフ上のいくつかの異常な回復不能の障害を受けたレプリカ。
-
プライマリメタサーバのレプリカが移行されます。
-
プライマリ操作とメタサーバは、グループメンバーチェンジした、書くことを拒否しました。
-
少なすぎるの二次電流の数は、レプリカは、セキュリティ上の理由から、書き込みに拒否しました。
-
フロー制御を考慮して、書き込みを拒否しました。
読み込みプロセス
プライマリからのみお読みください。
ダウンタイムの回復
-
メタサーバとすべてReplicaServerは、ハートビートを維持します。
-
ハートビートを検出達成するために失敗しました。
-
ダウンタイムの復旧状況:
-
プライマリフェールオーバ:ReplicaServerがダウンし、その後、選択セカンダリメタサーバがプライマリになりますプライマリパーティションの場合は。再度、セカンダリを追加した後。
-
二次フェイルオーバー:パーティション二ReplicaServerダウンタイム場合は、一時的にサービスを提供し続けるために金融機関の主なものを使用します。再度、セカンダリを追加した後。
-
メタサーバフェイルオーバー:メインメタサーバがダウンしているが、新しいマスターメタサーバになるために飼育係の主スペアメタサーバをつかみます。飼育係から状態を復元し、その後、すべてのReplicaServerハートビートを再確立。
-
-
回復プロセスダウン、ノード間でレプリケートされたデータを避けるようにしてください。
メイン飼育係をつかみます
<! - 飼育係グラブメイン - >
リンク:ZooKeeperのグラブメイン
スタンドアローンストレージ
ReplicaServerレプリカが、レプリカRocksDBがストレージエンジンとして使用し、複数を含みます。
-
WALのrocksdbを閉じました。
-
各書き込み要求がSequenceIDを作っているパシフィカのために、RocksDB書き込み要求は、内SequenceIDを持っています。ペガサスは、カスタムチェックポイントの生成をサポートするために、両者の融合を行いました。
-
例えば、TTLの値を:ペガサスRocksDBはペガサスのセマンティクスをサポートするために、いくつかの圧縮フィルタを追加します。
そして、同じ実装が切り離されているペガサスパシフィカの一貫性プロトコル、およびストレージエンジンの多くの。
RocksDB
<! - RocksDB - >
リンク:RocksDB
データセキュリティ
-
表ソフトの削除
-
表削除後、データが誤って削除を防ぐために、一定期間保持されます
-
-
メタデータ復旧
-
損傷を受け、再構成メタデータのそれぞれから収集飼育係ReplicaServer
-
-
リモートコールドバックアップ
-
必要なHDFSや山の雲•迅速な復旧などのデータオフサイトの定期的なバックアップ、
-
-
部屋の向こう側の同期
-
デプロイクラスタへのより多くの部屋で
-
非同期同期データ・レプリケーションを使用します
-
コールドバックアップ
ペガサスペガサス予定のスナップショット・ファイルのためのコールドバックアップデータと他の記憶媒体にバックアップし、その保護データの災害のより多くの層を提供することを目的とします。バックアップは、データ・ファイルのタイム・スナップショットのポイントであるので、しかし、そうコールドバックアップ、リカバリが最新のデータを失う可能性があるときには、ある、すべての最新のデータを保持することは保証されません。
具体的には、コールドバックアッププロセスは、以下のパラメータが含まれます。
-
記憶媒体(backup_provider):
-
そのようなローカルファイルシステムまたはHDFSなど、他のファイル・ストレージ・システムまたはサービスを参照してください。
-
-
コールドバックアップサイクルデータ(backup_interval):
-
バックアップデータのカバレッジのサイクル長を決定します。期間は1ヶ月であれば、月の前のデータのみを復元することが可能であるとき、そのデータを復元します。しかし、設定された期間が短すぎる場合は、バックアップあまりにも頻繁に、多くのオーバーヘッドのバックアップを作成します。キビの内部では、コールドバックアップ期間は通常1日です。
-
-
コールドバックアップ予約数(backup_history_count):
-
保持するバックアップのより多くの数の、大きな収納スペースオーバーヘッド。キビの内部では、一般的に最近3人の風邪のバックアップを保持します。
-
-
テーブルのコレクションコールドバックアップ(backup_app_ids):
-
いないすべてのテーブルは、コールドバックアップの価値があります。キビの内部では、多くの場合、テーブル内のデータの全額を袋詰めするために、我々はコールドバックアップではありません。
-
ペガサスでは、上記のパラメータの組み合わせは、コールドバックアップポリシー(backup_policy)と呼ばれます。ポリシーに従って単位の行にコールドバックアップデータ。
部屋の向こう側の同期
リンク:クロス同期文書の部屋
内部が高いサービスの可用性の要件にいくつかのビジネスを持っていますが、何回か耐え難い迷惑ルーム障害毎年、その後、ペガサスチームからの助けを求める、エンジンルームの失敗に希望キビ、サービスが損失することなく、バックアップコンピュータルームやデータトラフィックに切り替えることができます。コストの制約ため、主にキビダブルルームのインテリアインチ
通常、問題を解決するには、いくつかのアイデアがあります。
-
二つの部屋を書くために、クライアントからのデータを同期するには。この方法では、影響の部屋の帯域幅にわたってライン、および高遅延の影響を受けやすく、通常は数十ミリ秒まで増幅部屋の向こう1msの遅れで同じ部屋、強い一貫性の利点が、達成するために、クライアントのニーズ内の書き込み比較的非効率的です。クライアントの小規模および大規模複雑さのサービス側の複雑さ。
-
使用いかだ/パクシプロトコル定足数書き込み同期機械室を実現。このアプローチは、少なくとも3つのコピーを必要とするエンジンルーム3に配備されたが、より長い待ち時間があるため、最大の難しさを実現するためのプログラムであるメタ情報管理のクラスタ間で懸念の強い一貫性を提供します。
-
ペガサス2クラスタは、クラスタ間の2部屋、非同期レプリケーションで展開されています。データルームは、部屋Bに1分後に複製することができるが、全くないクライアントこの認識、知覚のみ部屋A. エンジンルーム内の障害は、ユーザーがエンジンルームBを書くために選択することができます この方式が適している弱い一貫性/最終一貫シーン要件。私たちは、実装方法を後で説明します「結果整合性を。」
実際のビジネスニーズを考慮に基づいて、我々はオプション3を選択しました。
同じクラスタ非同期同期スキーム3の間で行われている場合でも、業界でも異なるアプローチがあります。
-
各クラスタのシングルコピー:安定に完全に依存し、このプログラムの下でアカウントに既存のマルチクラスタの冗長性を取るには、単一のクラスタ内のコピーの数を減らすことができますが、一貫性が保証されていないため、彼らは単にコヒーレンシプロトコルのうちことができますクラスタネットワークとの間で、1つでも部屋がダウンしていることを保証するために、データの損失の額のみを数十ミリ秒のオーダーで要求されています。5に部屋の数を考慮し、各部屋には3つのコピーである場合は、データの完全な量は3×5 = 15のコピーであるとき、各クラスタ・スキームの単一のコピーに削減この時間はほとんど最も自然な選択です。
-
外部同期ツールを使用することに依存しているとして:サービスに影響を与えることなく、できるだけ部屋の向こうの天然同期同期ツールは、外部依存関係の展開、シンプルなディスクアクセスノードのログ(WAL)として使用し、ログを転送することができますので、最高です。このプログラムは、ログGCの前提がある同期が完了する前に、ログを削除することはできません、そうでなければ失われたデータを、しかし、GCのストレージサービスは、制御が困難外部ツールをログに記録します。そのため、ログが一週間以上を保持するように強制することができますが、欠点は、ディスクスペースのコストです。外部同期ツールは、安定性という利点に頼る、サービスに影響を与えずに、サービスを制御する能力の差は、(後述)、いくつかの些細な一貫性に対処することは困難であるという欠点は、最終的に一貫性を達成することは困難です。
-
サービスの中に埋め込まれた同期ツール:このアプローチは、サービスの安定性の安定性に影響を及ぼしているツールをツールを安定化する前に痛みを伴う期間があるでしょう。しかし、実装の柔軟性は確かに最強です。
当初はペガサスホットバックアッププログラムは、基本的には唯一の第三の選択肢を検討し、HBaseのレプリケーションに基づいています。そして、それは、データを確実にするために簡単にプログラムがペガサスは財産を失って保存されていないことが判明します。
各レプリカは(ここでは、具体的スライスを指し各プライマリ、セカンダリ注意が責任をホットバックアップのコピーではありません)リモート同時にレプリカに自分のプライベートのログをコピーします。コピーされた直接ペガサスクライアントによって行わ。A(例えば、セット/マルチセット)によるものを記述するために、各レコードをコピーするのB.ペガサスクライアント 従来のホットバックアップの書き込みを書き込むために、我々はここで定義され、区別duplicate_rpc表現ホットスタンバイの書き込み。
サーマルA-> Bが書き込みに用意され、Bはまた、パシフィカを経由して3つのプロトコルのコピーを提出し、民間のログを書き込みます。シーンAに問題がある、互いに同期してBが、書き込み動作サイクルが形成されている:A-> B-> A、同一の書き込みが何度も再現されます。書き込みサイクルを避けるために、私たちが紹介するクラスタIDの概念を、各duplicate_rpcは、送信者のクラスタIDをマークします。
[複製グループ]
A = 1
、B = 2
ボイド 集合(文字列tableNameの、 バイト[]ハッシュキー、 バイト[] SORTKEY、 バイト[]の値、 int型ttlSeconds)
ペガサスの最適化は、直接、直接ペガサスには、読み取りおよび書き込み。あなたはRedisのキャッシュ・アーキテクチャを置き換えることができます。
-
読み取りと書き込みロジックコンプレックス
-
故意にデータの一貫性を維持するために、
-
サービスの可用性は高くありません
-
機械の高コスト
問題:
読む:最初のキャッシュを読んで、キャッシュが存在しない場合は、データベース内のデータを読み込みます。
書き込み:両方のライトキャッシュ、ダブル書き込み、だけでなく、データベースに書き込ま。
オリジナル:データベースとしてキャッシュ+ HBaseの/ mysqlの/のMongoDBなどのRedis。
ビジネスアプリケーション
ハッシュキー | SortKey | 値 | |
---|---|---|---|
地図 | マップ | キー | 値 |
セットする | SETID | キー | ヌル |
リスト | リスト | 指数 | 値 |
ペガサスは、容器の種類をサポートしていませんが、それはハッシュキー+のSortKeyデータモデルコンテナをシミュレートすることができます。
コンテナのサポート
文字列マッチングのハッシュキーまたはのSortKey、唯一の基準を満たしているが返されます。ハッシュキーまたは文字列マッチングのSortKeyは、資格のあります
条件フィルタ
同じレプリカに書き込まれたハッシュキー同じデータが、レプリカ同様の動作が同一のスレッドシリアルで行われます。これは、同期の問題を回避します。
ハッシュキーと同じ上の書き込み操作は、常にセット、マルチセット、デル、multiDel、INCR、checkAndSet含む原子を、確認してください。
片道情勢
サポートするデータの指定の有効期限を、データが期限切れに読み取ることができません後。
TTLの有効期限ポリシー
-
スレッドセーフ
-
すべてのインターフェイスは、スレッドセーフであるマルチスレッドの問題を心配しないでください。
-
-
同時パフォーマンス
-
非同期モードを使用して基本的なクライアントを実現し、それは大規模な同時実行をサポートすることができ、パフォーマンスを心配しないでください。
-
-
クライアントシングルトン
-
getSingletonClientにより得られる()クライアントが単一の実施形態であり、これを再利用することができます。
-
-
フリップ機能
-
クライアントが提供するインタフェースを介して、データを簡単にフリップ機能ができます。
-
Javaクライアント
クラスタ鷹を使用すると、監視しました。
クラスタの監視
使用
また、これをサポートすることを可能にするために、= 5001現在のログにreplica1判決をコピーするには、メインスイッチのレプリカの製造における進歩のホットバックアップコピーは、例えば、失われることはありません容認する必要があり、スタンバイスイッチングは、この時に発生する、我々はゼロからにreplica1を表示したくないオフレジュームポイントは、我々は紹介confirmed_decreeを。レプリカは定期的にレプリカの回復は安全に5001からホットバックアップを再開することができたときに、永続的な飼育係にメタ進行たら、(例えば= 5001 confirmed_decreeなど)のメタ現在の進行状況を報告します。
ホットスタンバイAの底部から認識されているCLUSTER_ID = 1が書き込まれている見つけたときに再生区間Bのduplicate_rpc、したがって、それはもはやAに送信されません