超詳細搭建Memcached主主復制+Keepalived高可用架構
Memcached本身是基於內存的緩存,它的設計本身沒有冗余機制。如果一個Memcached節點失去了所有的數據,應用程序可以從數據源中再次獲取到數據,可以使用開源軟件Magent實現Memcached集群,通過Magen緩存代理,防止單點現象。緩存代理也可以做備份,可以用keepalived軟件實現高可用
實驗環境
主機名 | 操作系統 | IP地址 | 相關軟件 |
---|---|---|---|
master | CentOS_7.4_x86_64 | 192.168.100.71 | libevent-2.1.8-stable.tar.gz;memcached-1.5.6.tar.gz;magent-0.5.tar.gz |
backuper | CentOS_7.4_x86_64 | 192.168.100.72 | libevent-2.1.8-stable.tar.gz;memcached-1.5.6.tar.gz; |
client | CentOS_7.4_x86_64 | 192.168.100.73 | telnet軟件 |
搭建步驟
一、配置主機
1、安裝libevent
[root@master ~]# tar xvfz libevent-2.1.8-stable.tar.gz
[root@master ~]# cd libevent-2.1.8-stable/
[root@master libevent-2.1.8-stable]# ./configure --prefix=/usr
2、安裝memcached
[root@memcached ~]# tar xvfz memcached-1.5.6.tar.gz
[root@memcached ~]# cd memcached-1.5.6/
[root@memcached memcached-1.5.6]# ./configure --with-libevent=/usr
[root@memcached memcached-1.5.6]# make && make install
3、優化路徑
[root@master ~]# ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6
4、安裝magent
1).解壓magent
[root@master ~]# mkdir magent
[root@master ~]# tar xvfz magent-0.5.tar.gz -C magent
2).編輯ketama文件
[root@master ~]# cd magent/
[root@master magent]# vim ketama.h #編輯hash算法配制文件
#第一行添加如下參數:
#ifndef SSIZE_MAX #第1行,編輯聲明SSIZE_MAX,否則編譯會報錯
#define SSIZE_MAX 32767 #第2行,編輯參數
#endif #第3行,關閉
3).編輯Makefile文件
[root@master magent]# vim Makefile
LIBS = -levent -lm #第1行,添加"-lm"
4).編譯安裝magent
[root@master magent]# make
gcc -Wall -O2 -g -I/usr/local/libevent/include -c -o magent.o magent.c
gcc -Wall -O2 -g -I/usr/local/libevent/include -c -o ketama.o ketama.c
gcc -Wall -O2 -g -o magent magent.o ketama.o -levent -lm -L /usr/local/libevent/lib
[root@master magent]# ls
[root@master magent]# cp magent /usr/bin/ #將執行腳本放到bin目錄下,可直接執行命令
5).上傳magent執行腳本給從服務器
[root@master magent]# scp magent [email protected]:/usr/bin/
4、配置keepalived
1).安裝keepalived
[root@master ~]# yum -y install keepalived #安裝keepalived軟件
2).修改主配置文件
[root@master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak #修改之前先進行備份
[root@master ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.100.1
smtp_connect_timeout 30
router_id MAGENT_HA1
}
vrrp_script magent {
script "/opt/shell/magent.sh"
interval 2 //每2秒執行一次
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script { #觸發腳本
magent
}
virtual_ipaddress {
192.168.100.200
}
}
}
5、編輯腳本
[root@master ~]# mkdir -p /opt/shell
[root@master ~]# cd /opt/shell/
[root@master shell]# vim 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.100.200 -p 12000 -s 192.168.100.71:11211 -b 192.168.100.72:11211
else
pkill -9 magent
fi
解析:
-u:指定用戶
-n:用戶最大連接數
-l:指定虛擬IP
-p:指定虛擬IP端口號
-s:主緩存節點
-b:從緩存節點
總結:主要是為memcache做了一個集群,最終虛擬出的IP是192.168.100.200
[root@master shell]# chmod +x magent.sh #賦予執行權限
二、配置備機
1、安裝libevent、memcached
與主機配置操作相同,略…… 註意備機不需要安裝magent``
2、配置keepalived
[root@backuper ~]# yum -y install keepalived
[root@backuper ~]# cd /etc/keepalived/
[root@backuper keepalived]# cp keepalived.conf keepalived.conf.bak
[root@backuper keepalived]# scp 192.168.100.71:/etc/keepalived/keepalived.conf .
[root@backuper keepalived]# vim keepalived.conf
global_defs {
……
router_id MAGENT_HA2 #服務器名稱,區別於主機服務器名稱
}
vrrp_instance VI_1 {
state BACKUP #註意作為備機,參數為BACKUP
priority 150 #註意作為備機,活躍值要小於主機活躍值
……
3、對應的創建腳本
[root@backuper ~]# mkdir -p /opt/shell
[root@backuper ~]# cd /opt/shell/
[root@backuper shell]# vim magent.sh
#!/bin/bash
K=`ip addr | grep 192.168.100.200 | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
magent -u root -n 51200 -l 192.168.100.200 -p 12000 -s 192.168.100.71:11211 -b 192.168.100.72:11211
else
pkill -9 magent
fi
[root@backuper shell]# chmod +x magent.sh
三、啟動Keepalived服務
1、主機啟動
[root@master ~]# systemctl start keepalived.service
[root@master ~]# netstat -anpt | grep ‘12000‘
[root@master ~]# ip addr show ens33
2、備機啟動
[root@backuper ~]# systemctl start keepalived.service
[root@backuper ~]# ip addr show ens33
四、啟動Memcached服務
1、主機啟動Memcached
[root@master ~]# memcached -m 512k -u root -d -l 192.168.100.71 -p 11211
[root@master ~]# netstat -anpt | grep ‘11211‘
2、備機啟動Memcached
[root@backuper ~]# memcached -m 512k -u root -d -l 192.168.100.72 -p 11211
[root@backuper ~]# netstat -anpt | grep ‘11211‘
五、測試Memcached群集
1、客戶端寫入數據
[root@client ~]# yum -y install telnet
[root@client ~]# telnet 192.168.100.200 12000 #連接的是虛擬IP
2、查看主、備服務器數據
1).查看主機
[root@client ~]# telnet 192.168.100.71 11211
2).查看備機
3、模擬主機故障
[root@master ~]# systemctl stop keepalived.service
4、查看備機
[root@backuper ~]# ip addr
5、客戶端再次訪問
[root@client ~]# telnet 192.168.100.200 12000
超詳細搭建Memcached主主復制+Keepalived高可用架構