Redis [Redis Cluster (Sentinel 監視環境構築、Sentinel 動作原理詳細説明、フェイルオーバー、クラスタモード概要、クラスタモード構築、クラスタモード原理分析)] (6) - 徹底詳細解説(学習のまとめ --- 入門から深化まで) )

 

 Redis Cluster_Sentinel監視環境構築

 新しい Sentinel-26379.conf ファイルを作成します

 新しい Sentinel-26380.conf ファイルを作成します

新しい Sentinel-26381.conf ファイルを作成します

Sentinel ノードを起動するには 2 つの方法があります

センチネルノードのステータスを表示する

Redis Cluster_Sentryの動作原理を詳しく解説

 監視段階

 通知フェーズ

フェイルオーバーフェーズ

 投票方法

 Redis クラスター_フェイルオーバー

 概要

デモフェイルオーバー

kill コマンドを使用してマスター ノードを強制終了します。

センチネルノード情報の表示

 6379 ノードを再起動します

設定ファイルは上書きされます

 Redis クラスターの概要_クラスターモード

 Redis には 3 つのクラスター モードがあります

 セントリーモードのデメリット

 クラスターモードの概要

 Redis クラスターの利点

Redisクラスタ_クラスタモード構築 

 環境整備

 フォルダーを作る

設定ファイルをコピーする

クラスターの検証 

クラスター情報の表示 

 Redis Clusterの原理分析_Cluster Mode

 コマンドの実行

回復 

ビューノード

 マスターノードを強制終了します

ノード情報の監視

 Redis クラスター_Java 操作 Redis クラスター

 Jedis が Redis を統合

ジェダイのMaven座標を紹介する

Javaで書かれたコード

SpringBoot は Redis を統合します

Maven 座標の導入

設定ファイル

Javaコード


 Redis Cluster_Sentinel監視環境構築

 新しい Sentinel-26379.conf ファイルを作成します

#端口
port 26379
#守护进程运行
daemonize yes
#日志文件
logfile "26379.log"
sentinel monitor mymaster 192.168.92.128 6379 2

 新しい Sentinel-26380.conf ファイルを作成します

#端口
port 26380
#守护进程运行
daemonize yes
#日志文件
logfile "26380.log"
sentinel monitor mymaster 192.168.66.100 6379 2

新しい Sentinel-26381.conf ファイルを作成します

#端口
port 26381
#守护进程运行
daemonize yes
#日志文件
logfile "26381.log"
sentinel monitor mymaster 192.168.66.100 6379 2

Sentinel ノードを起動するには 2 つの方法があります

redis-sentinel sentinel-26379.conf

センチネルノードのステータスを表示する

[root@localhost src]# ./redis-cli -p 26379
127.0.0.1:26379>
127.0.0.1:26379>
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.66.100:6379,slaves=2,sentinels=3

Redis Cluster_Sentryの動作原理を詳しく解説

 監視段階

 

 通知フェーズ

Sentinel は、情報を収集するためにマスターとスレーブへの通知を継続的に開始します。

フェイルオーバーフェーズ

通知フェーズでは、センチネルによって送信された通知がマスターから応答を受け取らなかった場合、マスターを SRI_S_DOWN としてマークし、マスターのステータスを各センチネルに送信します。他のセンチネルがマスターが電話を切ったということを聞くと、信じられないと言うので、行って見て送信します 結果は各センチネルで共有され、センチネルの半数がマスターがダウンしていると判断すると、マスターを SRI_0_DOWN としてマークします。

 

 

 投票方法

 方法:選挙通知を最初に受け取った番兵に投票します。

一部のケースを除きます。

1.オフライン

2. 応答が遅い

3. オリジナルマスターから長時間切断された場合

4. 優先原則

 

 1. Redis センチネル モードは、Redis の ___ アーキテクチャの 1 つの方法です。高可用性

 Redis クラスター_フェイルオーバー

 概要

マスター ノードに障害が発生した場合の Sentinel の監視機能と自動フェイルオーバー機能を示します。

デモフェイルオーバー

kill コマンドを使用してマスター ノードを強制終了します。

ps aux |grep redis
kill -9 pid

