1. 程式人生 > >Centos7 下實現 memcached + keepalived 高可用群集

Centos7 下實現 memcached + keepalived 高可用群集

緩存服務 支持 pad mkdir .so check def shel 安裝

memcached + keepalived 高可用群集

memcached介紹

Memcached是一套開源的高性能分布式內存對象緩存系統,它將所有的數據都存
儲在內存中,因為在內存中會統一維護一張巨大的Hash表,所以支持任意存儲類型的
數據。很多網站通過使用 Memcached提高網站的訪問速度,尤其是對於大型的需要頻
繁訪問數據的網站。
Memcached是典型的C/S架構,因此需要安裝 Memcached服務端與 Memcached
API客戶端。 Memcached服務端是用C語言編寫的,而 Memcached API客戶端可以用
任何語言來編寫,如PHP、 Python、Perl等,並通過 Memcached協議與 Memcached服

務端進行通信。

memcached主主復制+keepalived高可用框架介紹

Memcached服務器修改數據都會被同步到
另外一臺,但是 Memcached API客戶端是無法判斷連接到哪一臺 Memcached服務
器的,所以需要設置VP地址,提供給 Memcached Apl客戶端進行連接。可以使用
keepalived產生的VP地址連接主 Memcached服務器,並且提供高可用架構。

因為 Memcached主主復制這種架構,在程序連接時不知道應該連接哪個主服務
器,所以需要在前端加VP地址,實現高可用架構。這裏用 Keepalived實現,因而
Keepalived的作用是用來檢測 Memcached服務器的狀態是否正常。

Keepalived不斷檢測 Memcached主服務器的11211端口,如果檢測到 Memcached
服務發生宕機或者死機等情況,就會將VP從主服務器移至從服務器,從而實現
Memcached的高可用性。

實驗準備

一臺主服務器
需要安裝 magent memcached libevent keepalived
一臺從服務器
需要安裝 memcached libevent keepalived

實驗步驟

在主服務器和從服務器上安裝memcached 和 libevent

tar xzvf memcached-1.5.6.tar.gz
tar xzvf libevent-2.1.8-stable.tar.gz

cd libevent-2.1.8
./configure --prefix=/usr    ##指定安裝路徑

make && make install   

cd memcached-1.5.6
./configure --with-libevent=/usr

make && make install

ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6    ##主服務器上magent服務需要這個模塊

在主服務器上安裝magent

mkdir /magent
tar xzvf magent-0.5.tar.gz

cd /magent
vim ketama.h
修改
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767

vim Makefile
LIBS = -levent -lm

make

cp magent /usr/bin   ##方便系統識別命令

在主服務器上把magent 復制到從服務器上

yum install openssh-clients
scp magent [email protected]:/usr/bin

在主服務器上安裝keepalived

vim /etc/keepalived/keepalived.conf
router—_id MAGENT_HA
刪除
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0

定義新函數
vrrp_script magent{
script"/opt/shell/magent.sh"
 interval 2       ##時間間隔
}

修改vrrp_instance下面
INTERFACE ens33
添加
track_script {
    magent
}        ## 使用新函數

定義一個虛擬IP
virtual_ipaddress {
    192.168.x.x
    }

下面多余的部分可以全部刪除

在從服務器上安裝keepalived

yum install keepalived 

從主服務器上把配置腳本復制到從服務器上
scp /etc/keepalived/keepalived.conf [email protected].:/etc/keepalived/keepalived.conf

vim /etc/keepalived
router_id MAGENT_HB
state BACKUP     ##從服務器
virtual_router_id 52   ##ID不同
priortity 90     ##優先級

在主服務器上配置 magent腳本

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.x.x -p 12000 -s 192.168.x.x:11211 -b 192.168.x.x:11211
else
pkill -9 magent
fi

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

chmod +x magent.sh

在從服務器上配置 magent腳本

mkdir /opt/shell
 vim /opt/shell/magent.sh
 #!/bin/bash
 K=`ip addr | grep 192.168.x.x(虛擬IP) | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
        magent -u root -n 51200 -l 192.168.x.x -p 12000 -s 192.168.x.x:11211 -b 192.168.x.x:11211
else
pkill -9 magent
fi  

chmod +x magent.sh

主從服務器開啟keepalived服務

systemctl start keepalived.service

netstat -ntap |grep 12000

如果有12000端口表示服務開啟成功

登錄memcached服務器

memcached -m 512k -u root -d -l 192.168.xx 主 -p  11211
memcached -m 512k -u root -d -l 192.168.x.x 從 -p  11211

netstat -ntap |grep 11211

有11211端口表示服務開啟成功

測試

在第三臺服務器上安裝 telnet
yum install telnet -y

telnet 192.168.x.x(虛擬IP) 12000
add username 0 0 7
1234567
Stored 
quit
## 通過虛擬IP登錄 並創建一個用戶

telnet 192.168.x.x(主/從服務器) 11211
get username
VALUE username 0 7
1234567
END
quit
##  在主從服務器上都能得到這個數據

在主服務器上關掉 memcached
pkill -9 memcached

192.168.x.x(虛擬IP) 12000
add username 0 0 7
1234567
Stored 
quit
## 通過虛擬IP 寫入數據

telnet 192.168.x.x(從服務器) 11211
get username
VALUE username 0 7
1234567
END
quit
## 從服務器依然能讀取到

至此 memcached+keepalived 高可用群集完成

Centos7 下實現 memcached + keepalived 高可用群集