码迷,mamicode.com
首页 > 其他好文 > 详细

《redis集群sentinel主从复制》笔记

时间:2015-05-13 19:50:11      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:redis   sentinel   集群   master   salve   

首先了解一下什么Sentinel:http://redisdoc.com/topic/sentinel.html#id2 ,耐着心看一遍,很受用。我也是看了好几遍,然后再结合实例操作验证,回头再看就觉得是那么回事了。


我的Demo案例下载地址:http://download.csdn.net/detail/caiwenfeng_for_23/8696295


  下面我简单说一下配置,放在conf目录下:


技术分享


从上图中可以看出,我配置了4个Sentinel、3个Master、7个Slave,他们之间的对应关系,我想你通过名字也可以猜到了吧。


关系如下:

1个Master分配1个slave,1个Master分配了2个Slave,1个Master分配了4个Slave;4个Sentinel监视3个Master

Master Slave
6379 7379
6380 7380、7381
6381 7382、7383、7384、7385




Sentinel分配的端口为:26379、26380、26381、26382

Master配置:
daemonize yes
pidfile /home/mayi/test/redis/data/redis-master1.pid
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile ""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory 50mb
maxmemory-policy allkeys-lru
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes


Slave配置文件:

#是否后台运行
daemonize yes
pidfile /home/mayi/test/redis/data/redis-slave1_1.pid
port 7379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile ""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slaveof  127.0.0.1 6379
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
 maxclients  10000
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

Sentinel配置文件:
#学习网址:http://redisdoc.com/topic/sentinel.html#id2
port 26379
daemonize yes
logfile "/home/mayi/test/redis/logs/sentinel.log"

#6379
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

#6380
sentinel monitor master_6380 127.0.0.1 6380 4
sentinel down-after-milliseconds master_6380 10000
sentinel failover-timeout master_6380 180000
sentinel parallel-syncs master_6380 5

#6381
sentinel monitor master_6381 127.0.0.1 6381 4
sentinel down-after-milliseconds master_6381 10000
sentinel failover-timeout master_6381 180000
sentinel parallel-syncs master_6381 5


PS:具体可以下载demo案例查看conf目录下的配置文件

然后分别启动Master、Slave、Sentinel 即可。  


启动后,可以用redis-cli 连接,输入info命令查看相应信息等。其他操作可以查看http://redisdoc.com/topic/sentinel.html#id2 


下面是Jedis操作Sentinel,代码如下:
package com.sondon.mayi.redis.test;

/**
 * @Project : JRedisHello
 * @Package : com.sondon.mayi.redis
 * @Class : RedisClusterTest.java
 * @Company 广州讯动网络科技有限公司
 * @Author : 蔡文锋
 * @DateTime:2015年5月6日 下午2:33:54
 * @Blog:http://blog.csdn.net/caiwenfeng_for_23
 * @Description : {}
 */

import java.util.HashSet;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;

/**
 * 
 * @Project : JRedisHello
 * @Package : com.sondon.mayi.redis.test
 * @Class : JedisSentinelPoolTest.java
 * @Company 广州讯动网络科技有限公司
 * @Author : 蔡文锋
 * @DateTime:2015年5月13日 下午5:25:18
 * @Blog:http://blog.csdn.net/caiwenfeng_for_23
 * @Description : {}
 */
public class JedisSentinelPoolTest {

	public static void main(String[] args) {
		Set<String> sentinels = new HashSet<String>();
		sentinels.add(new HostAndPort("127.0.0.1", 26379).toString());
		sentinels.add(new HostAndPort("127.0.0.1", 26380).toString());
		sentinels.add(new HostAndPort("127.0.0.1", 26381).toString());
		sentinels.add(new HostAndPort("127.0.0.1", 26382).toString());
		
		JedisSentinelPool master1_sentinelPool = new JedisSentinelPool("mymaster",sentinels);
		JedisSentinelPool master2_sentinelPool=new JedisSentinelPool("master_6380", sentinels);
		JedisSentinelPool master3_sentinelPool=new JedisSentinelPool("master_6381", sentinels);
		
		System.out.println("Current master1: "+ master1_sentinelPool.getCurrentHostMaster().toString());
		System.out.println("Current master2: "+ master2_sentinelPool.getCurrentHostMaster().toString());
		System.out.println("Current master3: "+ master3_sentinelPool.getCurrentHostMaster().toString());
		
//		System.out.println("num_active :"+master1_sentinelPool.getNumActive());
//		System.out.println("num_active :"+master2_sentinelPool.getNumActive());
//		System.out.println("num_active :"+master3_sentinelPool.getNumActive());
		System.out.println("isClosed  :"+master1_sentinelPool.isClosed());
		
		//存
		Jedis master = master1_sentinelPool.getResource();
		master.set("username", "liangzhichao");
		//释放master
		master1_sentinelPool.returnResourceObject(master);
		
		//取
		Jedis master2 = master1_sentinelPool.getResource();
		String value = master2.get("username");
		System.out.println("username: " + value);
		master2.close();
		
		
		master1_sentinelPool.close();
		master2_sentinelPool.close();
		master3_sentinelPool.close();
		
		master1_sentinelPool.destroy();
		master2_sentinelPool.destroy();
		master3_sentinelPool.destroy();

	}
}


结果显示:
Current master1: 127.0.0.1:6379
Current master2: 127.0.0.1:6380
Current master3: 127.0.0.1:6381
isClosed  :false
username: liangzhichao



PS:先把demo跑起来,再慢慢研究里面的细枝末节。

《redis集群sentinel主从复制》笔记

标签:redis   sentinel   集群   master   salve   

原文地址:http://blog.csdn.net/caiwenfeng_for_23/article/details/45695581

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!