Memcached主主復制+Keepalived高可用架構(內含所有源碼包)
Memcached主主復制是指在任意一臺memcached服務器修改數據都會被同步到另外一臺,但是memcached API客戶端是無法判斷連接到哪一臺memcached服務器的,所以需要設置VIP地址,提供給memcached API客戶端進行連接。可以使用keepalived產生的VIP地址連接主memcached服務器,並且提供高可用架構。
Memcached的復制功能支持多個memcached之間進行相互復制(雙向復制,主備都是可讀可寫的),可以解決memcached的容災問題。
Memcached主主復制+Keepalived高可用架構
因為memcached主主復制這種架構,在程序連接時不知道應該連接哪個主服務器,所以需要在前端加上VIP地址,實現高可用架構。這裏用Keepalived實現,因而Keepalived作用是用來檢測memcached服務器的狀態是否正常。
Keepalived不斷檢測memcached主服務器的11211端口,如果檢測到memcached服務器發生故障,就會將VIP從主服務器移至從服務器,從而實現memcached的高可用性。
下面為memcached高可用結構圖
下面我通過實驗進行說明
實驗環境:
軟件包鏈接:https://pan.baidu.com/s/1fBNcsyrqNxxlORg8TyJk1g
提取碼:hx7g
一、在主節點上進行配置
關閉防火墻
systemctl stop firewalld.service
setenforce 0
安裝編譯環境
yum install gcc gcc-c++ -y
解壓所需安裝包
tar zxvf libevent-2.1.8-stable.tar.gz -C /opt
tar zxvf memcached-1.5.6.tar.gz -C /opt
因為magenta下的文件需要進行更改,所以單獨建一個目錄用來解壓
tar zxvf magent-0.5.tar.gz -C /opt/magent/ #解壓過後便會出現以下四個文件
ketama.c
magent.c
ketama.h
Makefile
編譯並且安裝libevent
cd /opt/libevent-2.1.8-stable/
./configure --prefix=/usr
make && make install
編譯並且安裝memcached,需要指明libevent安裝路徑
cd ../memcached-1.5.6/
./configure --with-libevent=/usr
make && make install
對magent目錄下的ketama.h進行配置
cd ../magent/
vim ketama.h
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767 #將開頭兩句進行更改
對magent目錄下的Makefile進行配置
vim Makefile
LIBS = -levent -lm #在開頭這句話的後面加上-lm
文件配置完成後執行make
make
gcc -Wall -O2 -g -c -o magent.o magent.c
gcc -Wall -O2 -g -c -o ketama.o ketama.c
gcc -Wall -O2 -g -o magent magent.o ketama.o -levent -lm
將magent目錄下配置好的文件復制到從服務器上的/usr/bin目錄下,同時主服務器也要把該目錄放到/usr/bin目錄下,好讓系統識別。接著安裝openssh-clients這個工具,不然無法使用scp命令
yum install openssh-clients -y
cp magent /usr/bin/
scp magent [email protected]:/usr/bin/
安裝keepalived軟件並編輯主服務器的keepalived配置文件
yum install keepalived -y
vim /etc/keepalived/keepalived.conf
在該配置文件中,除了保留第一個實例外,余下的122行可以全部刪除
創建腳本
mkdir /opt/shell #註意這個路徑,要和keepalived配置文件中指明的路徑一致
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.199.188 -p 12000 -s 192.168.199.129:11211 -b 192.168.199.128:11211
else
pkill -9 magent
fi
賦予腳本執行權限
chmod +x /opt/shell/magent.sh
開啟keepalived服務
systemctl start keepalived.service
查看12000這個端口,這個端口啟動時間會稍微慢一些,如果成功開啟這個虛擬端口說明服務啟動成功
netstat -ntap | grep 12000
查看虛擬端口
ip addr
二、在從節點上進行安裝,註意從節點是不需要安裝magent
關閉防火墻
systemctl stop firewalld.service
setenforce 0
安裝編譯環境
yum install gcc gcc-c++ -y
解壓軟件包
tar zxvf libevent-2.1.8-stable.tar.gz -C /opt
tar zxvf memcached-1.5.6.tar.gz -C /opt
編譯並且安裝libevent
cd /opt/libevent-2.1.8-stable/
./configure --prefix=/usr
make && make install
編譯並且安裝memcached
cd ../memcached-1.5.6/
./configure --with-libevent=/usr
make && make install
安裝keepalived工具
yum install keepalived -y
因為在主節點上已經對keepalived配置文件進行了配置,所以這裏只需要將主服務器上的配置文件復制過來稍作修改,在這之前需要先將從服務器的配置文件重命名,不然會有沖突
cd /etc/keepalived/
mv keepalived.conf keepalived.conf.bk
scp [email protected]:/etc/keepalived/keepalived.conf ./
vim keepalived.conf
創建腳本,同樣這裏要註意路徑
mkdir /opt/shell
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.199.188 -p 12000 -s 192.168.199.129:11211 -b 192.168.199.128:11211
else
pkill -9 magent
fi
賦予腳本執行權限
chmod +x /opt/shell/magent.sh
開啟服務
systemctl start keepalived.service
查看端口
netstat -ntap | grep 12000
查看虛擬IP
ip addr
在主從服務器上分別開啟memcached服務
memcached -m 512k -u root -d -l 192.168.199.129 -p 11211 #先在主服務器上開啟
netstat -ntap | grep 11211 #查看端口memcached -m 512k -u root -d -l 192.168.199.128 -p 11211 #在從服務器上開啟
netstat -ntap | grep 11211 #查看端口
三、測試
客戶端:
yum install telnet -y
telnet 192.168.199.188 12000
主節點:
yum install telnet -y
telnet 192.168.199.129 11211
在主節點上可以看到剛剛所創建的數據
從節點:
yum install telnet -y
telnet 192.168.199.128 11211
在從服務器上同樣可以看到這條數據,說明兩臺服務器之間已經實現了主主復制
關閉主節點的keepalived
systemctl stop keepalived.service
可以看到,關閉keepalived服務後,虛擬端口也就消失了
再次在客戶端上對數據進行查看,可以發現並沒有什麽影響,所以這也體現了該架構的高可用性
Memcached主主復制+Keepalived高可用架構(內含所有源碼包)