センチネルノード情報の表示

Sentinel ノードで info Sentinel コマンドを使用すると、すぐに表示されます。

[root@localhost src]# ./redis-cli -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6381,slaves=5,sentinels=3

注:マスター ノードが切り替えられていないことがわかります。センチネルはマスター ノードに障害が発生したことを検出して転送するため、しばらく時間がかかります。

 6379 ノードを再起動します

[root@localhost src]# ./redis-cli info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6381
master_link_status:down

設定ファイルは上書きされます

フェールオーバー フェーズ中に、センチネル ノードとマスター/スレーブ ノードの両方の構成ファイルが書き換えられます。

include /usr/local/redis/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
# Generated by CONFIG REWRITE
daemonize yes
protected-mode no
appendonly yes
slowlog-max-len 1200
slowlog-log-slower-than 1000
save 5 1
user default on nopass ~* &* +@all
dir "/usr/local/redis"
replicaof 127.0.0.1 6381

 Redis クラスターの概要_クラスターモード

 Redis には 3 つのクラスター モードがあります

 セントリーモードのデメリット

 

 クラスターモードの概要

 Redis クラスターは、複数のマスター/スレーブ ノード グループで構成される分散サービス クラスターであり、レプリケーション、高可用性、フラグメンテーションの特性を備えています。

 Redis クラスターの利点

 1. Redis クラスターは、__ ノード グループで構成される分散サービス クラスターです。複数のマスターとスレーブ

 2. Redis センチネル モードの欠点は ____ です。センチネル選挙期間中は外部サービスを提供できません

Redisクラスタ_クラスタモード構築 

 Redis クラスターの構築には、少なくとも 3 つのマスター ノードが必要です。ここでは、それぞれにスレーブ ノードが接続された 3 つのマスター ノードを構築し、合計 6 つの Redis ノードを構築します。

 環境整備

最初のマシン: 192.168.66.101 ポート 8001 ポート 8002

2 台目のマシン: 192.168.66.102 ポート 8001 ポート 8002

3 番目のマシン: 192.168.66.103 ポート 8001 ポート 8002

 フォルダーを作る

mkdir -p /usr/local/redis/redis-cluster/8001 /usr/local/redis/redis-cluster/8002

設定ファイルをコピーする

redis インストール ディレクトリの redis.conf ファイルをそれぞれ 8001 ディレクトリにコピーします。

cp /usr/local/redis/redis.conf /usr/local/redis/redis-cluster/8001

 redis.conf ファイルの次の内容を変更します。

port 8001
daemonize yes
pidfile "/var/run/redis_8001.pid"
#指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据
dir /usr/local/redis/redis-cluster/8001/
#启动集群模式
cluster-enabled yes
#集群节点信息文件,这里800x最好和port对应上
cluster-config-file nodes-8001.conf
# 节点离线的超时时间
cluster-node-timeout 5000
#去掉bind绑定访问ip信息
#bind 127.0.0.1
#关闭保护模式
protected-mode no
#启动AOF文件
appendonly yes
#如果要设置密码需要增加如下配置:
#设置redis访问密码
#requirepass xiaoton
#设置集群节点间访问密码,跟上面一致
#masterauth xiaoton

ファイルを 8002 フォルダーにコピーします

#将8001修改为8002:
cp /usr/local/redis/redis-cluster/8001/redis.conf /usr/local/redis/rediscluster/8002
# 批量修改字符串
:%s/8001/8002/g

ローカル マシン上のファイルを他の 2 台のマシンにコピーします。

# 第二台机器
scp /usr1/redis/redis-cluster/8001/redis.conf
[email protected]:/usr1/redis/redis-cluster/8001/
scp /usr1/redis/redis-cluster/8002/redis.conf
[email protected]:/usr1/redis/redis-cluster/8002/
# 第三台机器
scp /usr1/redis/redis-cluster/8001/redis.conf
[email protected]:/usr1/redis/redis-cluster/8001/
scp /usr1/redis/redis-cluster/8002/redis.conf
[email protected]:/usr1/redis/redis-cluster/8002/

これら 6 つの Redis インスタンスを個別に起動します

