1 概述
redis作為緩存工具,如果僅僅單機,一旦挂掉,将對業務造成嚴重的影響,是以建議生産環境上部署redis高可用環境,本文将基于sentinel + keepalived 實作redis的高可用。
本文主要介紹實作的步驟和配置檔案,不做原理上的介紹
注意,redis的sentinel高可用有一個很關鍵的點,隻有master節點可以寫入,其他節點都隻能讀,不能寫,是以,vip必須配置在master節點上
三台redis ip 分别為
主節點: 192.168.70.32
備節點1:192.168.70.33
備節點2:192.168.70.34
vip:192.168.70.35
注意,時間一定要同步,否則叢集功能異常,如不能啟動叢集,或者叢集master不會轉移
如果sentinel日志中有如下的報錯,則可能是伺服器時間不對,導緻了節點不會轉移,檢查伺服器時間問題,如果是虛拟機,如esxi系統,可能是esxi系統時間異常導緻該esxi上伺服器時間全部異常,要重點檢查。
隻要伺服器時間正确,按照以下的配置,基本可以實作高可用,即故障轉移。
2 部署keepalived
這裡采用編譯安裝來實作。
服務包:keepalived-1.4.3.tar.gz
步驟如下
到這裡keepalived配置完成
3 redis部署
3.1 redis編譯安裝
服務包:redis-4.0.8.tar.gz
tar -xzf redis-4.0.8.tar.gz -c /app
#添加make
#如果以上步驟遇到 you need tcl 8.5 or newer in order to run the redis test 的報錯,安裝tcl,指令yum install tcl -y
#設定開機啟動
#添加path
#編輯配置檔案
主節點配置修改如下:
備用節點
主備其他的配置選擇預設即可
#啟動redis服務
3.2 配置sentinel
主備節點都是一樣的配置
其他配置可以保持不變
另外,該檔案,會跟進master故障轉移,自動寫入一部配置設定置,如下截圖
4 測試
所有的節點都啟動後,就可以 測試高可用
從任意機器連接配接vip
[root@redis-01 ~]# redis-cli -a redis -h 192.168.70.35
192.168.70.35:6379> get key
"abc"
192.168.70.35:6379> set key abcd
ok
"abcd"
192.168.70.35:6379>
假設,vip 配置在 192.168.70.32伺服器上,把這台伺服器的redis程序殺掉後,vip會轉移到其他兩台的任意一樣,并且vip可以正常通路
則高可用實作
以上實作高可用,對vip的轉移,還有bind的ip配置很關鍵,會成功環境不成功的問題所在
5 附件
keepalived配置檔案
主從配置就四點不一樣
router_id不一樣
優先級不一樣
state主從不一樣
從節點配置不搶占ip ,nopreempt,可以 配置在 track_script配置段下
如下
主配置檔案如下