Redis學習筆記—哨兵(Redis Sentinel)

Redis的主從複製模式下,一旦主節點由於故障不能提供服務,需要人工將從節點晉升爲主節點,同時還要通知應用方更新主節點地址,對於很多應用場景這種故障處理的方式是無法接受的。
Redis從2.8開始正式提供了Redis Sentinel(哨兵)架構來解決這個問題,Redis Sentinel是Redis的高可用實現方案,在實際的生產環境中,對提高整個系統的高可用性是非常有幫助的。

主從複製的問題

主從解決的問題

  • 如果主節點出故障了,從節點可以作爲後備力量頂上來,保證了數據的一致性
  • 從節點拓展了主節點的讀能力,主節點如果支撐不住,從節點會幫助主節點分擔壓力

主從可能出現的問題

  • 一旦主節點出現故障,需要手動將從節點晉升爲主節點,然後將其他從節點的主節點配置改爲這個,需要人工干預
  • 主節點所只能在一臺主機,限制了主節點的寫能力
  • 主節點只能在一臺主機,存儲能力受到單機的限制

Redis Sentinel的高可用性

Redis Sentinel是一個分佈式架構,其中包含若干個Sentinel節點和Redis數據節點,每個Sentinel節點會對數據節點和其餘Sentinel節點進行監控,當它發現節點不可達時,會對節點做下線標識。如果被標識的是主節點,它還會和其他Sentinel節點進行“協商”,當大多數Sentinel節點都認爲主節點不可達時,它們會選舉出一個Sentinel節點來完成自動故障轉移的工作,同時會將這個變化實時通知給Redis應用方。整個過程完全是自動的,不需要人工來介入,所以這套方案很有效地解決了Redis的高可用問題

主從複製模式

Redis-sentinel架構

安裝和部署

先畫個拓撲圖,接下來就按照這個拓撲圖爲例完成部署

簡要說明,會開啓6379、6666和7777三個端口的Redis實例,其中6379默認配置的爲主節點,6666和7777爲從節點,配置三個Sentinel節點端口分別是26379、26666和27777,下面進行詳細說明:
啓動主節點
redis-server redis-6666.conf

查看節點信息

[root@vmzq1l0l ~]# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:14cffeedb4d9635f130d446c9013dfe439ab06c1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1279
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1279
啓動兩個從節點

用配置文件的方式啓動,複製不同配置文件改相關配置(下面以6666端口實例舉例,7777操作完全相同,只是配置從6666改爲7777)

cp redis.conf redis-6666.conf

需要修改redis-6666.conf文件的以下配置(由於種種原因在5.0以後比較新的版本中,原本配置中slaveof改成了replicaof,會依然保留slaveof命令,本篇使用的是5.0.3版本)

#端口號
port 6666
#保護進程啓動(後臺啓動)
daemonize yes
#日誌文件
logfile "6666.log"
#rdb備份文件名
dbfilename "dump-6666.rdb"
replicaof 127.0.0.1 6379

啓動兩個實例(7777實例的配置文件按照上述套路再次執行一遍改成7777的配置)

redis-server redis-6666.conf
redis-server redis-7777.conf

如果上述步驟沒問題的話,現在看看主節點的主從信息

[root@vmzq1l0l redis]# redis-cli info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=7777,state=online,offset=1699,lag=1
slave1:ip=127.0.0.1,port=6666,state=online,offset=1699,lag=1
master_replid:471c9174da388dee8f1ac9cd23e00e0778f7658a
master_replid2:0000000000000000000000000000000000000000
···

6666端口實例從節點的主從信息

[root@vmzq1l0l redis]# redis-cli -h 127.0.0.1 -p 6666 info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:1867
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:471c9174da388dee8f1ac9cd23e00e0778f7658a
master_replid2:0000000000000000000000000000000000000000
···

至此只是完成了一主兩從的主從配置

部署Redis Sentinel節點

配置Sentinel節點

redis安裝目錄下有個sentinel.conf這個配置文件,默認是26379端口,修改以下配置參數:

port 26379
daemonize yes
logfile "26379.log"
dir /usr/local/redis
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
  • sentinel monitor mymaster 127.0.0.1 6379 2配置代表sentinel節點需要監控127.0.0.1:6379這個主節點,2代表判斷主節點失敗至少需要2個Sentinel節點同意,mymaster是主節點的別名
  • down-after-milliseconds 選項指定了 Sentinel 認爲服務器已經斷線所需的毫秒數
  • parallel-syncs 選項指定了在執行故障轉移時, 最多可以有多少個從服務器同時對新的主服務器進行同步, 這個數字越小, 完成故障轉移所需的時間就越長
啓動Sentinel節點

方法一,使用redis-sentinel命令:

redis-sentinel sentinel.conf

方法二,使用redis-server命令加–sentinel參數:

redis-server sentinel.conf --sentinel

兩種方法本質上是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章