新しい強一貫性の展開オプションであるRedisRaftの紹介
RedisRaft(開発中)は、オープンソースのRedis用の新しいモジュールであり、多数のRedisサーバーを単一のフォールトトレラントで一貫性の高いクラスターとして運用できるようにします。その名前が示すように、Raftコンセンサスアルゴリズムとそれを実装するオープンソースのCライブラリに基づいています。
RedisRaftは、RedisとRedisエコシステムに、厳密なシリアル化のデプロイオプションを備えた新しい強力な一貫性をもたらします。新しいモジュールにより、高レベルの信頼性と一貫性を必要とするキャッシュを超えたシナリオで、RedisをRedisの既存のクライアント、ライブラリ、およびデータ型と一緒に使用できるようになります。
RedisRaftの始まり
RedisRaftは、Redis5がリリースされる少し前に実験的な「サイドプロジェクト」として開始されました。 RedisモジュールAPIはRedis4で導入され、主に新しいデータ型とコマンドを実装するモジュールをサポートするように設計されています。 APIをどこまで拡張できるかを調査し、モジュールを使用してRedisをさらに根本的な方法で拡張したいと考えました。しかし、最終的には何か便利なもの、つまりRedisの強力な整合性展開オプションを実現したかったのです。
RedisRaftクラスターは、ZooKeeperやEtcdなどの信頼性の高い有名なデータストアに期待されるのと同じレベルの一貫性と信頼性を提供します。一言で言えば、RedisRaftで:
- 確認済みの書き込みは、コミットされ、失われることはありません。
- 読み取りは常に最新のコミットされた書き込みを返します。
このレベルの一貫性を提供する信頼性の高いデータストアから予想されるように、このような保証はパフォーマンスと可用性のトレードオフをもたらします。 RedisRaftの場合:
- クライアントの操作は、メッセージを交換するクラスターノードに依存しているため、ネットワークの遅延に縛られます。
- 書き込みは、完了する前にディスクにフラッシュする必要があります。これにより、書き込みはディスクI/Oレイテンシにバインドされます。
- クラスターは、ノードの大部分が稼働していて正常であり、相互に通信できる場合にのみ使用できます。
RedisRaftの仕組み
RedisRaftモジュールがRedisにロードされると、クラスターノード間の通信、Raftログまたはスナップショットのレプリケーション、永続性などを引き継ぎます。 Redisコアはこれを認識しないままであり、それに関する限り、クラスタリング、永続性、またはレプリケーションのないスタンドアロンサーバーとして動作しています。
次に示すように、3ノードのRedisRaftクラスターのセットアップは、3台のRedisサーバーを起動するのと同じくらい簡単です。
redis-server --loadmodule /path/to/redisraft.so
これは、最初のサーバーに接続してRaftクラスターを作成する方法です。
10.0.0.1:6379> RAFT.CLUSTER INIT
OK 989645460313dd2ddb051f033c791222
次に、他の2つのサーバーに接続し、それらをクラスターに参加させます。
10.0.0.2:6379> RAFT.CLUSTER JOIN 10.0.0.1:6379
OK
10.0.0.3:6379> RAFT.CLUSTER JOIN 10.0.0.1:6379
OK
クラスターへのアクセス
RedisRaftを設定すると、クラスターにデータを書き込むことができます。
10.0.0.1:6379> INCR counter:1
(integer) 1
返信を受け取ると、書き込みが少なくともに複製されていることがわかります。 クラスタノードの大部分(この場合は2ノード)であり、永続ストレージにコミットされています。
Raftは強力なリーダーの概念に基づいています。つまり、すべてのクライアント操作はリーダーノードに移動し、そこから開始する必要があります。この場合、私たちのクライアントは確かにリーダーとつながっていましたが、クラスターのリーダーシップは動的であり、クライアントは必ずしもリーダーが誰であるかを知っているとは限りません。
フォロワー(非リーダー)ノードで同じ操作を試みると、次の応答が作成されます:
10.0.0.3:6379> INCR counter:1
(error) MOVED 10.0.0.1:6379
したがって、クライアントとして、このエラーをキャッチし、指定されたとおりにリーダーノードとの接続を再確立して、コマンドを再試行できます。
しかし、既存のアプリケーションを変更したくない場合はどうでしょうか。幸い、RedisRaftは、これを自動的に処理するように構成することもできます。 フォロワープロキシモードを有効にする 、クラスターノードにリクエストをリーダーに自動的に転送させ、利用可能になったときに応答を提供させることができます:
10.0.0.3:6379> RAFT.CONFIG SET follower-proxy yes
OK
10.0.0.3:6379> INCR counter:1
(integer) 2
もちろん、これははるかに簡単ですが、非リーダーノードにヒットすると余分なネットワークホップが作成されるため、遅延とネットワーク負荷に影響します。
クラスターの変更
クラスタを設定するときに、実際には3つの異なる操作を実行しました。
- 単一ノードにクラスターを作成しました。
- 2番目のノードを追加しました。
- 3番目のノードを追加しました。
RedisRaftクラスター構成は静的ではなく、クラスターが作成された後、クラスターがアクティブである間に、ノードを追加または削除することができます。
たとえば、3番目のノードを置き換える必要がある場合があります。まず、それを置き換える新しいノードに参加します。移行中にクラスターと貴重なデータが劣化した冗長状態のままになるのを避けるために、「削除してから追加」ではなく「追加してから削除」することに注意してください。
10.0.0.4:6379> RAFT.CLUSTER JOIN 10.0.0.1:6379
OK
次に、3番目のノードにランダムに割り当てられたIDを検索します。
redis-cli -h 10.0.0.1 --raw RAFT.INFO | grep 10.0.0.3
node2:id=1739451728,state=connected,voting=yes,addr=10.0.0.3,port=6379,
last_conn_secs=3537,conn_errors=0,conn_oks=1
そしてそれを削除します:
10.0.0.1:6379> RAFT.NODE REMOVE 1739451728
OK
RedisRaftのリリースステータス
RedisRaftの開発作業の一環として、Kyle Kingsbury(別名Aphyr)と協力して、分散システムの安全性と正確性をテストするための有名なフレームワークであるJepsenを使用してRedisRaftを分析およびテストしています。このコラボレーションにより、これまでにこの公開された分析が行われました。
まだ開発中ですが、RedisRaftの基本的な機能のほとんどは整っています。現在、最初のプレビューバージョンに向けて取り組んでおり、数か月以内に利用可能になる予定です。一般に利用可能になると、RedisRaftはGNUAGPLv3またはRedisSource Available License(RSAL)のいずれかのデュアルライセンスでリリースされます。
-
グレースフルフェイルオーバーオプションを使用したCouchbaseServerのローリングアップグレード
マルチノードCouchbase®Serverクラスターをアップグレードするには、多くのアプローチがあります。この投稿では、グレースフルフェイルオーバーとデルタリカバリ方式を使用したローリングオンラインアップグレードの詳細な手順について説明します。 はじめに この投稿で説明されている方法は、アップグレードのためにクラスターにノードを追加する必要がないため、オンラインアップグレードで最も推奨される方法の1つです。完全なリバランスではなくデルタ変更のみを使用してノードが回復されるため、この方法は高速でリソース消費量が少なくなります。また、グローバルセカンダリインデックスはこのプロセスで保持されるた
-
新しい Linux テスト ラップトップの紹介:Lenovo G50
これは一大イベントでしょう。最近、有名な T61 と T400 マシンを含め、テストとレビューに使用した合計 4 台のラップトップを廃止しました。つまり、Linux のインストールなどをすべて行うには、新しいコンピューターが必要でした。だから、レノボG50。 Nvidiaカードが付属しているため、古いLGハードウェアを引き続き使用するため、古くてスペックが弱いにもかかわらず、その点でまだ役に立ちます.しかし、私のディストリビューションのテストのほとんどは、この真新しい野獣に焦点を当てています.UEFI、セキュアブートなどについて話しているので、ここには非常に重要な点があります.私のレビュー