本文共 2341 字,大约阅读时间需要 7 分钟。
基于swarm 构建magent的memcached 集群:
Magent 是一款开源的 Memcached 代理服务器软件,使用它可以搭建高可用性的集群应用的 Memcached 服务 ,备份 Memcached 数据,尽管 Memcached 服务挂掉,前端也能获取到数据,客户端先连到 Magent 代理服务器 ,然后Magent 代理服务器 在可以连接多台 Memcached 服务器,然后可以进行数据的保存和备份数据。这样数据就不会丢失,保存了数据完整性。
1、构建magent镜像:
安装Magent
wget 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:7ADD magent /tmp/magentRUN 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:v1memcached使用公版镜像。
使用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: memcachedports:'12002:11211'
memcached2:
image: memcachedports:#####
部署:
docker stack deploy -c magent.yml magentCreating network magent_magent
Creating service magent_magentCreating service magent_memcached1Creating service magent_memcached2测试验证:
Trying 10.211.121.75...
Connected to 10.211.121.75.Escape character is '^]'.set key 0 0 3qqqSTOREDget keyVALUE key 0 3qqqENDquitConnection closed by foreign host.Trying 10.211.121.75...
Connected to 10.211.121.75.Escape character is '^]'.get keyVALUE key 0 3qqqENDquitConnection closed by foreign host.Trying 10.211.121.75...
Connected to 10.211.121.75.Escape character is '^]'.get keyVALUE key 0 3qqqENDquitConnection closed by foreign host.测试情况基本满足需求,遗留问题是stack中:
#command: .... -s memcached1:11211 -b memcached2:11211 service name无法作为入口使用。欢迎交流沟通:
QQ: 249016681转载于:https://blog.51cto.com/devops9527/2056760