1.1概要
マスタースレーブ切り替え技術の方法は次のとおりです。マスターサーバーがダウンした場合、スレーブサーバーをマスターサーバーに手動で切り替える必要があります。これには手動による介入が必要であり、時間と労力がかかります。サービスが一定期間利用できなくなります。これは推奨される方法ではなく、多くの場合、センチネルモードを優先します。
1.2センチネルモード
センチネルモードは、Redis
センチネルのコマンドを最初に提供する特別なモードです。センチネルは独立したプロセスであり、プロセスとして、独立して実行されます。原則として、Sentinelは、コマンドを送信してサーバーが応答するのを待つことにより、実行中の複数のインスタンスをRedis
監視します。ここでの歩哨は2つの目的を果たします。Redis
- コマンドを送信すると、
Redis
サーバーはマスターサーバーとスレーブサーバーを含む実行ステータスの監視に戻ります。 - センチネルは
master
ダウンタイムを検出すると、自動的にダウンタイムにslave
切り替わりmaster
、パブリッシュ/サブスクライブモードを介して他のスレーブサーバーに通知し、構成ファイルを変更して、ホストを切り替えさせます。
ただし、番兵プロセスRedis
がサーバーを監視する場合、問題が発生する可能性があります。このため、監視に複数の番兵を使用できます。各歩哨間でも監視が行われるため、マルチ歩哨モードが形成されます。
フェイルオーバー(failover)
プロセスを言葉で説明します。メインサーバーがダウンしていると仮定すると、センチネル1
は最初に結果を検出し、システムはすぐには続行しません。failover
センチネル1
がメインサーバーが利用できないと主観的に信じているだけで、この現象は主観的なオフラインになります。次の番兵もメインサーバーが利用できないことを検出し、その数が一定の値に達すると、番兵の間で投票が行われ、投票の結果が番兵によって開始されてfailover
動作します。切り替えが成功すると、各センチネルは、パブリッシュ/サブスクライブモデルを介して、監視しているサーバーからホストを切り替えます。このプロセスは、客観的オフラインと呼ばれます。このようにして、すべてがクライアントに対して透過的になります。
1.3Redis
センチネルモードの構成
3
このプロセスを示すために、番兵と1
マスター/2
スレーブRedis
サーバーを構成します。
サービスの種類 | マスターサーバーですか | IPアドレス | 港 |
---|---|---|---|
もう一度言ってください | はい | 192.168.11.128 | 6379 |
もう一度言ってください | いいえ | 192.168.11.129 | 6379 |
もう一度言ってください | いいえ | 192.168.11.130 | 6379 |
センチネル | - | 192.168.11.128 | 26379 |
センチネル | - | 192.168.11.129 | 26379 |
センチネル | - | 192.168.11.130 | 26379 |
まず、Redisのマスタースレーブサーバーを構成し、redis.confファイルを次のように変更します
# 使得Redis服务器可以跨网络访问
bind 0.0.0.0
# 设置密码
requirepass "123456"
# 指定主服务器,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
slaveof 192.168.11.128 6379
# 主服务器密码,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
masterauth 123456
上記の内容は主にRedisサーバーを構成するためのものであり、スレーブサーバーにはマスターサーバーよりも1つslaveof
多い構成とパスワードがあります。
番兵を構成3
します。各番兵の構成は同じです。インストールディレクトリに変更用のファイルがRedis
ありますsentinel.conf
copy
# 禁止保护模式
protected-mode no
# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.11.128代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 192.168.11.128 6379 2
# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 123456
上記は、テストを容易にするために保護モードをオフにします。
上記の変更によりRedis
、インストールディレクトリのディレクトリに入りsrc
、次のコマンドでサーバーとセンチネルを起動できます。
# 启动Redis服务器进程
./redis-server ../redis.conf
# 启动哨兵进程
./redis-sentinel ../sentinel.conf
起動の順序に注意してください。最初はホスト(192.168.11.128)
のサービスプロセスでRedis
あり、次にスレーブのサービスプロセスが開始され、最後3
にセンチネルのサービスプロセスが開始されます。
1.4Java
で使用されるセンチネルモード
/**
* 测试Redis哨兵模式
* @author liu
*/
public class TestSentinels {
@SuppressWarnings("resource")
@Test
public void testSentinel() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(10);
jedisPoolConfig.setMaxIdle(5);
jedisPoolConfig.setMinIdle(5);
// 哨兵信息
Set<String> sentinels = new HashSet<>(Arrays.asList("192.168.11.128:26379",
"192.168.11.129:26379","192.168.11.130:26379"));
// 创建连接池
JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels,jedisPoolConfig,"123456");
// 获取客户端
Jedis jedis = pool.getResource();
// 执行两个命令
jedis.set("mykey", "myvalue");
String value = jedis.get("mykey");
System.out.println(value);
}
}
上記は使用目的であり、構成Jedis
にも使用できます。Spring
RedisTemplate
<bean id = "poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大空闲数 -->
<property name="maxIdle" value="50"></property>
<!-- 最大连接数 -->
<property name="maxTotal" value="100"></property>
<!-- 最大等待时间 -->
<property name="maxWaitMillis" value="20000"></property>
</bean>
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg>
<constructor-arg name="sentinelConfig" ref="sentinelConfig"></constructor-arg>
<property name="password" value="123456"></property>
</bean>
<!-- JDK序列化器 -->
<bean id="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean>
<!-- String序列化器 -->
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="connectionFactory"></property>
<property name="keySerializer" ref="stringRedisSerializer"></property>
<property name="defaultSerializer" ref="stringRedisSerializer"></property>
<property name="valueSerializer" ref="jdkSerializationRedisSerializer"></property>
</bean>
<!-- 哨兵配置 -->
<bean id="sentinelConfig" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
<!-- 服务名称 -->
<property name="master">
<bean class="org.springframework.data.redis.connection.RedisNode">
<property name="name" value="mymaster"></property>
</bean>
</property>
<!-- 哨兵服务IP和端口 -->
<property name="sentinels">
<set>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="192.168.11.128"></constructor-arg>
<constructor-arg name="port" value="26379"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="192.168.11.129"></constructor-arg>
<constructor-arg name="port" value="26379"></constructor-arg>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="192.168.11.130"></constructor-arg>
<constructor-arg name="port" value="26379"></constructor-arg>
</bean>
</set>
</property>
</bean>
1.5センチネルモードのその他の構成項目
構成項目 | パラメータタイプ | 効果 |
---|---|---|
port |
整数 | センチネルプロセスポートを開始します |
dir |
フォルダディレクトリ | Sentinelプロセスサービスの一時フォルダ。デフォルトでは、/tmp 書き込み可能な権限があることを確認します。 |
sentinel down-after-milliseconds |
<サービス名><ミリ秒(整数)> | 番兵がサービスを監視しているRedis とき、Redis サービスがデフォルトのミリ秒数以内に応答できないとき、単一の番兵によって考慮される主観的なオフライン時間、デフォルトは30000(30秒) |
sentinel parallel-syncs |
<サービス名><サーバー数(整数)> | 新しいホストを同期できるサービスの数を指定しRedis ます。一般的に、数値が小さいほど同期時間が長くなり、数値が大きいほどネットワークリソース要件が高くなります。 |
sentinel failover-timeout |
<サービス名><ミリ秒(整数)> | フェイルオーバーに許可されるミリ秒数を指定します。この時間以降、フェイルオーバーは失敗したと見なされます。デフォルトは3 分です。 |
sentinel notification-script |
<サービス名><スクリプトパス> | 監視対象インスタンスが指すインスタンスが異常であることがsentinel 検出されたときに呼び出されるアラームスクリプトを指定します。redis この構成アイテムはオプションであり、より一般的に使用されます |
sentinel down-after-milliseconds
構成アイテムは、センチネルが指定された時間後に応答を受け取らなかった後でもホストが利用できないと考えるセンチネルです。他のセンチネルはそうではありません。センチネルはこのメッセージを記録します。主観的なオフラインを持つセンチネルがsentinel monitor
設定された数に達すると、投票を開始して続行しますfailover
。このとき、センチネルRedis
は新しいシーンのニーズに合わせてセンチネル設定ファイルを書き換えます。