Redis基于keepalived的高可用實踐

接著上一章節來:

Redis基于keepalived的高可用實現

方案拓撲圖

Redis基于keepalived的高可用實踐

測試方案

1.       手動關閉AppM keepalived進程確認keepalived主從變化,AppS1是否變更為主

2.       開啟keepalived,手動關閉 AppM redis進程確認ipvsadm ip池是否剔除AppM

3.       開啟AppM redis進程,確認AppM是否變更為主

環境準備

服務器信息

Redis基于keepalived的高可用實踐

配置服務器host

Manager機器上配置好hosts后通過ansible下發到所有應用服務器

Redis基于keepalived的高可用實踐

# ansible app -m copy -a "src=/etc/hosts dest=/etc/hosts owner=root group=root mode=0644 backup=yes"

//抽查對應服務器確認host無誤后繼續

安裝配置keepalived

//安裝keepalived ipvsadm

# ansible app -m command -a 'yum install keepalived ipvsadm -y'

//分發配置文件

# ansible AppM -m copy -a 'src=/data/ansible/config/keepalived/keepalived.conf-redis-Mrds dest=/etc/keepalived/keepalived.conf backup=yes'
# ansible apps -m copy -a 'src=/data/ansible/config/keepalived/keepalived.conf-redis-Srds dest=/etc/keepalived/keepalived.conf backup=yes'

//登錄AppS2
AppS3
修改priority

//運行keepalived

# ansible app -m command -a 'service keepalived restart'
# ansible app -m command -a 'pidof keepalived'

Redis基于keepalived的高可用實踐

//ip

Redis基于keepalived的高可用實踐

測試

1.       手動關閉AppM keepalived進程確認keepalived主從變化,AppS1是否變更為主

Redis基于keepalived的高可用實踐

Redis基于keepalived的高可用實踐

a>     Vip資源已切換至AppS1,但同時我們也發現redis主從并沒有切換

2.       開啟keepalived,手動關閉 AppM redis進程確認ipvsadm ip池是否剔除AppM

Redis基于keepalived的高可用實踐

3.       開啟AppM redis進程,確認AppM是否變更為主

Redis基于keepalived的高可用實踐

Redis會立刻同步服務到ip

小總

a>     Keepalived相對heartbeat要輕量簡單,ipvsadm也由keepalived協助完成

b>     Keepalivedredis應用場景需多mastermater互為同步,

c>      Keepalived的響應速度極快,異常進程或實例恢復后都能迅速發現并實施既定措施

d>     想通過redis自帶的sentinelkeepalived結果會有些難度,也不建議

附件

keepalived.conf-redis-Srds

global_defs {
   notification_email {
       lisongtao@ihuilian.com
   }
   notification_email_from   sa@ihuilian.com
   smtp_server smtp.exmail.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL  ##自定義的字符串
}

###在哪里找到自定義配置規范
#vrrp_script chk_nginx_down {   #定義可以手動控制狀態的腳本
#    script "killall -0 nginx"
#    interval 1                    #檢查時間間隔
#    weight - 13                   #如果檢測失敗,優先級-13
#}


vrrp_script chk_redis_down {   #定義可以手動控制狀態的腳本
    script "killall -0 redis-server"
    interval 1                    #檢查時間間隔
    weight -2                   #如果檢測失敗,優先級-13
}

vrrp_instance VI_1 {
    state BACKUP ###MASTER/BACKUP必須大寫,且當MASTER恢復時,會自動恢復為MASTER狀態
    interface eth0
    virtual_router_id 51  ###同一個vrrp使用相同的vrrp,整個vrrp內唯一
    priority 99   ###數字越大優先級越高,且要MASTER要高于SLAVE,和sentinel恰好相反...>O<
    advert_int 1   ###Timeout時長秒為單位
    authentication {   ###MASTER和SLAVE密碼相同方可正常通信
        auth_type pass
        auth_pass huilian
    }
    virtual_ipaddress { ###每個地址占一行,不能指定子網掩碼,與lvs客戶端設定的VIP一致
        192.168.1.200
        #192.168.200.17
        #192.168.200.18
    }

    ###跟global_defs中定義的vrrp_script chk_nginx_down對應
   #track_script {     #引用定義的腳本
   #   chk_nginx_down
   #}

    track_script {     #引用定義的腳本
       chk_redis_down
    }


    #notify_master "/etc/keepalived/notify.sh master"
    #notify_backup "/etc/keepalived/notify.sh backup"
    #notify_fault  "/etc/keepalived/notify.sh fault"

}

