Redis+Sentinel集群安装与配置

1.环境介绍

集群机器                                         redis服务                                     哨兵(sentinel)                   节点描述

虚拟机:192.168.20.105    安装redis服务,端口6379            安装sentinel服务,端口26379             主节点

虚拟机:192.168.20.29      安装redis服务,端口6379            安装sentinel服务,端口26379             从节点

虚拟机:192.168.20.108    安装redis服务,端口6379            安装sentinel服务,端口26379             从节点

即:3个redis服务,三个sentinel服务,192.168.20.105 为主节点,实现按照上篇文章介绍配置好主从关系。

2.相关启动命令

cd到/usr/redis/bin目录可以执行以下命令:

redis-server /usr/redis/etc/redis.conf#启动redis服务

./redis-sentinel /usr/redis/etc/sentinel.conf#启动sentinel哨兵服务

./redis-cli -p 6379 -a 123456#打开本机redis客户端连接,连接上之后可执行set、get、keys *等命令

ps -ef|grep redis#查看redis状态

3.配置文件

虚拟机:192.168.20.105

redis.conf配置文件:

[plain]  view plain  copy
  1. daemonize yes#后台启动  
  2. pidfile "/var/run/redis.pid"  
  3. port 6379  
  4. timeout 0  
  5. tcp-keepalive 0  
  6. loglevel notice  
  7. logfile ""  
  8. databases 16  
  9. save 900 1  
  10. save 300 10  
  11. save 60 10000  
  12. stop-writes-on-bgsave-error yes  
  13. rdbcompression yes  
  14. rdbchecksum yes  
  15. dbfilename "dump.rdb"  
  16. dir "/usr/redis/data"  
  17. masterauth "123456"#如果做故障切换,不论主从节点都要填写密码且要保持一致  
  18. slave-serve-stale-data yes  
  19. slave-read-only yes  
  20. repl-disable-tcp-nodelay no  
  21. slave-priority 98  
  22. requirepass "123456"#当前redis密码  
  23. appendonly yes  
  24. # appendfsync always  
  25. appendfsync everysec  
  26. # appendfsync no  
  27. no-appendfsync-on-rewrite no  
  28. auto-aof-rewrite-percentage 100  
  29. auto-aof-rewrite-min-size 64mb  
  30. lua-time-limit 5000  
  31. slowlog-log-slower-than 10000  
  32. slowlog-max-len 128  
  33. notify-keyspace-events ""  
  34. hash-max-ziplist-entries 512  
  35. hash-max-ziplist-value 64  
  36. list-max-ziplist-entries 512  
  37. list-max-ziplist-value 64  
  38. set-max-intset-entries 512  
  39. zset-max-ziplist-entries 128  
  40. zset-max-ziplist-value 64  
  41. activerehashing yes  
  42. client-output-buffer-limit normal 0 0 0  
  43. client-output-buffer-limit slave 256mb 64mb 60  
  44. client-output-buffer-limit pubsub 32mb 8mb 60  
  45. hz 10  
  46. aof-rewrite-incremental-fsync yes  
  47. # Generated by CONFIG REWRITE  
sentinel.conf配置文件:

[plain]  view plain  copy
  1. port 26379  
  2. sentinel monitor mymaster 192.168.20.105 6379 2#2表示在sentinel集群中只要有两个节点检测到redis主节点出故障就进行切换,单sentinel节点无效(自己测试发现的)  
  3. sentinel down-after-milliseconds mymaster 3000#如果3s内mymaster无响应,则认为mymaster宕机了  
  4. sentinel failover-timeout mymaster 10000#如果10秒后,mysater仍没活过来,则启动failover  
  5. sentinel auth-pass mymaster 123456#redis主节点密码  
  6. sentinel config-epoch mymaster 89  
  7. daemonize yes  
  8. dir "/usr/redis/bin"#指定工作目录  
  9. sentinel known-slave mymaster 192.168.20.29 6379#sentinel自动生成的  
  10. sentinel known-slave mymaster 192.168.20.108 6379#sentinel自动生成的  
  11. sentinel known-sentinel mymaster 192.168.20.108 26379 695a7bf69bf7c0bdacb3a01ea262319cfca85de9#sentinel自动生成的  
  12.   
  13. # Generated by CONFIG REWRITE  
  14.   
  15. sentinel known-sentinel mymaster 192.168.20.29 26379 b1fba42ff8b363b2aea5c52e5dfa2c1ae52869e9#sentinel自动生成的  

