Memcached 主主複製 + Keepalived 高可用架構【附上原理】

目錄:

1·Memcached 主主複製概念
2·Memcached 高可用的實現
3·案例部署
4·總結
前端


Memcached 主主複製概念

(1)主主複製概念:c++

Memcached 主主複製是指在任意一臺 Memcached 服務器修改數據都會被同步到另一臺,可是 Memcached API 客戶端沒法判斷鏈接到那一臺 Memcached 服務器,全部須要設置 VIP 地址,提供給 Memcached API 客戶端進行鏈接。shell


(2)文章推薦:vim

知道了主主複製,那麼須要瞭解 Memcached 是什麼,還有一些最基本的狀況,好比:
1) Memcached 功能
2)Memcached 特徵
3)Memcached 儲存方式
能夠看看上篇文章Memcached 高性能緩存對象緩存


Memcached 高可用的實現

(1)怎麼實現 Memcached 的高可用服務器

1)這裏就須要牽扯到主主複製的概念了,由於Memcached 主主複製這種架構,在程序鏈接的時候不會知道應該鏈接哪個主服務器,因此須要在前端加上 VIP 地址,實現高可用架構。這裏能夠用 Keepalived 實現,因此說,Keepalived 的做用就是來檢測 Memcached 服務器的狀態是否正常。架構


2)Keepalived 會不斷的檢測 Memcached 主服務器的 11211端口,若是檢測到 Memcached 服務發生故障或宕機等狀況,就會將 VIP 從主服務器上轉移到從服務器,從而實現 Memcached 的高可用性。tcp


3)Memcached 高可用架構圖
Memcached 主主複製 + Keepalived 高可用架構【附上原理】分佈式


案例部署說明

(1)部署環境文字說明:ide

1)由於這篇文章是演示 Memcached 的主主複製+ Keepalived 的高可用架構,因此這裏不須要安裝 Memcached API 。請提早安裝編譯環境:gcc 、gcc-c++ 、 make ,文章中不會提示安裝!


2)整個環境部署所須要的源碼包將會無償提供,須要的請點擊:Memcached 高可用源碼包,密碼:sxsr


(2)部署環境表格說明:

名稱 IP 地址 操做系統 主要軟件包
Memcached 主1 192.168.154.128 CenOS 7.4 libevent-2.1.8-stable.tar.gz 、memcached-1.5.6.tar.gz 、 magent-0.5.tar.gz
Memcached 主2 192.168.154.129 CenOS 7.4 libevent-2.1.8-stable.tar.gz 、memcached-1.5.6.tar.gz
Linux 系統 192.168.154.130 CenOS 7.4 telnet 用於測試

開始部署

(1)在 Memcached 主1解壓、安裝 所須要的源碼包
1)關閉防火牆

[root@localhost memcached]# systemctl stop firewalld.service
[root@localhost memcached]# setenforce 0

2)解壓、安裝源碼包 libevent-2.1.8-stable.tar.gz

[root@localhost memcached]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/
[root@localhost memcached]# cd /opt/libevent-2.1.8-stable
[root@localhost libevent-2.1.8-stable]# ./configure --prefix=/usr ---(指定安裝路徑)
[root@localhost libevent-2.1.8-stable]# make && make install
[root@localhost libevent-2.1.8-stable]# ln -s /usr/lib/libevent-2.1.so.6  /usr/lib64/libevent-2.1.so.6 --(這裏必須將模塊作一個軟鏈接,由於啓動 Memcached 時須要在/usr/lib64下尋找libevent-2.1.so.6模塊)

3)解壓、安裝源碼包 memcached-1.5.6.tar.gz

[root@localhost memcached]# tar zxvf memcached-1.5.6.tar.gz -C /opt
[root@localhost memcached]# cd /opt/memcached-1.5.6
[root@localhost memcached-1.5.6]# ./configure --with-libevent=/usr ---(這裏安裝須要指定 libevent 的安裝路徑)
[root@localhost memcached-1.5.6]# make && make install

