1. 程式人生 > >memcached實現主主復制和keepalive高可用方式

memcached實現主主復制和keepalive高可用方式

ali 上進 endif alived 函數 相同 pri face 軟件

實驗拓撲

技術分享圖片

實驗環境

服務器 IP地址 操作系統 主要軟件
memcached1 192.168.144.122 centos7.3 libevent2.1.8、memcached1.5.6、keepalive、telnet、magent0.5
memcached2 192.168.144.129 centos7.3 libevent、memcached、keepalive、telnet
客戶端 192.168.144.141 centos7.3 LAMP架構或telnet

memcached1的配置

tar zvxf memcached-1.5.6.tar.gz -C /opt/

tar zvxf libevent-2.1.8-stable.tar.gz -C /opt/

  • 1、首先安裝libevent,指定安裝路徑即可,memcached2上相同操作

cd /opt/libevent-2.1.8-stable
./configure --prefix=/usr/local/libevent
make && make install

  • 2、安裝memcached,memcached2上相同操作

cd /opt/memcached-1.5.6
./configure \

--prefix=/usr/local/memcached \
--with-libevent=/usr/local/libevent/ #需要跟上事件通知庫模塊

make && make install

  • 3、讓memcached命令可以讓系統識別,memcached2上相同操作

ln -s /usr/local/memcached/bin/* /usr/local/bin/

  • 4、將編譯安裝的libevent-2.1.so.6模塊復制到/usr/lib64,否則在啟動帶有復制功能的memcached服務時會報錯。
  • memcached2上相同操作。

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

  • 5、memcached1安裝magent,並且將生成的命令發送給memcached2,並在每一臺服務器上該命令可以被系統識別。

tar magent-0.5.tar.gz -C /opt/
cd /opt
vi ketama.h

#ifndef SSIZE_MAX
#define SSIZE_MAX 32767  //前兩行帶#的改成這樣
#endif    //位置上調

systemctl stop firewalld.service
setenforce 0
vi Makefile

LIBS = -levent -lm -L/usr/local/libevent/lib   //註意libevent的安裝路徑,否則make會報錯
INCLUDE = -I/usr/local/libevent/include
  • 6、生成magent程序
  • 此處需要註意,在magent生成可執行程序之前需要關閉防火墻,不然無法make。

make

  • 7、讓magent程序為系統識別

cp magent /usr/local/bin/

  • 8、將magent程序發送給memcached2,讓其系統識別

scp magent [email protected]:/usr/bin/

兩臺服務器安裝keepalived

  • m1與m2兩臺服務器keepalive配置文件不同地方已經註明。

yum install keepalved -y
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id 001    //兩臺服務器不同
}

vrrp_script magent {                    //添加主主數據復制實例,函數名為magent,只要keepalive啟動就可啟動復制
        script "/opt/shell/magent.sh"   //設置magent啟動腳本,註意後面腳本位置要與之相同
        interval 2
}

vrrp_instance VI_1 {
    state MASTER   //從為BACKUP
    interface ens33    //網卡為ens33
    virtual_router_id 51   //與從服務器需要區別開
    priority 100       //從服務器優先級應當比主的低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script {              //調用函數執行
            magent
}
    virtual_ipaddress {
        192.168.144.188    //設置虛擬IP
    }
}

memcached1創建主主復制監控腳本

cd /opt/shell #沒有該目錄,需要創建
vim 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.144.188 -p 12000 -s 192.168.144.122:11211 -b 192.168.144.129:11211
else
pkill -9 magent
fi

-n 51200 //定義用戶最大連接數
-l 192.168.175.188 //指定虛擬IP
-p 12000 //指定端口號
-s //指定主緩存服務器
-b //指定從緩存服務器

  • 增加執行權限。

chmod +x /opt/shell/magent.sh

  • memcached1上開啟keepalive服務,以及memcache服務

memcached -d -m 32m -p 11211 -u root
systemctl start keepalived.service

memcached2創建主主復制監控腳本

vi magent.sh #註意腳本位置要跟配置文件中對應,不然調用執行

#!/bin/bash
K=`ip addr | grep 192.168.144.188 | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 192.168.144.188 -p 12000 -s 192.168.144.122:11211 -b 192.168.144.129:11211
else
pkill -9 magent
fi  
  • 增加執行權限。

chmod +x /opt/shell/magent.sh

  • memcached2上開啟keepalive服務,以及memcache服務

memcached -d -m 32m -p 11211 -u root
systemctl start keepalived.service

在客戶端測試

  • 在客戶端訪問虛擬IP及虛擬端口

telnet 192.168.144.188 12000

  • 在客戶端寫入數據
  • 在兩臺服務器上進入本身數據庫,數據被自動同步復制

add username 0 0 7
1234567

  • 模擬故障,關閉m1的keepalive,客戶端無感知,虛擬IP仍可登陸,且讀寫數據

systemctl stop keepalived.service

memcached實現主主復制和keepalive高可用方式