虚拟机:192.168.20.29

redis.conf配置文件:

[plain]  view plain  copy
  1. daemonize yes  
  2. pidfile "/var/run/redis.pid"  
  3. port 6379  
  4. timeout 0  
  5. tcp-keepalive 0  
  6. loglevel notice  
  7. logfile ""  
  8. databases 16  
  9. save 900 1  
  10. save 300 10  
  11. save 60 10000  
  12. stop-writes-on-bgsave-error yes  
  13. rdbcompression yes  
  14. rdbchecksum yes  
  15. dbfilename "dump.rdb"  
  16. dir "/usr/redis/data"  
  17. masterauth "123456"#主节点密码  
  18. slave-serve-stale-data yes  
  19. slave-read-only yes  
  20. repl-disable-tcp-nodelay no  
  21. slave-priority 98  
  22. requirepass "123456"  
  23. appendonly yes  
  24. # appendfsync always  
  25. appendfsync everysec  
  26. # appendfsync no  
  27. no-appendfsync-on-rewrite no  
  28. auto-aof-rewrite-percentage 100  
  29. auto-aof-rewrite-min-size 64mb  
  30. lua-time-limit 5000  
  31. slowlog-log-slower-than 10000  
  32. slowlog-max-len 128  
  33. notify-keyspace-events ""  
  34. hash-max-ziplist-entries 512  
  35. hash-max-ziplist-value 64  
  36. list-max-ziplist-entries 512  
  37. list-max-ziplist-value 64  
  38. set-max-intset-entries 512  
  39. zset-max-ziplist-entries 128  
  40. zset-max-ziplist-value 64  
  41. activerehashing yes  
  42. client-output-buffer-limit normal 0 0 0  
  43. client-output-buffer-limit slave 256mb 64mb 60  
  44. client-output-buffer-limit pubsub 32mb 8mb 60  
  45. hz 10  
  46. aof-rewrite-incremental-fsync yes  
  47. # Generated by CONFIG REWRITE  
  48.   
  49. slaveof 192.168.20.105 6379#配置主节点信息  
sentinel.conf配置文件(基本与主节点一样,请注意对比):
[plain]  view plain  copy
  1. port 26379  
  2. sentinel monitor mymaster 192.168.20.105 6379 2  
  3. sentinel down-after-milliseconds mymaster 3000  
  4. sentinel failover-timeout mymaster 10000  
  5. sentinel auth-pass mymaster 123456  
  6. sentinel config-epoch mymaster 89  
  7. daemonize yes  
  8. dir "/usr/redis/bin"  
  9. sentinel known-slave mymaster 192.168.20.108 6379  
  10. sentinel known-slave mymaster 192.168.20.29 6379  
  11. sentinel known-sentinel mymaster 192.168.20.108 26379 695a7bf69bf7c0bdacb3a01ea262319cfca85de9  
  12.   
  13. # Generated by CONFIG REWRITE  
  14.   
  15. sentinel known-sentinel mymaster 192.168.20.105 26379 a8d94fbe0f1120278136c84a612ea84d57d2501c  

虚拟机:192.168.20.108

redis.conf配置文件:

