Memcached+keepalived+magent實現主從複製和高可用

Memcached+keepalived+magent實現主從複製和高可用

實驗介紹

memcached以前並不能直接通訊,因此memcached自己並不能完整備份全部的數據。這時候我麼可使用magent代理memcached實現主從備份,從而來保證緩存數據的完整性。算法

這中間的工做原理以下:shell

  • 數據在到達memcached服務器前會通過magent,每次寫數據到主memcached服務器,magent會同時寫到從服務器上,而且主從服務器寫的算法同樣。
  • 當主memcached服務器宕掉以後,magent會向從memcached服務器中讀取數據
  • 當memcached恢復後,magent將從新從主memcached中讀取數據,此時因爲主memcached剛恢復正常,因此在宕掉期間的數據是沒法獲取的,這也是magent的缺點。

Memcache主從複製指在主Memcached服務器上修改數據都會被同步到從服務器上,可是Memcached API客戶端是沒法判斷鏈接到哪一臺Memcached服務器的,因此須要經過keepalived設置VIP地址,提供給Memcached API客戶端以及magent鏈接訪問。vim

實驗環境

名稱 IP地址
memcached主服務器 192.168.58.135
memcached從服務器 192.168.58.132

實驗實施

配置memcached主從服務器節點(主從服務器上都要作的)

安裝memcached須要libevent的支持,因此須要先安裝libevent。先解壓libevent值指定目錄:緩存

[root@localhost mnt]# tar xf libevent-2.1.8-stable.tar.gz -C /opt/
[root@localhost mnt]# 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
#進行編譯和安裝

安裝memcached:bash

[root@localhost mnt]# tar xf memcached-1.5.6.tar.gz -C /opt/
#將軟件包解壓到指定目錄中
[root@localhost memcached-1.5.6]# ./configure --with-libevent=/usr
#配置,開啓libevent功能,後面加上上面安裝的路徑
[root@localhost memcached-1.5.6]# make && make install
#編譯和安裝

將libevent的函數模塊創建軟連接到系統能夠識別的目錄下服務器

[root@localhost lib64]# ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6

以上是主從服務器都須要安裝的軟件,magent只須要在主服務器上安裝,生成一個可執行文件,將這個文件複製到從服務器上便可。ide

[root@localhost mnt]# tar xf magent-0.5.tar.gz -C /opt/
#將magent解壓到指定目錄下
[root@localhost opt]# vim ketama.h
#修改這個文件
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
#修改文件最大值,將最後一行的#endif移動到頭兩行下面

Memcached+keepalived+magent實現主從複製和高可用

[root@localhost opt]# vim Makefile 
#修改Makefile
LIBS = -levent -lm
#這句話是鏈接函數庫,Linux的庫命名是一致的,通常爲libxxx.so,或libxxx.a,libxxx.la,那麼你要連接某個庫就用-lxxx,去掉頭lib及"."後面的so,la,a等便可。
#由於數學函數位於libm.so庫文件中(一般在/lib目錄下),-lm選項告訴編譯器,咱們程序中用到的數學函數要到這個庫文件裏找.
CFLAGS = -Wall -O2 -g
CC = gcc

Memcached+keepalived+magent實現主從複製和高可用

[root@localhost opt]# make
#生成一個可執行文件
[root@localhost opt]# ln -s /opt/magent /usr/bin
#把生成的mgent程序讓系統識別,加入到環境變量中,方便系統識別,記得創建軟連接必定要用絕對路徑
[root@localhost opt]# scp magent root@192.168.58.132:/usr/bin/
#使用scp將生成的magent文件複製到從服務器/usr/bin目錄下

Memcached+keepalived+magent實現主從複製和高可用

部署keepalived

[root@localhost opt]# yum install keepalived -y
#經過yum倉庫安裝keepalived
[root@localhost opt]# vim /etc/keepalived/keepalived.conf 
#修改keepalived.conf配置文件

Memcached+keepalived+magent實現主從複製和高可用
其餘多餘的配置直接刪除,從服務器的keepalived配置文件也要修改。
Memcached+keepalived+magent實現主從複製和高可用memcached

編寫主服務器magent腳本

[root@localhost ~]# mkdir -p /opt/shell
[root@localhost ~]# vim /opt/shell/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.58.100 -p 12000 -s 192.168.58.135:11211 -b 192.168.58.132:11211
else
pkill -9 magent
fi

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

#這個腳本意思就是一旦檢測出系統進程中有keepalived進程,就執行magent這條命令,若是沒有,則將magent進程殺死。總得來講就是,加入主服務器上沒有keepslived進程,magent就會和從服務器鏈接。
[root@localhost ~]# chmod +x /opt/shell/magent.sh 
#給腳本添加執行權限

編寫從服務器magent腳本

[root@localhost ~]# mkdir -p /opt/shell
[root@localhost ~]# vim /opt/shell/magent.sh

#!/bin/bash
K=`ip addr | grep 192.168.58.100 | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 192.168.58.100 -p 12000 -s 192.168.58.135:11211 -b 192.168.58.132:11211
else
pkill -9 magent
fi  
#從服務器的腳本意思就是一旦檢測到虛擬ip漂移到本身身上,就會執行magent這條命令,目的就是在主服務器宕掉的時候,從服務器可以正常啓動。
~

啓動主從服務器的keepalived和memcached服務,查看主服務器狀態。
Memcached+keepalived+magent實現主從複製和高可用
Memcached+keepalived+magent實現主從複製和高可用
查看從服務器狀態。函數

模擬宕機

這時候你們必定疑惑爲何主服務器的12000端口仍是開啓的呢,我認爲因爲咱們模擬宕機的方法是中止keepalived服務,因此keepalived中的檢測腳本不會再執行,因此裏面的pkill -9 magent這條命令不會再執行了。
Memcached+keepalived+magent實現主從複製和高可用
Memcached+keepalived+magent實現主從複製和高可用3d

相關文章
相關標籤/搜索