Memcached 主主復制+ Keepalived 實現 Memcached 高可用架構集群
阿新 • • 發佈:2018-08-15
作用 代理 應用 進行 rep 高可用性 val gen backup Memcached +keepalived 高可用集群
Memcached 主主復制這種架構,在程序連接時不知道應該連接哪個主服務器,所以需要在前端增加 VIP 地址,實現高可用架構。這裏用 Keepalived 實現,因而 Keepalived 的作用就是用來檢測 Memcached 服務器的狀態是否正常。
Keepalived 不斷檢測 Memcached 主服務器的11211端口,如果檢測到 Memcached 服務發生宕機或者死機等情況,就會將 VIP 從主服務器移至從服務器,從而實現 Memcached 的高可用性。
系統環境
主機名 | 操作系統 | IP地址 | 軟件包 | VIP地址 |
---|---|---|---|---|
Memcached1服務器 | CentOS 7.4 x86_64 | 192.168.100.201 | libevent-2.1.8-stable.tar.gz、memcached-1.5.9.tar.gz、magent-0.5.tar.gz、keepalived | 192.168.100.200 |
Memcached2服務器 | CentOS 7.4 x86_64 | 192.168.100.202 | libevent-2.1.8-stable.tar.gz、memcached-1.5.9.tar.gz、keepalived | 192.168.100.200 |
Client客戶端 | CentOS 7.4 x86_64 | 192.168.100.203 | Telnet |
部署服務
配置memcached主緩存節點和從緩存節點-----兩臺配置相同
# tar zxvf memcached-1.5.6.tar.gz -C /opt/ # tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/ # yum install gcc gcc-c++ make -y # cd /opt/libevent-2.1.8-stable # ./configure --prefix=/usr/local/libevent # make && make install # cd /opt/memcached-1.5.6 # ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/ # make && make install # ln -s /usr/local/memcached/bin/* /usr/local/bin/
-
將安裝的libevent-2.1.so.6模塊建立軟鏈接到/usr/lib64目錄下,否則在啟動Magent時會出錯
# ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6
在主服務器上安裝 Magent
Magent 是一款開源的 Memcached 代理軟件,使用它可以搭建高可用性的集群應用的 Memcached 服務 ,備份 Memcached 數據,盡管 Memcached 服務掛掉,前端也能獲取到數據,客戶端先連到 Magent 代理服務器 ,然後Magent 代理服務器 在可以連接多臺 Memcached 服務器,然後可以進行數據的保存和備份數據。這樣數據就不會丟失,保存了數據完整性。
- 主服務器
# wget http://memagent.googlecode.com/files/magent-0.5.tar.gz # mkdir /opt/magent # tar zxvf magent-0.5.tar.gz -C /opt/magent # cd /opt/magent
- 編譯安裝前需要先修改文件,否則會報錯
# vim ketama.h //修改下面的行 #ifndef SSIZE_MAX #define SSIZE_MAX 32767 #endif # vim Makefile //添加路徑 LIBS = -levent -lm -L/usr/local/libevent/lib INCLUDE=-I/usr/local/libevent/include # make
- 編譯後會生成一個可執行的文件,我們把生成的magent命令讓系統識別,並發送到Memcached2服務器
# cp magent /usr/bin/ //把生成的magent命令讓系統識別 # scp /opt/magent/magent [email protected]:/usr/bin //把生成的magent命令復制到memcached2服務器
在兩臺memcached服務器上安裝配置Keepalived
- memcached兩臺服務器的配置不同處已經標註
# yum install keepalived -y # vim /etc/keepalived/keepalived.conf router_id MAGENT_HA //主從不同 自定義 下面刪除4行 } //調用這個腳本每2秒檢查一次magent狀態 vrrp_script magent { script "/opt/shell/magent.sh" interval 2 } vrrp_instance VI_1 { state MASTER // 另一臺服務器這裏是BACKUP interface ens33 virtual_router_id 51 //虛擬路由ID ,兩臺相同 priority 100 //優先級 從要小於主 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { //調用上面定義的腳本 magent } virtual_ipaddress { //定義VIP地址 192.168.100.200 } }
- 在兩臺服務器上創建magent.sh腳本便於keepalived調用
- memcached1服務器
# mkdir -p /opt/shell/ # cd /opt/shell/ # vi 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.201:11211 -b 192.168.100.202:11211 else pkill -9 magent fi
-
腳本添加執行權限,並開啟keepalived服務
# chmod +x magent.sh # systemctl start keepalived.service # ip addr //查看VIP的IP地址
- 腳本選項解釋
-n 51200 //定義用戶最大連接數 -l //指定虛擬IP -p 12000 //指定端口號 -s //指定主緩存服務器 -b //指定從緩存服務器
- memcached2服務器
# mkdir -p /opt/shell/ # cd /opt/shell/ # vi 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.201:11211 -b 192.168.100.202:11211 else pkill -9 magent fi
- 腳本添加執行權限,並開啟keepalived服務
# chmod +x magent.sh # systemctl start keepalived.service
在客戶端上測試
- 測試主主復制
我們在客戶端上使用Telnet登錄VIP地址並寫入數據,在兩臺memcached緩存服務器上可以看到數據都已經同步
- 測試高可用性
將memcached1服務器宕機,登錄memcached2服務器,查看IP地址,此時VIP已經漂移到memcached2服務器上
Memcached 主主復制+ Keepalived 實現 Memcached 高可用架構集群