virtual_server 192.168.1.200  6379{  ###IP和vrrp_instance中定義的vip需一致,IP  PORT
    delay_loop 6    ###健康檢查時間/秒
    #lb_algo wlc    ###負載均衡調度算法,常用rr/wlc
    lb_algo rr      ###負載均衡調度算法,常用rr/wlc
    lb_kind DR      ###負載均衡轉發規則,  DR,NAT,TUN3
    nat_mask 255.255.255.0
    #persistence_timeout 50   ###會話保持時長
    protocol TCP   ###協議類型轉發

    real_server 192.168.1.36 6379{   ###real server IP PORT
        weight 1   ###數值越大,權重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒無響應,則超時
            nb_get_retry 3          #表示重試次數
            delay_before_retry 3    #表示重試間隔
            connect_port 6379         #表示重試間隔
        }

    }
    real_server  192.168.1.37 6379{
        weight 1   ###數值越大,權重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒無響應,則超時
            nb_get_retry 3          #表示重試次數
            delay_before_retry 3    #表示重試間隔
            connect_port 6379         #表示重試間隔
        }
    }
    real_server  192.168.1.38 6379{
        weight 1   ###數值越大,權重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒無響應,則超時
            nb_get_retry 3          #表示重試次數
            delay_before_retry 3    #表示重試間隔
            connect_port 6379         #表示重試間隔
        }

    }

    real_server  192.168.1.39 6379{
        weight 1   ###數值越大,權重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒無響應,則超時
            nb_get_retry 3          #表示重試次數
            delay_before_retry 3    #表示重試間隔
            connect_port 6379         #表示重試間隔
        }

    }


}

keepalived.conf-redis-Mrds

global_defs {
   notification_email {
       lisongtao@ihuilian.com
   }
   notification_email_from   sa@ihuilian.com
   smtp_server smtp.exmail.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL  ##自定義的字符串
}

###在哪里找到自定義配置規范
#vrrp_script chk_nginx_down {   #定義可以手動控制狀態的腳本
#    script "killall -0 nginx"
#    interval 1                    #檢查時間間隔
#    weight - 13                   #如果檢測失敗,優先級-13
#}


vrrp_script chk_redis_down {   #定義可以手動控制狀態的腳本
    script "killall -0 redis-server"
    interval 1                    #檢查時間間隔
    weight -2                   #如果檢測失敗,優先級-13
}

vrrp_instance VI_1 {
    state MASTER    ###MASTER/BACKUP必須大寫,且當MASTER恢復時,會自動恢復為MASTER狀態
    interface eth0
    virtual_router_id 51  ###同一個vrrp使用相同的vrrp,整個vrrp內唯一
    priority 100   ###數字越大優先級越高,且要MASTER要高于SLAVE,和sentinel恰好相反...>O<
    advert_int 1   ###Timeout時長秒為單位
    authentication {   ###MASTER和SLAVE密碼相同方可正常通信
        auth_type pass
        auth_pass huilian
    }
    virtual_ipaddress { ###每個地址占一行,不能指定子網掩碼,與lvs客戶端設定的VIP一致
        192.168.1.200
        #192.168.200.17
        #192.168.200.18
    }

    ###跟global_defs中定義的vrrp_script chk_nginx_down對應
   #track_script {     #引用定義的腳本
   #   chk_nginx_down
   #}

    track_script {     #引用定義的腳本
       chk_redis_down
    }


    #notify_master "/etc/keepalived/notify.sh master"
    #notify_backup "/etc/keepalived/notify.sh backup"
    #notify_fault  "/etc/keepalived/notify.sh fault"

}

