简介
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
[root@master libevent-2.1.8-stable]# make && make install
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 root@192.168.100.72:/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 { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc 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