[plain]  view plain  copy
  1. daemonize yes  
  2. pidfile "/var/run/redis.pid"  
  3. port 6379  
  4. timeout 0  
  5. tcp-keepalive 0  
  6. loglevel notice  
  7. logfile ""  
  8. databases 16  
  9. save 900 1  
  10. save 300 10  
  11. save 60 10000  
  12. stop-writes-on-bgsave-error yes  
  13. rdbcompression yes  
  14. rdbchecksum yes  
  15. dbfilename "dump.rdb"  
  16. dir "/usr/redis/data"  
  17. masterauth "123456"  
  18. slave-serve-stale-data yes  
  19. slave-read-only yes  
  20. repl-disable-tcp-nodelay no  
  21. slave-priority 100  
  22. requirepass "123456"  
  23. appendonly yes  
  24. # appendfsync always  
  25. appendfsync everysec  
  26. # appendfsync no  
  27. no-appendfsync-on-rewrite no  
  28. auto-aof-rewrite-percentage 100  
  29. auto-aof-rewrite-min-size 64mb  
  30. lua-time-limit 5000  
  31. slowlog-log-slower-than 10000  
  32. slowlog-max-len 128  
  33. notify-keyspace-events ""  
  34. hash-max-ziplist-entries 512  
  35. hash-max-ziplist-value 64  
  36. list-max-ziplist-entries 512  
  37. list-max-ziplist-value 64  
  38. set-max-intset-entries 512  
  39. zset-max-ziplist-entries 128  
  40. zset-max-ziplist-value 64  
  41. activerehashing yes  
  42. client-output-buffer-limit normal 0 0 0  
  43. client-output-buffer-limit slave 256mb 64mb 60  
  44. client-output-buffer-limit pubsub 32mb 8mb 60  
  45. hz 10  
  46. aof-rewrite-incremental-fsync yes  
  47. # Generated by CONFIG REWRITE  
  48.   
  49. slaveof 192.168.20.105 6379  
sentinel.conf配置文件(基本与主节点一样,请注意对比):

[plain]  view plain  copy
  1. port 26379  
  2. sentinel monitor mymaster 192.168.20.105 6379 2  
  3. sentinel down-after-milliseconds mymaster 3000  
  4. sentinel failover-timeout mymaster 10000  
  5. sentinel auth-pass mymaster 123456  
  6. sentinel config-epoch mymaster 89  
  7. daemonize yes  
  8. dir "/usr/redis/bin"  
  9. sentinel known-slave mymaster 192.168.20.108 6379  
  10. sentinel known-slave mymaster 192.168.20.29 6379  
  11. sentinel known-sentinel mymaster 192.168.20.105 26379 a8d94fbe0f1120278136c84a612ea84d57d2501c  
  12.   
  13. # Generated by CONFIG REWRITE  
  14.   
  15. sentinel known-sentinel mymaster 192.168.20.29 26379 b1fba42ff8b363b2aea5c52e5dfa2c1ae52869e9  

4.sentinel支持集群(废话)

即使有一些sentinel进程宕掉了,依然可以进行redis集群的主备切换;
如果只有一个sentinel进程,如果这个进程运行出错,或者是网络堵塞,那么将无法实现redis集群的主备切换(单点问题);
如果有多个sentinel,redis的客户端可以随意地连接任意一个sentinel来获得关于redis集群中的信息。

5.补充说明

以上配置文件除加了注释的地方外,其他地方基本都是redis自动生成的,只要注意一下加注释的点即可。

可能在配置过程中会出现故障不能切换的问题,极大可能是因为在原主节点配置文件中没有配置主节点密码,因为sentinel不会自动给主节点配置文件加上新的主节点密码。

Redis目前的复制是异步的,只保证最终一致性,而不是强一致性(主从数据库的更新还是分先后,先主后从)。要是一致性要求高的应用,目前还是读写都在主库上。

如果想要一句话讲清楚sentinel实现redis切换的原理那就是:sentinel心跳检测到主节点出现异常后,通过修改redis.conf配置文件的形式实现redis主从节点之间的故障切换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值