Redis高可用架構(1)—Keepalive+VIP

最近整理一下Redis高可用架構的文檔,也準備分享出來,雖然這些架構也不是很復雜。
Redis的高可用方案目前主要嘗試過5種方式,其中2種方式已經在線上使用。

1)Redis Master-Slave + Keepalive + VIP。
這是很經典的db架構,也可以用與mysql的主從切換。
基本原理是:Keepalive通過腳本檢測master的存活,然后通過漂移VIP(Virtual IP)完成主從切換。

2)Redis Master-Slave + DNS Service + Sentinel。
基本原理是Sentinel集群進行Redis的存活檢測和Redis M-S狀態切換。
完成切換之后,sentinel調用notification-script參數制定的配置文件,通知DNS Server更改DNS配置,master dns解析執行新的master。

3)Redis Master-Slave + Configure Center(Zookeeper) + Sentinel.
基本原理和第三種方案相似,只是notification-script通知的是配置中心完成redis連接配置的修改,比如Zookeeper實現的配置中心。

4)Redis Master-Slave + Sentinel + Twemproxy + Lvs.
這種方案層次比較多,sentinel通知twemproxy進行redis m-s的配置更改。

5)Redis Cluster,目前redis3.0接近發布stable版本了。

1、基本架構圖
1.png

2、基本構建與原理
1)Keepalive + VIP : 在redis master-slave上部署keepalived、redis instance存活檢測腳本、以及告警通知腳本。
2)當redis master失效的時候,VIP從master上漂移到slave上,完成m-s角色和配置更改。
3)客戶端連接redis的參數中host設置的是VIP,整個切換過程對客戶端透明。

3、優缺點與適用場景。
優點:實現簡單,成本低。
缺點:整個集群的最大吞吐量受限于redis單實例的處理能力,除非一個應用使用多套這種Keepalive+VIP方案。
因而擴展能力較差,而且不適合目前單機部署多個redis實例的部署場景,而我們的一個物理機上至少部署8個redis實例。
目前我們DBA已經否定了這種架構,不再支持部署這種集群。
適合場景:并發請求不是很高的應用。

4、Keepalive配置和檢測腳本
下面keepalive的簡單配置、檢測和通知腳本。
1)keepalive.conf
master和slave使用相同的配置腳本,其中要注意的地方state的配置都是backup狀態,而且都是非搶占方式nopreempt。

vrrp_script chk_redis {
        script "/etc/keepalived/redis_check.sh"  
        interval 2                                      
} 
 
vrrp_instance VI_1 { 
        state BACKUP                                 
        interface bond0                             
        virtual_router_id 51 
        priority 100                      
        nopreempt
 
        authentication { 
                     auth_type PASS 
                     auth_pass redis     
        } 
        track_script { 
                chk_redis               
        } 
        virtual_ipaddress {
             10.203.31.216         
        }
 
        notify_master  "/etc/keepalived/notify.sh master" 
        notify_backup  "/etc/keepalived/notify.sh backup" 
}

2)redis_check.sh,redis實例存活檢測腳本。

當master檢測到redis處于failed狀態,將會釋放VIP,slave機器將會獲取VIP。

#!/bin/bash
REDIS_BIN='/apps/svr/redis/bin'
REDIS_MASTER_HOST='127.0.0.1'
REDIS_MASTER_PORT=6379
 
ALIVE=`$REDIS_BIN/redis-cli -h $REDIS_MASTER_HOST -p $REDIS_MASTER_PORT  PING`
 
if [ "$ALIVE" == "PONG" ]; then
  echo $ALIVE
  exit 0 
else
  echo $ALIVE
  exit 1 
fi

3)master-slave狀態切換通知腳本,包括推送告警短信。

#!/bin/bash
REDIS_BIN='/apps/svr/redis/bin'
MASTER_IP='192.168.0.216' # virtual ip
MASTER_PORT=6379
 
status=$1
echo $status
 
if [ "$status" = "master" ]
then
   # promoting slave to master
   echo " config set slave-read-only no " | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
   echo " slaveof no one "                | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
   echo " config rewrite "                | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
   # pushing simple message to mobile or email
 
elif [ "$status" = "backup" ]
then
   # degrading master to slave
   echo "config set slave-read-only yes " | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
   echo "slaveof $MASTER_IP $MASTER_PORT" | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
   echo " config rewrite "                | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
 
   # pushing simple message to mobile or email
fi
 
exit 0

notify.sh轉自:http://mdba.cn/?p=745

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/2466

(2)
s19930811s19930811
上一篇 2016-04-12
下一篇 2016-04-13

相關推薦

  • 邏輯卷管理工具lvm2

    lvm2:location Volume Manage Version 2 linux支持邏輯卷的模塊為dm模塊                        dm模塊是將一個或多個底層物理設備組織成一個邏輯設備的模塊。 在CentOS中,…

    Linux干貨 2016-03-27
  • DNS 子域授權和高級應用

    DNS 基礎主從部分 http://www.www58058.com/12395 實驗環境:     系統環境:Centos 6.7     關閉SELINUX:setenforce 0 #立即生效   (實際是寬容模式)     配置防火墻:iptables…

    Linux干貨 2016-11-15
  • 數據庫基礎

    數據庫基礎 一、數據模型 數據庫模型圖 1、層次模型、2、網狀模型、 3、關系模型二維關系: 表:就是一個關系及屬性的描述,如:學生(學好,姓名,性別,班級)       行:row, entity       列:colume,…

    Linux干貨 2016-10-19
  • 堡壘機-麒麟堡壘機動態口令使用手冊

      一.管理員部分 1.在其它-licenses菜單查看動態口令許可是否打開,如果未打開聯系廠商重新生成許可   2.找廠商生成密鑰文件,密鑰文件中包含令牌種子,在其它–動態令牌菜單將密鑰文件導入即可看到所有的令牌種子,每個令牌可以綁定給多個用戶     3.令牌綁定可以在 資源管理–…

    安全運維 2016-05-29
  • find、locate詳細解析

    文件查找 在linux系統中如果我們不知道具體的文件的具體位置,我們可以使用文件查找命令來找到我們想找的文件,linux中也有相當優秀的查找命令,(如locate、find),通常查找速度快是locate,因為它是利用數據庫查找的,所以速度很快,而find是全磁盤掃描進行查找,所以速度比較慢。 locate和find都是在文件系統上查找符合條件的文件含義。 …

    Linux干貨 2016-08-13
  • 磁盤管理之磁盤分區,主引導分區表修復

    磁盤管理: I/O Ports: I/O設備地址 一切皆文件: open(), read(), write(), close() 設備類型: 塊設備:block,存取單位“塊”,磁盤 字符設備:char,存取單位“字符”,鍵盤 設備文件:關聯至一個設備驅動程序,進而能夠跟與之對應硬件設備進行通信 設備號碼: 主設備號:major number, 標識設備類型…

    Linux干貨 2016-08-25
欧美性久久久久