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自動生成的,隻要注意一下加注釋的點即可。