基于swarm 构建magent的memcached 集群:
Magent 是一款开源的 Memcached 代理服务器软件,使用它可以搭建高可用性的集群应用的 Memcached 服务 ,备份 Memcached 数据,尽管 Memcached 服务挂掉,前端也能获取到数据,客户端先连到 Magent 代理服务器 ,然后Magent 代理服务器 在可以连接多台 Memcached 服务器,然后可以进行数据的保存和备份数据。这样数据就不会丢失,保存了数据完整性。
1、构建magent镜像:
安装Magent
wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
tar -zxvf magent-0.5.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
在ketama.h或magent.c开头添加
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
把调整好后的文件夹直接add到镜像中。如下为Dockerfile 内容:
Dockerfile:
########################################
FROM centos:7
ADD magent /tmp/magent
RUN yum install -y gcc make libevent-devel.x86_64 && yum clean all && cd /tmp/magent/ && /sbin/ldconfig && make && cp magent /usr/bin/
CMD magent -u root -l 0.0.0.0 -p 12000 -s 1.1.1.1:11211 -b 1.1.1.2:11211
#这里的-s仅供参考。
########################################
构建镜像:
docker build . -t 10.211.121.26/memcache/magent:v1
提交到私有仓库:
docker push 10.211.121.26/memcache/magent:v1
memcached使用公版镜像。
使用stack部署:
magent.yml 文件:
#####
version: '3.2'
services:
magent:
image: '10.211.121.26/memcache/magent:v1'
ports:
-
'12001:12000'
#command: magent -u root -D -v -l 0.0.0.0 -p 12000 -s memcached1:11211 -b memcached2:11211
#使用service name做为入口一直无法正常连接,没找到原因,在magent容器内部能正常访问memcached1:11211。
command: 'magent -u root -D -v -l 0.0.0.0 -p 12000 -s 10.211.121.75:12002 -b 10.211.121.75:12003'memcached1:
image: memcached
ports: -
'12002:11211'
memcached2:
image: memcached
ports: - '12003:11211'
#####
部署:
docker stack deploy -c magent.yml magent
Creating network magent_magent
Creating service magent_magent
Creating service magent_memcached1
Creating service magent_memcached2
测试验证:
telnet 10.211.121.75 12001
Trying 10.211.121.75...
Connected to 10.211.121.75.
Escape character is '^]'.
set key 0 0 3
qqq
STORED
get key
VALUE key 0 3
qqq
END
quit
Connection closed by foreign host.
telnet 10.211.121.75 12002
Trying 10.211.121.75...
Connected to 10.211.121.75.
Escape character is '^]'.
get key
VALUE key 0 3
qqq
END
quit
Connection closed by foreign host.
telnet 10.211.121.75 12003
Trying 10.211.121.75...
Connected to 10.211.121.75.
Escape character is '^]'.
get key
VALUE key 0 3
qqq
END
quit
Connection closed by foreign host.
测试情况基本满足需求,遗留问题是stack中:
#command: .... -s memcached1:11211 -b memcached2:11211 service name无法作为入口使用。
欢迎交流沟通:
QQ: 249016681