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
下一篇 2015-03-06

相關推薦

  • 94-varnish

        一. Web Page Cache 相關概念

    2016-11-18
  • 第五周作業:find、cut、grep用法

    第五周作業 1、顯示當前系統上root、fedora或user1用戶的默認shell; 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:hello(); 3、使用echo命令輸出一個絕對路徑,使用grep取出其基名; 擴展:取出其路徑名  4、找出ifconfig命令結果中的1-255之間數字; …

    Linux干貨 2016-11-28
  • bash編程尾聲

    數組 變量:存儲單個元素的內存空間 數組:存儲多個元素的連續的內存空間,相當于多個變量的集合。 數組名和索引     索引:編號從0開始,屬于數值索引     注意:索引可支持使用自定義的格式,而不僅是數值格式,即為關聯索引, bash4.0版本之后開始支持。  &nb…

    Linux干貨 2016-08-25
  • 磁盤冗余陣列 RAID

    一、磁盤冗余陣列 RAID(Redundant Array of Independent Disk)     RAID是一種把多塊獨立的硬盤(物理硬盤)按不同的方式組合起來形成一個硬盤組(邏輯硬盤),從而提供比單個硬盤更高的存儲性能和提供數據備份技術。根據磁盤陳列的不同組合方式,可以將RAID分為不同的級別。 其中提高傳輸速率和…

    Linux干貨 2016-09-07
  • 馬哥教育網絡班21期第七周作業

    1、創建一個10G分區,并格式為ext4文件系統;   (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;   (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@localhost ~]#…

    Linux干貨 2016-10-09
欧美性久久久久