Redis+Sentinel叢集安裝與配置_redis

來源:互聯網
上載者:User

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 daemonize yes#後台啟動   pidfile "/var/run/redis.pid"   port 6379   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 "/usr/redis/data"   masterauth "123456"#如果做故障切換,不論主從節點都要填寫密碼且要保持一致   slave-serve-stale-data yes   slave-read-only yes   repl-disable-tcp-nodelay no   slave-priority 98   requirepass "123456"#當前redis密碼   appendonly yes   # appendfsync always   appendfsync everysec   # appendfsync no   no-appendfsync-on-rewrite no   auto-aof-rewrite-percentage 100   auto-aof-rewrite-min-size 64mb   lua-time-limit 5000   slowlog-log-slower-than 10000   slowlog-max-len 128   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   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   # Generated by CONFIG REWRITE   sentinel.conf設定檔:

[plain]  view plain  copy port 26379   sentinel monitor mymaster 192.168.20.105 6379 2#2表示在sentinel叢集中只要有兩個節點檢測到redis主節點出故障就進行切換,單sentinel節點無效(自己測試發現的)   sentinel down-after-milliseconds mymaster 3000#如果3s內mymaster無響應,則認為mymaster宕機了   sentinel failover-timeout mymaster 10000#如果10秒後,mysater仍沒活過來,則啟動failover   sentinel auth-pass mymaster 123456#redis主節點密碼   sentinel config-epoch mymaster 89   daemonize yes   dir "/usr/redis/bin"#指定工作目錄   sentinel known-slave mymaster 192.168.20.29 6379#sentinel自動產生的   sentinel known-slave mymaster 192.168.20.108 6379#sentinel自動產生的   sentinel known-sentinel mymaster 192.168.20.108 26379 695a7bf69bf7c0bdacb3a01ea262319cfca85de9#sentinel自動產生的      # Generated by CONFIG REWRITE      sentinel known-sentinel mymaster 192.168.20.29 26379 b1fba42ff8b363b2aea5c52e5dfa2c1ae52869e9#sentinel自動產生的  

虛擬機器:192.168.20.29

redis.conf設定檔:

[plain]  view plain  copy daemonize yes   pidfile "/var/run/redis.pid"   port 6379   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 "/usr/redis/data"   masterauth "123456"#主節點密碼   slave-serve-stale-data yes   slave-read-only yes   repl-disable-tcp-nodelay no   slave-priority 98   requirepass "123456"   appendonly yes   # appendfsync always   appendfsync everysec   # appendfsync no   no-appendfsync-on-rewrite no   auto-aof-rewrite-percentage 100   auto-aof-rewrite-min-size 64mb   lua-time-limit 5000   slowlog-log-slower-than 10000   slowlog-max-len 128   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   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   # Generated by CONFIG REWRITE      slaveof 192.168.20.105 6379#配置主節點資訊   sentinel.conf設定檔(基本與主節點一樣,請注意對比):
[plain]  view plain  copy port 26379   sentinel monitor mymaster 192.168.20.105 6379 2   sentinel down-after-milliseconds mymaster 3000   sentinel failover-timeout mymaster 10000   sentinel auth-pass mymaster 123456   sentinel config-epoch mymaster 89   daemonize yes   dir "/usr/redis/bin"   sentinel known-slave mymaster 192.168.20.108 6379   sentinel known-slave mymaster 192.168.20.29 6379   sentinel known-sentinel mymaster 192.168.20.108 26379 695a7bf69bf7c0bdacb3a01ea262319cfca85de9      # Generated by CONFIG REWRITE      sentinel known-sentinel mymaster 192.168.20.105 26379 a8d94fbe0f1120278136c84a612ea84d57d2501c  

虛擬機器:192.168.20.108

redis.conf設定檔:

[plain]  view plain  copy daemonize yes   pidfile "/var/run/redis.pid"   port 6379   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 "/usr/redis/data"   masterauth "123456"   slave-serve-stale-data yes   slave-read-only yes   repl-disable-tcp-nodelay no   slave-priority 100   requirepass "123456"   appendonly yes   # appendfsync always   appendfsync everysec   # appendfsync no   no-appendfsync-on-rewrite no   auto-aof-rewrite-percentage 100   auto-aof-rewrite-min-size 64mb   lua-time-limit 5000   slowlog-log-slower-than 10000   slowlog-max-len 128   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   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   # Generated by CONFIG REWRITE      slaveof 192.168.20.105 6379   sentinel.conf設定檔(基本與主節點一樣,請注意對比):

[plain]  view plain  copy port 26379   sentinel monitor mymaster 192.168.20.105 6379 2   sentinel down-after-milliseconds mymaster 3000   sentinel failover-timeout mymaster 10000   sentinel auth-pass mymaster 123456   sentinel config-epoch mymaster 89   daemonize yes   dir "/usr/redis/bin"   sentinel known-slave mymaster 192.168.20.108 6379   sentinel known-slave mymaster 192.168.20.29 6379   sentinel known-sentinel mymaster 192.168.20.105 26379 a8d94fbe0f1120278136c84a612ea84d57d2501c      # Generated by CONFIG REWRITE      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主從節點之間的故障切換。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.