memcached 主从

简介

  由于 Memcached 自己没有防止单点的措施,因为为了保障 Memcached 服务的高可用,我们需要借助外部的工具来实现高可用的功能。本文引入 Repcached 这个工具,通过使用该工具我们可以完成 Memcached 服务的主从功能。

  Repcached 它是由日本人开发的,用来实现 Memcached 复制功能的一个工具。它所构建的主从方案是一个单主单从的方案,不支持多主多从。但是,它的特点是,主从两个节点可以互相读写,从而可以达到互相同步的效果。

  假设主节点坏掉,从节点会很快侦测到连接断开,然后它会自动切换到监听状态( listen)从而成为主节点,并且等待新的从节点加入。

  假设原来挂掉的主节点恢复之后,我们只能人工手动以从节点的方式去启动。原来的主节点并不能抢占成为新的主节点,除非新的主节点挂掉。这也就意味着,基于 Repcached 实现的 Memcached 主从,针对主节点并不具备抢占功能。

  假设从节点坏掉,主节点也会很快侦测到连接断开,然后它就会重新切换到监听状态(listen),并且等待新的从节点加入。

  假设主从节点都挂掉,则数据就丢失了!因此,这是 Repcached 的一个短板。

下载安装包

wget  http://memcached.org/files/old/memcached-1.4.13.tar.gz
wget  http://mdounin.ru/files/repcached-2.3.1-1.4.13.patch.gz
wget  https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz

tar xf memcached-1.4.13.tar.gz
tar xf libevent-2.1.8-stable.tar.gz
gzip -d repcached-2.3.1-1.4.13.patch.gz

制作docker镜像启动脚本

# cat  init.sh 
#!/bin/bash
if [ -z  ${listen_port} ];then
echo 'no listen_port';exit 101
fi
if [ -z  ${list_ip} ];then
echo 'no listen_ip';exit 102
fi
if [ -z  ${repcached_port} ];then
echo 'no repcached_port';exit 103
fi
if [ -z  ${repcached_ip} ];then
echo 'no repcached_ip';exit 104
fi

/usr/local/memcached/bin/memcached -d  -p ${listen_port} -u nobody -l ${list_ip} -x ${repcached_ip} -X ${repcached_port} -P /tmp/memcached.pid -vv ${OPTS} >/tmp/mem.log 2>&1
tail -f /tmp/mem.log

Dockerfile

安装repcached 是通过给memcached 打补丁的方式安装。

FROM ubuntu:14.04
ADD libevent-2.1.8-stable /root/libevent-2.1.8-stable
ADD memcached-1.4.13    /root/memcached-1.4.13
ADD repcached-2.3.1-1.4.13.patch /root/repcached-2.3.1-1.4.13.patch
RUN apt-get update && apt-get install -y gcc make patch
WORKDIR /root
RUN mkdir /usr/local/libevent && mkdir /usr/local/memcached
RUN cd /root/libevent-2.1.8-stable && ./configure --prefix=/usr/local/libevent && make && make install
RUN cd /root/memcached-1.4.13 && patch -p1 -i ../repcached-2.3.1-1.4.13.patch && ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent --enable-replication --enable-64bit && make && make install
ADD init.sh /init.sh
RUN chmod +x /init.sh
CMD ["/init.sh"]

生成镜像

docker build -t memcached-repcached-1.4.13:1.0 -f Dockerfile .

启动memcached 主从

192.168.100.100上面

docker run -it -d -e listen_port="11211" -e list_ip="192.168.100.100" -e repcached_ip="192.168.100.101" -e repcached_port="11212" -e OPTS="-m 100 -c 102400" --name mem-11211 --net=host memcached-repcached-1.4.13:1.0

192.168.100.101上面

docker run -it -d -e listen_port="11211" -e list_ip="192.168.100.101" -e repcached_ip="192.168.100.100" -e repcached_port="11212" -e OPTS="-m 100 -c 102400" --name mem-11211 --net=host memcached-repcached-1.4.13:1.0

原文地址:https://www.cnblogs.com/panjunbai/p/9469312.html