redis-sentinelはHAをします
6645 ワード
基本的な紹介
本論文はredis-2.8.10とjedis 2に基づいている.4.2リリース.
redis 2.8以降のバージョンでは、Centinelがクライアント機能をリスニングすることをサポートし始めました.1つ以上のSentineをリスニングクラスタとして使用します.
バックエンドN個(master+slave)はredisクラスタを構成する.
Centinelは、Redisのmasterインスタンスが生存しているかどうかを検出し、Redis masterインスタンスに障害が発生した場合に、Redis masterのslaveをmasterに昇格させることにより、
古いマスターがredis sentinelのクラスタに再加入すると、新しいマスターのslaveとして再構成されます.
これはredis sentinelベースのHAクラスタが自己管理できることを意味します!
アプリケーションはsentinelによって、書き込み済みのmasterのIPとポートを直接構成するのではなく、現在のmasterの接続を動的に得ることができる.
これにより、master、slave切り替え後にアプリケーション構成の接続が使用できない場合を回避できます.
インストール構成
slaveのredisのredis.confはmasterのIPとポートを構成する必要があります#slabeof
Centinel公式ドキュメント:公式サイト:http://redis.io/topics/sentinel
テスト
191192には、同じマスターを監視するために1つのSentineが配置されています.
192配置master,191配置slave(
redis.confでmasterを構成するアドレスslave of 192.168.11.190 6379)
redis,Sentinalの起動
Springプロファイル&コード
プロファイルをリロードするには、java-daoはgetBeanでredisTemplateを取得し、getBeanの前にJedis jedis=new Jedis(ip,port)を使用します.テストしないとredis接続できません.
sentinelConfiguration構成リスニングのリスト
connectionFactory:現在のマスターをリスニングから取得
redisTemplate:connectionFactoryへの接続の取得
マスター切り替え時に適用されるログ:
本論文はredis-2.8.10とjedis 2に基づいている.4.2リリース.
redis 2.8以降のバージョンでは、Centinelがクライアント機能をリスニングすることをサポートし始めました.1つ以上のSentineをリスニングクラスタとして使用します.
バックエンドN個(master+slave)はredisクラスタを構成する.
Centinelは、Redisのmasterインスタンスが生存しているかどうかを検出し、Redis masterインスタンスに障害が発生した場合に、Redis masterのslaveをmasterに昇格させることにより、
古いマスターがredis sentinelのクラスタに再加入すると、新しいマスターのslaveとして再構成されます.
これはredis sentinelベースのHAクラスタが自己管理できることを意味します!
アプリケーションはsentinelによって、書き込み済みのmasterのIPとポートを直接構成するのではなく、現在のmasterの接続を動的に得ることができる.
これにより、master、slave切り替え後にアプリケーション構成の接続が使用できない場合を回避できます.
インストール構成
http://download.redis.io/releases/redis-2.8.17.tar.gz
1. redis:
tar zxvf redis-2.8.17.tar.gz ( tcl)
cd redis-2.8.8
( Liunx :getconf LONG_BIT)
32 :make CFLAGS="-march=i686"
64 :make
(make clean)
cd src
make test
make install
mkdir -p /opt/portal/redis/bin
mkdir -p /opt/portal/redis/conf
mkdir -p /opt/portal/redis/logs
cd /opt/portal/redis/redis-2.8.8
cp redis.conf sentinel.conf /opt/portal/redis/conf
cd /opt/portal/redis/redis-2.8.8/src
cp redis-server redis-cli redis-sentinel redis-benchmark mkreleasehdr.sh redis-check-aof redis-check-dump /opt/portal/redis/bin
vi /etc/profile
alias redis-server='/opt/portal/redis/bin/redis-server /opt/portal/redis/conf/redis.conf'
alias redis-cli='/opt/portal/redis/bin/redis-cli'
. /etc/profile
slaveのredisのredis.confはmasterのIPとポートを構成する必要があります#slabeof
Centinel公式ドキュメント:公式サイト:http://redis.io/topics/sentinel
<span style="font-size:24px;">sentinel.conf 6 </span>
<span style="color:#ff0000;">port 26329
sentinel monitor mymaster 192.168.14.191 6379 2</span>
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel notification-script <master-name> <script-path>
port: sentinel ( redis server client tcp )
monitor: sentinel monitor redis , redis (alias) redis ip+port,<span style="color:#006600;"> 2 2 setinel redis server , redis server real fail。 , 2, sentinel 1 , redis ,sentinel 。 。</span>
down-after-milliseconds: sentinel redis , down。 sentinel redis , 。
failover-timeout: sentinel failover ( master/slave ), failover 。 4 , sentinel.conf , , 。
parallel-syncs: failover , sentinel reconfigure slave 。 reconfigure , slave , slave , 。
notification-script: sentinel master-name , 。 , 。
テスト
191192には、同じマスターを監視するために1つのSentineが配置されています.
192配置master,191配置slave(
redis.confでmasterを構成するアドレスslave of 192.168.11.190 6379)
redis,Sentinalの起動
nohup ./bin/redis-sentinel ./conf/sentinel.conf> ./logs/redis-sentinel.log 2>&1&
redis-cli info redis
redis-cli -p 26379 redis-sentinel info master , slave,
master
192.168.14.192:26381> sentinel monitor mymaster 192.168.14.193 6379 2
master slaves:
192.168.14.192:26379> sentinel slaves mymaster
<span style="color:#3333ff;">192 master: redis-cli shutdown </span>
redis-sentinel.log
+sdown master mymaster 192.168.14.192 6379 192down
+vote-for-leader bccb0d2d048a9a8497f87137a856add2ff57bceb 1 master
+switch-master mymaster 192.168.14.192 6379 192.168.14.191 6379 master192 191
+slave slave 192.168.14.192:6379 192.168.14.192 6379 @ mymaster 192.168.14.191 6379 192 191 slave
redis-cli info Replication <span style="color:#3333ff;">191 role:master</span>
<span style="color:#3333ff;"> 192
redis-cli info Replication 192 role:slave</span>
<span style="color:#3333ff;"> 191 shutdown 192 master </span>
Springプロファイル&コード
<bean id="sentinelConfiguration" 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>
<property name="sentinels">
<set>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="192.168.14.192"></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.14.191"></constructor-arg>
<constructor-arg name="port" value="26379"></constructor-arg>
</bean>
</set>
</property>
</bean>
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<constructor-arg name="sentinelConfig" ref="sentinelConfiguration"></constructor-arg>
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="connectionFactory" />
</bean>
プロファイルをリロードするには、java-daoはgetBeanでredisTemplateを取得し、getBeanの前にJedis jedis=new Jedis(ip,port)を使用します.テストしないとredis接続できません.
Sentinel
sentinelConfiguration構成リスニングのリスト
connectionFactory:現在のマスターをリスニングから取得
redisTemplate:connectionFactoryへの接続の取得
Long listFormRedis=redisTemplate.opsForList().size("login_record_list");
String hostName=connectionFactory.getSentinelConnection().masters().iterator().next().getHost();
System.out.println(listFormRedis);
System.out.println(hostName);
マスター切り替え時に適用されるログ:
It seems like server has closed the connection.; nested exception
2014-11-10 16:57:46 redis.clients.jedis.JedisSentinelPool initPool
: Created JedisPool to master at 192.168.14.191:6379