1. 程式人生 > >Redis 主從配置密碼以及哨兵

Redis 主從配置密碼以及哨兵

切換 啟動命令 block 而且 提升 認證 保護 release 訪問

Redis 主從介紹

主Redis寫入數據時,從Redis會通過Redis Sync機制,同步數據,確保數據一致。並且Redis有哨兵(Sentinel)機制,Redis主掛掉會自動幫我們提升從為主。


主從同步類型以及哨兵介紹

  級聯復制

    為避免主Redis同時讀寫壓力過大,三個包括以上節點的Redis,可以配置為級聯復制,如下圖所示,節點4可以同步節點3數據,也可以同步節點2數據。

  技術分享圖片

  一主多從

    需要兩個以及以上節點。因為Redis是異步同步數據,數據寫入主節點並返回客戶端,並不代表從節點也已經寫入數據,而從節點同步的結果也並不會返回給主節點,而是會直接丟棄。所以(上圖)級聯復制從節點3同步從節點2數據,就又多了一層丟數據的風險,具體采用哪種方式看自己情況。

技術分享圖片

  哨兵機制

    有了主從,那我們需要對其進行監控,Sentinel會不斷地檢查你的主服務器和從服務器是否運作正常。某個節點故障後,Sentinel 會開始一次自動故障遷移操作, 它會將失效主服務器的其中一個從服務器升級為新的主服務器, 並讓失效主服務器的其他從服務器改為復制新的主服務器; 當客戶端試圖連接失效的主服務器時, 集群也會向客戶端返回新主服務器的地址, 使得集群可以使用新主服務器代替失效服務器。Redis Sentinel 是一個分布式系統, 你可以在一個架構中運行多個 Sentinel 進程(Progress), 這些進程使用流言協議(Gossip Protocols)來接收關於主服務器是否下線的信息, 並使用投票協議(Agreement Protocols)來決定是否執行自動故障遷移, 以及選擇哪個從服務器作為新的主服務器。雖然 Redis Sentinel 釋出為一個單獨的可執行文件 redis-sentinel , 但實際上它只是一個運行在特殊模式下的 Redis 服務器。


Redis 主從配置

系統環境 Debian,一主一從配置。

  主節點IP:192.168.198.131

  從節點IP:192.168.198.132

  端口使用默認6379

節點1 節點2 全部執行以下命令,不同的地方有標註。

cd /data/ #我習慣把Redis 放在data目錄下

wget http://download.redis.io/releases/redis-3.2.9.tar.gz

tar -xf redis-3.2.9.tar.gz

mv redis-3.2.9 redis

cd redis/

make && make install

cp src/redis-server /usr/bin/redis-server

cp src/redis-cli /usr/bin/redis-cli

mv redis.conf redis.conf~

cat redis.conf~ | grep -Ev "^$|^#" > redis.conf

vim redis.conf   #修改以下內容,不是必須的

bind 192.168.198.131   #兩臺主機分別改為自己的IP

logfile "/data/redis/logs/redis.log"

daemonize yes   #啟用守護模式

slave-read-only yes   #slave 默認就是只讀的,這裏不用管。

protected-mode no   #protected-mode 是3.2 之後加入的新特性,為了禁止公網訪問redis cache,加強redis安全的。根據自己需要配置,它啟用的條件,有兩個,沒有bind IP 以及沒有設置訪問密碼。

requirepass "admin.123"   #設置redis登錄密碼

masterauth "admin.123"   #主從認證密碼,否則主從不能同步

啟用主從模式只有Redis Slave 添加一行,啟動服務主從就配置好了。

slaveof 192.168.198.131 6379

檢查主從狀態

~]# redis-cli -c -h 192.168.198.131 -p 6379

192.168.198.131:6379> info

.......

# Replication   #中間省略了內容,自己可以看看,主要是找到這一段,看主從狀態。
role:master
connected_slaves:1
slave0:ip=192.168.198.132,port=6379,state=online,offset=5700675,lag=0
master_repl_offset:5700675
repl_backlog_active:1
repl_backlog_size:10000000
repl_backlog_first_byte_offset:1
repl_backlog_histlen:5707674

.......


Redis Sentinel 配置

vim sentinel.conf   #在redis的跟目錄下

port 26379
daemonize yes
protected-mode no   #保護模式如果開啟只接受回環地址的ipv4和ipv6地址鏈接,拒絕外部鏈接,而且正常應該配置多個哨兵,避免一個哨兵出現獨裁情況,如果配置多個哨兵那如果開啟也會拒絕其他sentinel的連接。導致哨兵配置無法生效。
logfile "/data/redis/logs/sentinel.log"    #指明日誌文件
dir "/data/redis/sentinel"
sentinel monitor mymaster 192.168.198.131 6379 1   #哨兵監控的master。
sentinel down-after-milliseconds mymaster 5000    #master或者slave多少時間(默認30秒)不能使用標記為down狀態。
sentinel failover-timeout mymaster 9000   #若哨兵在配置值內未能完成故障轉移操作,則任務本次故障轉移失敗。

sentinel auth-pass mymaster tomredis.123   #如果redis配置了密碼,那這裏必須配置認證,否則不能自動切換

/data/redis/src/redis-sentinel /data/redis/sentinel.conf   #啟動服務

如果有下面報錯 啟動命令後面要加上 --sentinel

*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 6
>>> ‘sentinel monitor mymaster 192.168.198.131 6379 1‘
sentinel directive while not in sentinel mode

多個哨兵配置文件一樣,正常情況下要配置奇數哨兵,避免切換時候票數相同,出現競爭,影響線上業務。

Redis 主從配置密碼以及哨兵