virtual_server 192.168.1.200  6379{  ###IP和vrrp_instance中定義的vip需一致,IP  PORT
    delay_loop 6    ###健康檢查時間/秒
    #lb_algo wlc    ###負載均衡調度算法,常用rr/wlc
    lb_algo rr      ###負載均衡調度算法,常用rr/wlc
    lb_kind DR      ###負載均衡轉發規則,  DR,NAT,TUN3
    nat_mask 255.255.255.0
    #persistence_timeout 50   ###會話保持時長
    protocol TCP   ###協議類型轉發

    real_server 192.168.1.36 6379{   ###real server IP PORT
        weight 1   ###數值越大,權重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒無響應,則超時
            nb_get_retry 3          #表示重試次數
            delay_before_retry 3    #表示重試間隔
            connect_port 6379         #表示重試間隔
        }

    }
    real_server  192.168.1.37 6379{
        weight 1   ###數值越大,權重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒無響應,則超時
            nb_get_retry 3          #表示重試次數
            delay_before_retry 3    #表示重試間隔
            connect_port 6379         #表示重試間隔
        }
    }
    real_server  192.168.1.38 6379{
        weight 1   ###數值越大,權重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒無響應,則超時
            nb_get_retry 3          #表示重試次數
            delay_before_retry 3    #表示重試間隔
            connect_port 6379         #表示重試間隔
        }

    }

    real_server  192.168.1.39 6379{
        weight 1   ###數值越大,權重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒無響應,則超時
            nb_get_retry 3          #表示重試次數
            delay_before_retry 3    #表示重試間隔
            connect_port 6379         #表示重試間隔
        }

    }


}

下章節預告:

twemproxy + keepalived 實現redis的分布式高可用

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

(0)
stanleystanley
上一篇 2015-03-04 17:41
下一篇 2015-03-06 10:40

相關推薦

  • Linux簡要發展史

    目錄 Linux簡述 Linux之父 Linux標志 企鵝的來源 Tux的來源 歷史 Unix GNU BSD Minix Linux 主要特性 Linux內核版本 Linux發行版 Linux簡述 ·         Linux是一套自由加開放源代碼的類Unix操作系統,誕生于…

    Linux干貨 2016-10-18
  • 搭建私有CA服務器

       CA(Certificate Authority)證書頒發機構主要負責證書的頒發、管理以及歸檔和吊銷。證書內包含了擁有證書者的姓名、地址、電子郵件帳號、公鑰、證書有效期、發放證書的CA、CA的數字簽名等信息。證書主要有三大功能:加密、簽名、身份驗證。下面來看一下自建CA的過程    一、建立CA服務器 &nbsp…

    Linux干貨 2016-03-14
  • 馬哥網絡班第21期-第二周作業毛豆

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。     文件管理命令:cp、mv、rm     cp:      比如:cp -a /etc/*$.d /tmp/magedu.com     mv:      …

    Linux干貨 2016-07-22
  • N26-肉肉-第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 常用文件管理命令有cp,mv,rm  cp :copy        -i:交互式復制,覆蓋之前提醒用戶確認;         &n…

    Linux干貨 2017-01-03
  • 任務計劃和本地系統的默認郵件

    一、前言 二、本地mail的使用方法 三、at /batch 四、cron 五、小結   一、前言 linux 中執行任務計劃有三種命令:at ,batch ,cron.其中,at,batch 是一次性執行,而crontab,則是周期性執行; 作業執行完成后,會通過郵件通知給作業提交者;因此,以下就從郵件說起。 二、郵件服務 Centos ,默認會…

    Linux干貨 2015-05-13
  • 馬哥教育網絡班21期+第2周課程練習

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 目錄及文件命令 pwd:打印當前工作路徑(絕對路徑),并且有相應的環境變量PWD表示。 cd:切換目錄 ~用戶家目錄 ..當前目錄的父目錄 .當前目錄 -上次所在的目錄。 ls:查看目錄下內容,常用選項 -a 列出目錄下所有文件和目錄;-d 只顯示目錄本身屬性信息;-h 文件大小單…

    Linux干貨 2016-07-17
欧美性久久久久