JavaベースのRedis哨兵の高可用性


Redis哨兵とは?
可用性は、エンタープライズ・データベースの最も重要な品質の1つです.ユーザーは、彼らが必要とする情報と洞察力を得ることができ、彼らの仕事の中で際立つことができることを保証しなければならない.
しかし、必要に応じてデータベースが使用可能であることを確認するのは難しい.「高可用性」という言葉は、平均時間を超える時間内に障害が発生することなく連続的に実行できるシステムを指します.
Redis Centinelは、非リレーショナルキー値データベースとして使用可能なオープンソースのメモリにデータ構造を格納高可用性ソリューションRedisである.RedisCentinelの目的は、Redisインスタンスを3つの異なる機能で管理することです.Redisの導入を監視し、問題があれば通知を送信し、新しいプライマリノードを作成することでフェイルオーバプロセスを自動的に処理します.
分散システムとして、RedisSentineは他の哨兵プロセスと一緒に実行するつもりです.これは、プライマリノードの検出に失敗したときに偽陽性が現れる可能性を低減し、システムに任意の単一プロセスの障害を接種させる.
RedisCentinelの作成者は、少なくとも3つの哨兵の例を提案し、丈夫な哨兵の配置を行うことをお勧めします.これらの例は、互いに独立している可能性のあるコンピュータ、例えば、異なる地理的領域に位置するコンピュータに分布しなければならない.
Redis哨兵の運転方法
RedisCentinelを実行するには、赤哨またはRedisサーバの2つの実行可能ファイルの1つが必要です.
赤哨実行ファイルを使用して、次のコマンドを使用してRedis Sentineを実行できます.
redis-sentinel /path/to/sentinel.conf

「/path/to/entinel.conf」は、Sentinalプロファイルのパスです.
Redisサーバ実行ファイルを使用して、次のコマンドを使用してRedis Sentineを実行できます.
redis-server /path/to/sentinel.conf --sentinel

どちらの場合も、哨兵プロファイルへのリンクを指定する必要があります.RedisCentinelを実行するときは、システムの再起動時にシステムの現在の状態を保存するためにプロファイルを使用する必要があります.
Redis Centinelプロファイルの例は次のとおりです.
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5

この例では、「歩哨モニター」行は、SentinalマスターノードというSentinalマスターノードを定義します.プライマリ・グループ名は、指定されたIPアドレスとポート番号にあります.この法定人数パラメータは哨兵プロセスの数であり,これらのプロセスはメインノードに到達できないという事実に合意しなければならない.
その他の行は、次の設定を定義します.
「歩哨-ミリ秒ごと」:マスターノードがアクセスできないミリ秒数を定義します.「歩哨フェイルオーバータイムアウト」:歩哨プロセスがメインノードのフェイルオーバー投票を試行する時間の長さを定義します.[前哨パラレル同期]:同じ時間にフェイルオーバした後に、同じプライマリノードを使用するように再構成できるスレーブノードの数を定義します.
JavaでRedis哨兵に接続
Javaプログラマーにとって、悪いメッセージはRedisCentinelがJavaと互換性がないことです.しかし、良いニュースは、Redis CentinelとJavaがRedissonのようなフレームワークを使用して簡単に協働することができることであり、RedissonはRedisのJavaクライアントであり、多くの一般的なJavaプログラミング言語構造を使用している.Redissonは、分散型で実装されたJavaオブジェクト、コレクション、ロック、およびサービスを数十個提供し、ユーザーが異なるアプリケーションとサーバ間で共有できるようにします.
次のコード例では、JavaでRedisCentinelの使用を開始する方法を示します.プロファイルとレディソンクライアントの設定では、JavaでRedisを使用する可能性を示すための基本的な操作を実行します.
package redis.demo;
import org.redisson.Redisson;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
/**
 * Redis Sentinel Java example
 *
 */
public class Application 
{
    public static void main( String[] args )
    {
        Config config = new Config();
        config.useSentinelServers()
              .addSentinelAddress("redis://127.0.0.1:6379")
              .setMasterName("myMaster");
        RedissonClient redisson = Redisson.create(config);
        // perform operations
        // implements java.util.concurrent.ConcurrentMap
        RMap map = redisson.getMap("simpleMap");
        map.put("mapKey", "This is a map value");
        String mapValue = map.get("mapKey");
        System.out.println("stored map value: " + mapValue);
        // implements java.util.concurrent.locks.Lock
        RLock lock = redisson.getLock("simpleLock");
        lock.lock();
        try {
           // do some actions
        } finally {
           lock.unlock();
        }
        redisson.shutdown();
    }
}

Redissonユーザは、少なくとも1つのRedisCentinelサーバと少なくとも1つのRedisプライマリノードを指定する必要があることに注意してください.起動後、RedissonはRedisSentineで使用可能なマスターノードと哨兵ノードのリストを監視し続けます.これは、ユーザがRedisトポロジの状態を監視してフェイルオーバ状況を処理する必要がないことを意味する.Redissonは自分でこの任務を処理した.