通过哨兵机制实现Redis主从配置以及java调用 一、redis 主从配置的作用是什么  二、如何实现主从配置 三、java中调用

Redis版本:3.0.7

操作环境:Linux

  redis主从配置,配置master 只能为写,slave只能为读,在客户端对poolconnect请求时候,,会将读请求转到slave上面,写请求转到master上面,同时,master和slave有同步功能,这就实现了(数据层)读写分离对上层(逻辑层)透明的正常逻辑。无需再通过中间件或者代码进行读写分析实现。

通过哨兵机制实现Redis主从配置以及java调用
一、redis 主从配置的作用是什么
 二、如何实现主从配置
三、java中调用

 二、如何实现主从配置

  以一台服务器,配置两个端口号为例子做介绍

  redis实现主从配置最关键的两个两个配置文件是redis.conf和sentinel.conf,分别配合redis-server和redis-sentinel使用;下面做详细讲解。

  主配置文件:

  redis.conf:

 1 #开启后台运行模式
 2 daemonize yes
 3 #指定进程id存放位置,也可以用默认的
 4 pidfile /usr/local/webserver/redis/run/redis.pid
 5 #指定端口号
 6 port 6379
 7 
 8 
 9 tcp-backlog 511
10 
11 timeout 0
12 
13 tcp-keepalive 0
14 
15 loglevel notice
16 
17 logfile ""
18 
19 databases 16
20 
21 save 900 1
22 save 300 10
23 save 60 10000
24 
25 stop-writes-on-bgsave-error yes
26 
27 rdbcompression yes
28 
29 rdbchecksum yes
30 
31 dbfilename dump.rdb
32 #指定数据存放位置,也可以用默认的
33 dir /usr/local/webserver/redis/db
34 
35 slave-serve-stale-data yes
36 #从redis只能读
37 slave-read-only yes
38 
39 repl-diskless-sync no
40 
41 repl-diskless-sync-delay 5
42 
43 repl-disable-tcp-nodelay no
44 
45 slave-priority 100
46 #本redis密码
47 requirepass 123456
48 #主redis密码
49 masterauth "123456"
50 
51 appendonly yes
52 
53 appendfilename "appendonly.aof"
54 
55 appendfsync everysec
56 
57 no-appendfsync-on-rewrite no
58 
59 auto-aof-rewrite-percentage 100
60 auto-aof-rewrite-min-size 64mb
61 
62 aof-load-truncated yes
63 
64 lua-time-limit 5000
65 
66 slowlog-max-len 128
67 
68 latency-monitor-threshold 0
69 
70 notify-keyspace-events ""
71 
72 hash-max-ziplist-entries 512
73 hash-max-ziplist-value 64
74 
75 list-max-ziplist-entries 512
76 list-max-ziplist-value 64
77 
78 set-max-intset-entries 512
79 
80 zset-max-ziplist-entries 128
81 zset-max-ziplist-value 64
82 
83 hll-sparse-max-bytes 3000
84 
85 activerehashing yes
86 
87 client-output-buffer-limit normal 0 0 0
88 client-output-buffer-limit slave 256mb 64mb 60
89 client-output-buffer-limit pubsub 32mb 8mb 60
90 
91 hz 10
92 
93 aof-rewrite-incremental-fsync yes

  sentinel.conf(哨兵机制):

 1 port 26379
 2 dir "/usr/local/webserver/redis/db"
 3 # 守护进程模式
 4 daemonize yes
 5 # 指明日志文件名
 6 logfile "./sentinel.log"
 7 #设置监控的主redis的ip以及端口号,以及投票最低数
 8 sentinel monitor mymaster 127.0.0.1 6379 1
 9 sentinel down-after-milliseconds mymaster 5000
10 sentinel failover-timeout mymaster 18000
11 sentinel auth-pass mymaster 123456

 从配置文件:

  redis.conf:

 1 daemonize yes
 2 
 3 pidfile /usr/local/webserver/redis-slave1/run/redis.pid
 4 
 5 port 63791
 6 
 7 
 8 tcp-backlog 511
 9 
