Memcached 主主複製+ Keepalived 實現 Memcached 高可用架構集羣

Memcached +keepalived 高可用集羣

Memcached 主主複製這種架構,在程序鏈接時不知道應該鏈接哪一個主服務器,因此須要在前端增長 VIP 地址,實現高可用架構。這裏用 Keepalived 實現,於是 Keepalived 的做用就是用來檢測 Memcached 服務器的狀態是否正常。
 
Keepalived 不斷檢測 Memcached 主服務器的11211端口,若是檢測到 Memcached 服務發生宕機或者死機等狀況,就會將 VIP 從主服務器移至從服務器,從而實現 Memcached 的高可用性。
 前端

系統環境

主機名 操做系統 IP地址 軟件包 VIP地址
Memcached1服務器 CentOS 7.4 x86_64 192.168.100.201 libevent-2.1.8-stable.tar.gz、memcached-1.5.9.tar.gz、magent-0.5.tar.gz、keepalived 192.168.100.200
Memcached2服務器 CentOS 7.4 x86_64 192.168.100.202 libevent-2.1.8-stable.tar.gz、memcached-1.5.9.tar.gz、keepalived 192.168.100.200
Client客戶端 CentOS 7.4 x86_64 192.168.100.203 Telnet  

部署服務

 

配置memcached主緩存節點和從緩存節點-----兩臺配置相同

 

# tar zxvf memcached-1.5.6.tar.gz -C /opt/
# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/
# yum install gcc gcc-c++ make -y
 
# cd /opt/libevent-2.1.8-stable
# ./configure --prefix=/usr/local/libevent
# make && make install
 
# cd /opt/memcached-1.5.6
# ./configure \
--prefix=/usr/local/memcached \
--with-libevent=/usr/local/libevent/
# make && make install
 
# ln -s /usr/local/memcached/bin/* /usr/local/bin/

 

  • 將安裝的libevent-2.1.so.6模塊創建軟連接到/usr/lib64目錄下,不然在啓動Magent時會出錯c++

    # ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6

     

    在主服務器上安裝 Magent

     

    Magent 是一款開源的 Memcached 代理軟件,使用它能夠搭建高可用性的集羣應用的 Memcached 服務 ,備份 Memcached 數據,儘管 Memcached 服務掛掉,前端也能獲取到數據,客戶端先連到 Magent 代理服務器 ,而後Magent 代理服務器 在能夠鏈接多臺 Memcached 服務器,而後能夠進行數據的保存和備份數據。這樣數據就不會丟失,保存了數據完整性。
     shell

  • 主服務器
    # wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
    # mkdir /opt/magent
    # tar zxvf magent-0.5.tar.gz -C /opt/magent
    # cd /opt/magent
  • 編譯安裝前須要先修改文件,不然會報錯
    # vim ketama.h   //修改下面的行
    #ifndef SSIZE_MAX
    #define SSIZE_MAX 32767
    #endif
     
    # vim Makefile  //添加路徑
    LIBS = -levent -lm -L/usr/local/libevent/lib 
    INCLUDE=-I/usr/local/libevent/include
     
    # make
  • 編譯後會生成一個可執行的文件,咱們把生成的magent命令讓系統識別,併發送到Memcached2服務器
    # cp magent /usr/bin/      //把生成的magent命令讓系統識別
    # scp /opt/magent/magent root@192.168.100.202:/usr/bin    //把生成的magent命令複製到memcached2服務器

     

在兩臺memcached服務器上安裝配置Keepalived

  • memcached兩臺服務器的配置不一樣處已經標註
    # yum install keepalived -y
    # vim /etc/keepalived/keepalived.conf 
    router_id MAGENT_HA               //主從不一樣 自定義
    下面刪除4行
    }
     
    //調用這個腳本每2秒檢查一次magent狀態
    vrrp_script magent {
                script "/opt/shell/magent.sh"
                interval 2
    }
    vrrp_instance VI_1 {
        state MASTER                    // 另外一臺服務器這裏是BACKUP
        interface ens33                  
        virtual_router_id 51             //虛擬路由ID ,兩臺相同
        priority 100                         //優先級  從要小於主
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 1111
        }
    track_script {              //調用上面定義的腳本
                magent
    }
     
    virtual_ipaddress {                       //定義VIP地址
    192.168.100.200
    }
    }
  • 在兩臺服務器上建立magent.sh腳本便於keepalived調用
  • memcached1服務器
    # mkdir -p /opt/shell/
    # cd /opt/shell/
    # vi magent.sh
     
    #!/bin/bash
    K=`ps -ef | grep keepalived | grep -v grep | wc -l`
    if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 192.168.100.200 -p 12000 -s 192.168.100.201:11211 -b 192.168.100.202:11211
    else
    pkill -9 magent
    fi
  • 腳本添加執行權限,並開啓keepalived服務vim

    # chmod +x magent.sh
    # systemctl start keepalived.service
    # ip addr    //查看VIP的IP地址
  • 腳本選項解釋
    -n 51200 //定義用戶最大鏈接數
    -l    //指定虛擬IP
    -p 12000  //指定端口號
    -s //指定主緩存服務器
    -b //指定從緩存服務器
  • memcached2服務器
    # mkdir -p /opt/shell/
    # cd /opt/shell/
    # vi magent.sh
     
    #!/bin/bash
    K=`ip addr | grep 192.168.100.200 | grep -v grep | wc -l`
    if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 192.168.100.200 -p 12000 -s 192.168.100.201:11211 -b 192.168.100.202:11211
    else
    pkill -9 magent
    fi
  • 腳本添加執行權限,並開啓keepalived服務
    # chmod +x magent.sh
    # systemctl start keepalived.service

     
     

    在客戶端上測試

  • 測試主主複製

    咱們在客戶端上使用Telnet登陸VIP地址並寫入數據,在兩臺memcached緩存服務器上能夠看到數據都已經同步緩存

  • 測試高可用性

    將memcached1服務器宕機,登陸memcached2服務器,查看IP地址,此時VIP已經漂移到memcached2服務器上bash

相關文章
相關標籤/搜索