Memcached+keepalived+magent實現主從復制和高可用
阿新 • • 發佈:2018-07-29
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實現主從復制和高可用