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 22:51
下一篇 2016-04-13 14:02

相關推薦

  • 游戲運維工程師

    愛樂盟互動為深圳市政府評定的深圳市重點文化企業,同時為廣東省高科技產業商會常務理事單位,注冊資金人民幣1000萬元。公司的原創大型MMORPG網游《王者傳說2》為深圳市政府重點支持的網游項目,《王者傳說2》將全面領先于國內的同類產品,成為業界新標準的重要網游產品??! 《王者傳說2》已進入產品研發的重要階段。除《王者傳說2》,愛樂盟也已經啟動了數款全新大型網游…

    Linux干貨 2016-10-19
  • 文本處理工具初探

    作為一個系統管理員,文本處理功能是經常使用的,熟練地使用各種文本工具有助于提高工作效率,從繁忙的工作中早點解脫。下面就來介紹處理文本的常用命令。 處理文本的命令大致分為:        查看文件內容:cat、less、more       …

    Linux干貨 2016-08-07
  • 馬哥教育網絡班第21期+第二周課程作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 命令 選項 解釋 cp -r 遞歸復制 copy -f 強行復制,若已存在則覆蓋 -i 交互式 -p 保留屬主屬組權限時間戳 -L(不加也可以,默認) (源文件為鏈接)復制指向連接的文件 -P (源文件為鏈接) 以鏈接的方式復制過來 -a 歸檔復制,常用備份 命令 選項 …

    Linux干貨 2016-07-17
  • shell腳本編寫-4

    1、while 循環的特殊用法(遍歷文件的每一行) while read line; do 循環體 done < /PATH/FROM/SOMEFILE 依次讀取/PATH/FROM/SOMEFILE 文件中的每一行,且將行賦值給變量line 練習:掃描/etc/passwd 文件每一行,如發現GECOS 字段為空,則填充用戶名和單位電話為629856…

    Linux干貨 2016-09-01
  • 三劍客之sed

    sed命令:Stream EDitor 流編輯器 sed命令的工作流程:     sed會復制原文件中的一行或者多行,逐行進行操作。首先會將該行的內容放入到模式空間內,在模式空間內進行定界或者正則表達式匹配操作。     a.如果該行內容不符合正則表達式或定界,該內容則被判斷為No,進行標準輸出。 &nbsp…

    Linux干貨 2016-08-08
  • Ansible Playbook Roles 和 Include 聲明-手稿

    Edit Ansible Playbook Roles 和 Include 聲明 Ansible Playbook Roles 和 Include 聲明 1. Introduction 2. Task Include Files And Encouraging Reuse 3. Roles 4. Role Default Variables 5. Role …

    Linux干貨 2016-03-28
欧美性久久久久