4)安裝、解壓軟件包 magent-0.5.tar.gz

[root@localhost ~]# mkdir /opt/magent
[root@localhost memcached]# tar xvf magent-0.5.tar.gz -C /opt/magent
將會得出如下文件:
ketama.c
magent.c
ketama.h
Makefile
[root@localhost memcached]# cd /opt/magent
[root@localhost magent]# vim ketama.h  ---(如今沒有 make 文件,須要修改才能得出 make 執行文件)
修改以下:
#ifndef SSIZE_MAX 
#define SSIZE_MAX 32767

Memcached 主主複製 + Keepalived 高可用架構【附上原理】

[root@localhost magent]# vim Makefile ---(繼續修改文件)
修改內容:
LIBS = -levent -lm

Memcached 主主複製 + Keepalived 高可用架構【附上原理】

[root@localhost magent]# make ----(文件修改完成後就能夠 make)
[root@localhost magent]# cp magent /usr/bin

(2)在 Memcached 主2 解壓、安裝 所須要的源碼包
1)關閉防火牆

[root@localhost memcached]# systemctl stop firewalld.service
[root@localhost memcached]# setenforce 0

2)解壓、安裝源碼包 libevent-2.1.8-stable.tar.gz

[root@localhost memcached]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/
[root@localhost memcached]# cd /opt/libevent-2.1.8-stable
[root@localhost libevent-2.1.8-stable]# ./configure --prefix=/usr ---(指定安裝路徑)
[root@localhost libevent-2.1.8-stable]# make && make install
[root@localhost libevent-2.1.8-stable]# ln -s /usr/lib/libevent-2.1.so.6  /usr/lib64/libevent-2.1.so.6 --(這裏必須將模塊作一個軟鏈接,由於啓動 Memcached 時須要在/usr/lib64下尋找libevent-2.1.so.6模塊)

3)解壓、安裝源碼包 memcached-1.5.6.tar.gz

[root@localhost memcached]# tar zxvf memcached-1.5.6.tar.gz -C /opt
[root@localhost memcached]# cd /opt/memcached-1.5.6
[root@localhost memcached-1.5.6]# ./configure --with-libevent=/usr ---(這裏安裝須要指定 libevent 的安裝路徑)
[root@localhost memcached-1.5.6]# make && make install

4)把 主1 的 magent 文件,遠程拷貝一份到 主 2 ,這裏須要在 主1 上操做

[root@localhost magent]# yum install telnet -y ----(安裝遠程鏈接工具)
[root@localhost magent]# scp magent root@192.168.154.129:/usr/bin ---(發送給主 2 一份 )

(3)在 主 1 、主 2 上同時安裝 Keepalived 軟件
1)安裝 Keepalived 、修改 Keepalived 配置文件

[root@localhost ~]# yum install keepalived -y
[root@localhost ~]# vim /etc/keepalived/keepalived.conf  ---(修改Keepalived主配置文件)
! Configuration File for keepalived

vrrp_script magent {                              #定義函數
        script "/opt/shell/magent.sh"           #臨時定義的路徑,因此還須要手動建立
        interval 2                                        #每隔兩秒檢測
}
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 Master_A         #定義id名稱,主 2  能夠任意修改
     如下幾行須要刪除
}   

vrrp_instance VI_1 {
        state MASTER                                 #定義狀態,主 2  定義爲 BANKUP
        interface ens33                                #WANG
    virtual_router_id 51
    priority 100                                      #優先級,主 2 要低於 主 1
    advert_int 1
    authentication {
        auth_type PASS                          #身份驗證,這裏須要和 主2 一致
        auth_pass 1111
    }

track_script {                                          #開始調用函數
        magent
}

    virtual_ipaddress {                            #定義VIP 漂移地址
        192.168.154.188
    }
}
如下全部配置刪除

2)編寫觸發式腳本

[root@localhost ~]# mkdir /opt/shell   ----(這裏路徑須要和 Keepalived 主配置文件里路徑一致)