/usr/local/redis/src/redis-server /usr/local/redis/redis-cluster/8001/redis.conf
/usr/local/redis/src/redis-server /usr/local/redis/redis-cluster/8002/redis.conf

起動が成功したかどうかを確認する

ps -ef |grep redis

 redis-cli を使用して Redis クラスター全体を作成する

/usr/local/redis/src/redis-cli -a redis-pw --cluster create --cluster-replicas 1
192.168.66.101:8001 192.168.66.101:8002 192.168.66.102:8001 192.168.66.102:8002
192.168.66.103:8001 192.168.66.103:8002

ヘルプコマンドを表示 

src/redis‐cli --cluster help

クラスターの検証 

任意のクライアントに接続する

/usr/local/redisd/src/redis-cli -a redis-pw -c -h 192.168.66.101 -p 8001

クラスター情報の表示 

cluster info

 Redis Clusterの原理分析_Cluster Mode

 Redis Cluster はすべてのデータを 16384 個のスロット (スロット) に分割し、各ノードがスロットの一部を担当します。スロット情報は各ノードに格納されます。マスター ノードのみにスロットが割り当てられ、スレーブ ノードにはスロットが割り当てられません。

HASH_SLOT = CRC16(key) % 16384

 コマンドの実行

set k1 v1

 

 {} を使用してグループの概念を定義すると、キー内の {} に同じ内容を持つキーと値のペアが同じスロットに配置されます。

mset k1{test} v1 k2{test} v2 k3{test} v3

回復 

ビューノード

192.168.66.103:8001> cluster nodes

 マスターノードを強制終了します

lsof -i:8001
kill -9 pid

ノード情報の監視

 1. デフォルトでは、Redis Cluster モードは __ アルゴリズムを使用してキー値をハッシュして整数値を取得し、この整数値を使用してモジュロ 16384 を実行して特定のスロットを取得します。crc-16

 Redis クラスター_Java 操作 Redis クラスター

 Jedis が Redis を統合

ジェダイのMaven座標を紹介する

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

Javaで書かれたコード

public class JedisClusterTest {
    public static void main(String[] args) throws IOException {
         JedisPoolConfig config = new JedisPoolConfig();
         config.setMaxTotal(20);
         config.setMaxIdle(10);
         config.setMinIdle(5);
         Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
         jedisClusterNode.add(new HostAndPort("192.168.66.101", 8001));
         jedisClusterNode.add(new HostAndPort("192.168.66.102", 8002));
         jedisClusterNode.add(new HostAndPort("192.168.66.103", 8001));
         JedisCluster jedisCluster = null;
         try {
               //connectionTimeout:指的是连接一个url的连接等待时间
               //soTimeout:指的是连接上一个url,获取response的返回等待时间
               jedisCluster = new JedisCluster(jedisClusterNode, 6000, 5000, 10, "redis-pw", config);
               System.out.println(jedisCluster.set("name", "zhangsan"));
               System.out.println(jedisCluster.get("name"));
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (jedisCluster != null) {
                        jedisCluster.close();
            }
        }
    }
}

SpringBoot は Redis を統合します

Maven 座標の導入

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring‐boot‐starter‐data‐redis</artifactId>
</dependency>

設定ファイル

##单服务器
spring.redis.cluster.nodes=192.168.159.129:7001,192.168.159.129:7002,192.168.159
.129:7003,192.168.159.129:7004,192.168.159.129:7005,192.168.159.129:7006
## 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=300
## Redis数据库索引(默认为0)
spring.redis.database=0
## 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
## 连接池中的最大空闲连接
spring.redis.pool.max-idle=100
## 连接池中的最小空闲连接
spring.redis.pool.min-idle=20
## 连接超时时间(毫秒)
spring.redis.timeout=60000

Javaコード

@RestController
public class TestController {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @RequestMapping("/test_cluster")
    public void testCluster() throws InterruptedException {
        stringRedisTemplate.opsForValue().set("user:name", "xiaoton");
        System.out.println(stringRedisTemplate.opsForValue().get("user:name"));
    }
}

おすすめ

転載: blog.csdn.net/m0_58719994/article/details/131361084