10 timeout 0
11 
12 tcp-keepalive 0
13 
14 loglevel notice
15 
16 logfile ""
17 
18 databases 16
19 
20 save 900 1
21 save 300 10
22 save 60 10000
23 
24 stop-writes-on-bgsave-error yes
25 
26 rdbcompression yes
27 
28 rdbchecksum yes
29 
30 dbfilename dump.rdb
31 
32 dir /usr/local/webserver/redis-slave1/db
33 
34 slave-serve-stale-data yes
35 
36 slave-read-only yes
37 
38 repl-diskless-sync no
39 
40 repl-diskless-sync-delay 5
41 
42 repl-disable-tcp-nodelay no
43 
44 slave-priority 100
45 
46 requirepass 123456
47 masterauth "123456"
48 
49 appendonly yes
50 
51 appendfilename "appendonly.aof"
52 
53 appendfsync everysec
54 
55 no-appendfsync-on-rewrite no
56 
57 auto-aof-rewrite-percentage 100
58 auto-aof-rewrite-min-size 64mb
59 
60 aof-load-truncated yes
61 
62 lua-time-limit 5000
63 
64 slowlog-max-len 128
65 
66 latency-monitor-threshold 0
67 
68 notify-keyspace-events ""
69 
70 hash-max-ziplist-entries 512
71 hash-max-ziplist-value 64
72 
73 list-max-ziplist-entries 512
74 list-max-ziplist-value 64
75 
76 set-max-intset-entries 512
77 
78 zset-max-ziplist-entries 128
79 zset-max-ziplist-value 64
80 
81 hll-sparse-max-bytes 3000
82 
83 activerehashing yes
84 
85 client-output-buffer-limit normal 0 0 0
86 client-output-buffer-limit slave 256mb 64mb 60
87 client-output-buffer-limit pubsub 32mb 8mb 60
88 
89 hz 10
90 
91 aof-rewrite-incremental-fsync yes
92 
93 #指定主redis以及相应的端口号
94 slaveof 127.0.0.1 6379

  sentinel.conf:

 1 #sentinel端口
 2 port 263791
 3 #工作路径,注意路径不要和主重复
 4 dir "/usr/local/webserver/redis-slave1/db"
 5 # 守护进程模式
 6 daemonize yes
 7 # 指明日志文件名
 8 logfile "./sentinel.log"
 9 #哨兵监控的master,主从配置一样,
10 sentinel monitor mymaster 127.0.0.1 6379 1
11 # master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
12 sentinel down-after-milliseconds mymaster 5000
13 #若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
14 sentinel failover-timeout mymaster 18000
15 #设置master和slaves验证密码
16 sentinel auth-pass mymaster 123456

同理,如果要实现多个从配置,可以按照以上从配置方式多定义几个端口号就可以了。

在进行自动故障转移的时候,选中为主redis的redis.conf文件会将原来slaveof那一行去掉,并重新在从redis配置文件中指定主redis的信息

三、java中调用

 1 import java.util.HashSet;
 2 import java.util.Set;
 3 
 4 import redis.clients.jedis.Jedis;
 5 import redis.clients.jedis.JedisSentinelPool;
 6 
 7 public class RedisSentinelTest {
 8 
 9     @SuppressWarnings("deprecation")
10     public static void main(String[] args) {
11 
12         Set<String> sentinels = new HashSet<String>();
13         String hostAndPort1 = "127.0.0.1:26379";
14         String hostAndPort2 = "127.0.0.1:26380";
15         sentinels.add(hostAndPort1);
16         sentinels.add(hostAndPort2);
17 
18         String clusterName = "mymaster";
19         String password = "123456";
20 
21         JedisSentinelPool redisSentinelJedisPool = new JedisSentinelPool(clusterName,sentinels,password);
22 
23         Jedis jedis = null;
24         try {
25             jedis = redisSentinelJedisPool.getResource();
26 //            jedis.set("key", "value");
27             System.out.println(jedis.get("key"));
28         } catch (Exception e) {
29             e.printStackTrace();
30         } finally {
31             redisSentinelJedisPool.returnBrokenResource(jedis);
32         }
33 
34         redisSentinelJedisPool.close();
35     }
36 
37 }