[root@localhost ~]# vim /opt/shell/magent.sh
內容以下:
K=$(ps -ef | grep keepalived | grep -v grep | wc -l)
if [ $K -gt 0 ];then
magent -u root -n 51200 -l 192.168.154.188 -p 12000 -s  192.168.154.128:11211 -b 192.168.154.129:11211
else
pkill -9 magent
fi

對以上參數說明:
-n 51200 //定義用戶最大鏈接數
-l 192.168.154.188 //指定虛擬ip
-p 12000 //指定端口號
-s //指定主緩存服務器
-b //指定從緩存服務器

[root@localhost shell]# scp magent.sh root@192.168.154.129:/opt/shell ----(發送給 主 2 一份,就不用在 主2 上寫了)


3)給與腳本執行權限、並啓動 Keepalived 服務

[root@localhost ~]# chmod +x /opt/shell/magent.sh
[root@localhost keepalived]# scp keepalived.conf root@192.168.154.129:/etc/keepalived  ----(發送配置文件給 主 2)
[root@localhost keepalived]# systemctl start keepalived.service  ---(啓動 keepalived 服務)
[root@localhost keepalived]# netstat -antp | grep 12000 ----(查看啓動端口)
tcp        0      0 192.168.154.188:12000   0.0.0.0:*               LISTEN      51911/magent

4)啓動 memcached 服務

[root@localhost ~]# memcached -m 512k -u root -d -l 192.168.154.128 -p 11211
[root@localhost ~]# netstat -antp | grep 11211 -----(查看端口)
tcp        0      0 192.168.154.128:11211   0.0.0.0:*               LISTEN      53856/memcached

5)在 主 2 上啓動 Keepalived 與 Memcached 服務、建立目錄

[root@localhost ~]# mkdir /opt/shell
[root@localhost shell]# systemctl start keepalived.service 
[root@localhost shell]# netstat -antp | grep 12000
tcp        0      0 192.168.154.188:12000   0.0.0.0:*               LISTEN      50521/magent 
[root@localhost ~]# memcached -m 512k -u root -d -l 192.168.154.129 -p 11211
[root@localhost ~]# netstat -antp | grep 11211

(4)服務搭建完成,開始在客戶端測試主主複製:
1)客戶端鏈接漂移地址寫入數據

[root@localhost ~]# yum install telnet -y
[root@localhost ~]# telnet 192.168.154.188 12000 -----(遠程鏈接VIP 地址 端口號 爲 12000)
開始寫入數據:
add username 0 0 6
123456
STORED

2)客戶端鏈接 主1 的 真實 IP 地址 端口 11211 ,查看數據

[root@localhost ~]# telnet 192.168.154.128 12000
get username  -----(查看數據)
VALUE username 0 6   ----(寫入的數據存在)
123456
END

以下圖:
Memcached 主主複製 + Keepalived 高可用架構【附上原理】


3)客戶端鏈接 主 2 的真實 IP 地址 端口 11211, 查看數據

[root@localhost ~]# telnet 192.168.154.129 11211
get username
VALUE username 0 6
123456
END

以下圖:
Memcached 主主複製 + Keepalived 高可用架構【附上原理】


(5)開始驗證,Keepalived 的高可用:
[root@localhost shell]# systemctl stop keepalived.service ------(中止主1 keepalived 服務)
[root@localhost ~]# telnet 192.168.154.188 12000 ----(客戶端再次鏈接漂移地址,若是能鏈接成功,高可用成功)
[root@localhost ~]# ip addr ----(在 主 2 上查看漂移地址)
以下圖:
Memcached 主主複製 + Keepalived 高可用架構【附上原理】

結論:

1·Memcached 是分佈式內存對象緩存系統,由於全部數據都存儲在內存中,從而經常使用於網站加速2·Memcached 分佈式實現不是在服務端實現而是在客戶端實現的3·Memcached 能夠經過 Keepalived 實現 Memcached 服務的高可用性。

相關文章
相關標籤/搜索