1. 程式人生 > >Memcached主主復制+Keepalived高可用架構(內含所有源碼包)

Memcached主主復制+Keepalived高可用架構(內含所有源碼包)

systemctl all mark ins fine 構圖 gre ESS 判斷

初步了解memcached主主復制:

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高可用架構(內含所有源碼包)