1. 程式人生 > >Memcached+keepalived+magent實現主從復制和高可用

Memcached+keepalived+magent實現主從復制和高可用

flags gre makefile 主從復制 http ffffff 緩存服務 oca color

Memcached+keepalived+magent實現主從復制和高可用

實驗介紹

memcached之前並不能直接通信,所以memcached本身並不能完整備份所有的數據。這時候我麽可以使用magent代理memcached實現主從備份,從而來保證緩存數據的完整性。

這中間的工作原理如下:

  • 數據在到達memcached服務器前會經過magent,每次寫數據到主memcached服務器,magent會同時寫到從服務器上,並且主從服務器寫的算法一樣。
  • 當主memcached服務器宕掉之後,magent會向從memcached服務器中讀取數據
  • 當memcached恢復後,magent將重新從主memcached中讀取數據,此時由於主memcached剛恢復正常,所以在宕掉期間的數據是無法獲取的,這也是magent的缺點。

Memcache主從復制指在主Memcached服務器上修改數據都會被同步到從服務器上,但是Memcached API客戶端是無法判斷連接到哪一臺Memcached服務器的,所以需要通過keepalived設置VIP地址,提供給Memcached API客戶端以及magent連接訪問。

實驗環境

名稱 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:

[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只需要在主服務器上安裝,生成一個可執行文件,將這個文件復制到從服務器上即可。

[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移動到頭兩行下面

技術分享圖片

[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

技術分享圖片

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

技術分享圖片

部署keepalived

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

技術分享圖片
其他多余的配置直接刪除,從服務器的keepalived配置文件也要修改。
技術分享圖片

編寫主服務器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服務,查看主服務器狀態。
技術分享圖片
技術分享圖片
查看從服務器狀態。

模擬宕機

這時候大家一定疑惑為什麽主服務器的12000端口還是開啟的呢,我認為由於我們模擬宕機的方法是停止keepalived服務,所以keepalived中的檢測腳本不會再執行,所以裏面的pkill -9 magent這條命令不會再執行了。
技術分享圖片
技術分享圖片

Memcached+keepalived+magent實現主從復制和高可用