1. 程式人生 > >Memcached主從復制+keepalived架構

Memcached主從復制+keepalived架構

編譯 ln -s ali 虛擬 服務 測試 address 備份 方式

實現主從復制和高可用的方式

Memcached主從復制是指在主Mencached服務器上修改數據都會被同步到其他服務器上,MemcachedAPI客戶端是無法判斷連接到那一臺Memcached服務器,所以需要VIP地址,提供給MemcachedAPI客戶端進行連接。可以使用keepaived產生的VIP地址連接主Memcached服務器來完成,並且提供高可用架構。

環境準備
服務器 IP地址的 主要軟件
主Memcached 192.168.100.21 libevent、memcached、magent、keepalived
從Memcached 192.168.100.22 libevent、memcached、magent
Client 192.168.100.23 telnet

安裝環境包

yum -y install gcc gcc-c++ make

解壓軟件包

tar zxf memcached-1.5.9.tar.gz -C /opt/
tar zxf libevent-2.1.8-stable.tar.gz -C /opt/

編譯安裝libevent

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

編譯安裝memcached

cd memcached-1.5.9/
./configure --with-libevent=/usr
make && make install
優化啟動
ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6
//memcached自帶有復制功能,如果不建立軟連接,則啟動會失敗

在主服務器上安裝magent

magent是一個memcached代理軟件,防止單點故障,緩存代理也可以著備份

cd /opt/magent
vim ketama.h                                    //修改文件
#ifndef SSIZE_MAX                         //修改
#define SSIZE_MAX 32767            //修改
#endif                                              //末行也有一行#ndif,刪除
vi Makefile                                     //修改文件
LIBS = -levent -lm                         //此處為lm,不是一
make                                            //編譯完成之後會生成一個magent可執行文件

讓服務便於系統識別

cp /opt/magent/magent /usr/bin/
scp /opt/magent/magent [email protected]:/usr/bin/     //發送到從服務器上
主從服務器安裝keepalived
yum -y install keepalived

修改主從服務器配置文件

vim/etc/keepalived/keepalived.cof
! 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 MAGENT_HA  //自定義不要和從服務器一樣就OK
}
vrrp_script magent {
        script "/opt/shell/magent.sh" //定義一個函數,此時該腳本還未創建,要在實例外面定義
        interval 2                
}   
vrrp_instance VI_1 {
    state MASTER     //MASTER (主)BACKUP(從)
    interface ens33 //網卡
    virtual_router_id 51 //組號
    priority 100       //優先級
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
 track_script {
         magent   //應用函數
}       
    virtual_ipaddress {
        192.168.100.100   #虛擬出來了VIP
    }
}

寫主服務器shell腳本

#!/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.100 -p 12000 -s 192.186.100.21:11211 -b 192.168.100.22:11211
else
pkill -9 magent
fi
##參數解釋
-n 51200                                   #定義用戶最大連接數
-l 192.168.175.188                    #指定虛擬IP
-p 12000                                 #指定端口號
-s                                             #指定主緩存服務器
-b                                           #指定從緩存服務器
chmod +x magent.sh            #增加可執行權限

寫從服務器腳本

make /opt/shell
vim magent.sh

#!/bin/bash
K=`ip addr | grep 192.168.100.100 | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 192.168.100.100  -p 12000 -s 192.168.100.21:11211 -b 192.168.100.22:11211
else
pkill -9 magent
fi
chmod +x magent.sh            //增加可執行權限

關閉主從服務器防火墻及selinux

systemctl stop firewalld.service
setenforce 0

開啟主從服務器上keepalived

systemctl start keepalived.service
netstat -ntap | grep 12000        //端口開啟可能有點延遲,稍作等待
ipa ddr                           //查看主服務器上是否綁定VIP

技術分享圖片
技術分享圖片
主從服務器上開啟memcached

memcached -m 512k -u root -d -l 192.168.100.21 -p 11211    //主服務器
memcached -m 512k -u root -d -l 192.168.100.22 -p 11211    //從服務器
netstat -ntap | grep 11211

客戶端測試

測試連通性
yum -y install telnet
telnet 192.168.100.100 12000   //采用VIP連接

技術分享圖片

測試單點故障

systemctl stop keepalived.service  //關閉主服務器keepalived服務
ipaddr   //查看VIP是否漂移到從服務器上

技術分享圖片

Memcached主從復制+keepalived架構