Memcached主從複製+keepalived高可用架構

實現主從複製和高可用的方式

Memcached主從複製是指在主Mencached服務器上修改數據都會被同步到其餘服務器上,MemcachedAPI客戶端是沒法判斷鏈接到那一臺Memcached服務器,因此須要VIP地址,提供給MemcachedAPI客戶端進行鏈接。可使用keepaived產生的VIP地址鏈接主Memcached服務器來完成,而且提供高可用架構。linux

環境準備

  • 系統版本:Centos7
  • 服務器規劃
服務器 IP地址 主要軟件
主Memcached 172.16.10.24 libevent、memcached、magent、keepalived
從Memcached 172.16.10.22 libevent、memcached、keepalived
Client 172.16.10.21 telnet

項目所用源碼包可自行到官方網站下載,或者使用我下載好的項目用安裝包c++

搭建Memcached服務器

Memcached服務器在兩臺服務器上都須要搭建,方式徹底相同,在安裝memcached服務器是需先安裝libevent,而後再安裝memcached。shell

安裝環境包

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代理軟件,防止單點故障,緩存代理也能夠着備份,經過客戶端鏈接緩存代理服務器,緩存代理服務器鏈接緩存服務器。vim

解壓軟件包

mkdir /opt/magent
tar zxf magent-0.5.tar.gz -C /opt/magent

編譯安裝magent

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

Memcached主從複製+keepalived高可用架構

讓服務便於系統識別

cp /opt/magent/magent /usr/bin/
scp /opt/magent/magent root@172.16.10.22:/usr/bin/     //發送到從服務器上

主從服務器安裝keepalived

yum -y install keepalived

修改主從服務器配置文件

! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id MAGENT_HA     //router_id自定義,可是要確保主從一致
}
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 {
        172.16.10.188       //定義vtp自定義,只要不是在使用中的地址便可
    }
}                           //配置文件下面還有多餘的內容此時就能夠直接刪除
//從配置文件與主不相同的地方我已經指出來了,其餘的都同樣

寫主服務器shell腳本

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

寫從服務器shell腳本

mkdir /opt/shell
vim  /opt/shell/magent.sh
#!/bin/bash
K=`ip addr | grep 172.16.10.188 | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 172.16.10.188 -p 12000 -s 172.16.10.24:11211 -b 172.16.10.22:11211
else
pkill -9 magent
fi

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

systemctl stop firewalld.service
setenforce 0

開啓主從服務器上keepalived

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

Memcached主從複製+keepalived高可用架構
Memcached主從複製+keepalived高可用架構

在主從服務器上開啓memcached

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

Memcached主從複製+keepalived高可用架構

客戶端測試

測試連通性

yum -y install telnet
telnet 172.16.10.188 12000   //採用VIP鏈接

測試主從複製

鏈接VIP寫入數據,查看兩臺服務器上是否都已經有了數據centos

[root@centos]# telnet 172.16.10.188 12000
Trying 172.16.10.24...
Connected to 172.16.10.24.
Escape character is '^]'.
set qwe 0 0 3
123
STORED
鏈接主從服務器
telnet 172.16.10.24 11211
telnet 172.16.10.22 11211
[root@centos]# telnet 172.16.10.24 11211
Trying 172.16.10.24...
Connected to 172.16.10.24.
Escape character is '^]'.
get user
VALUE user 0 3
123
END

測試單點故障

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

Memcached主從複製+keepalived高可用架構

相關文章
相關標籤/搜索