memcached實現主主復制和keepalive高可用方式
實驗環境
服務器 | IP地址 | 操作系統 | 主要軟件 |
---|---|---|---|
memcached1 | 192.168.144.122 | centos7.3 | libevent2.1.8、memcached1.5.6、keepalive、telnet、magent0.5 |
memcached2 | 192.168.144.129 | centos7.3 | libevent、memcached、keepalive、telnet |
客戶端 | 192.168.144.141 | centos7.3 | LAMP架構或telnet |
memcached1的配置
tar zvxf memcached-1.5.6.tar.gz -C /opt/
tar zvxf libevent-2.1.8-stable.tar.gz -C /opt/
- 1、首先安裝libevent,指定安裝路徑即可,memcached2上相同操作
cd /opt/libevent-2.1.8-stable
./configure --prefix=/usr/local/libevent
make && make install
- 2、安裝memcached,memcached2上相同操作
cd /opt/memcached-1.5.6
./configure \--prefix=/usr/local/memcached \
--with-libevent=/usr/local/libevent/ #需要跟上事件通知庫模塊make && make install
- 3、讓memcached命令可以讓系統識別,memcached2上相同操作
ln -s /usr/local/memcached/bin/* /usr/local/bin/
- 4、將編譯安裝的libevent-2.1.so.6模塊復制到/usr/lib64,否則在啟動帶有復制功能的memcached服務時會報錯。
- memcached2上相同操作。
ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6
- 5、memcached1安裝magent,並且將生成的命令發送給memcached2,並在每一臺服務器上該命令可以被系統識別。
tar magent-0.5.tar.gz -C /opt/
cd /opt
vi ketama.h
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767 //前兩行帶#的改成這樣
#endif //位置上調
systemctl stop firewalld.service
setenforce 0
vi Makefile
LIBS = -levent -lm -L/usr/local/libevent/lib //註意libevent的安裝路徑,否則make會報錯
INCLUDE = -I/usr/local/libevent/include
- 6、生成magent程序
- 此處需要註意,在magent生成可執行程序之前需要關閉防火墻,不然無法make。
make
- 7、讓magent程序為系統識別
cp magent /usr/local/bin/
- 8、將magent程序發送給memcached2,讓其系統識別
scp magent [email protected]:/usr/bin/
兩臺服務器安裝keepalived
- m1與m2兩臺服務器keepalive配置文件不同地方已經註明。
yum install keepalved -y
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.200.1
smtp_connect_timeout 30
router_id 001 //兩臺服務器不同
}
vrrp_script magent { //添加主主數據復制實例,函數名為magent,只要keepalive啟動就可啟動復制
script "/opt/shell/magent.sh" //設置magent啟動腳本,註意後面腳本位置要與之相同
interval 2
}
vrrp_instance VI_1 {
state MASTER //從為BACKUP
interface ens33 //網卡為ens33
virtual_router_id 51 //與從服務器需要區別開
priority 100 //從服務器優先級應當比主的低
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script { //調用函數執行
magent
}
virtual_ipaddress {
192.168.144.188 //設置虛擬IP
}
}
memcached1創建主主復制監控腳本
cd /opt/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.144.188 -p 12000 -s 192.168.144.122:11211 -b 192.168.144.129:11211
else
pkill -9 magent
fi
-n 51200 //定義用戶最大連接數
-l 192.168.175.188 //指定虛擬IP
-p 12000 //指定端口號
-s //指定主緩存服務器
-b //指定從緩存服務器
- 增加執行權限。
chmod +x /opt/shell/magent.sh
- memcached1上開啟keepalive服務,以及memcache服務
memcached -d -m 32m -p 11211 -u root
systemctl start keepalived.service
memcached2創建主主復制監控腳本
vi magent.sh #註意腳本位置要跟配置文件中對應,不然調用執行
#!/bin/bash
K=`ip addr | grep 192.168.144.188 | grep -v grep | wc -l`
if [ $K -gt 0 ]; then
magent -u root -n 51200 -l 192.168.144.188 -p 12000 -s 192.168.144.122:11211 -b 192.168.144.129:11211
else
pkill -9 magent
fi
- 增加執行權限。
chmod +x /opt/shell/magent.sh
- memcached2上開啟keepalive服務,以及memcache服務
memcached -d -m 32m -p 11211 -u root
systemctl start keepalived.service
在客戶端測試
- 在客戶端訪問虛擬IP及虛擬端口
telnet 192.168.144.188 12000
- 在客戶端寫入數據
- 在兩臺服務器上進入本身數據庫,數據被自動同步復制
add username 0 0 7
1234567
- 模擬故障,關閉m1的keepalive,客戶端無感知,虛擬IP仍可登陸,且讀寫數據
systemctl stop keepalived.service
memcached實現主主復制和keepalive高可用方式