1. 程式人生 > >Memcached 主主復制+ Keepalived 實現 Memcached 高可用架構集群

Memcached 主主復制+ Keepalived 實現 Memcached 高可用架構集群

作用 代理 應用 進行 rep 高可用性 val gen backup

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時會出錯

    # 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 服務器,然後可以進行數據的保存和備份數據。這樣數據就不會丟失,保存了數據完整性。
     

  • 主服務器
    # 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 [email protected]:/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服務

    # 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服務器上

Memcached 主主復制+ Keepalived 實現 Memcached 高可用架構集群