zoukankan      html  css  js  c++  java
  • 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
    
    
  • 相关阅读:
    getElementsByTagName 与 $(élement)的区别
    php面向对象学习笔记
    使用php添加定时任务
    JS中数组Array的用法
    大陆居民身份证真伪校验
    安卓 日常问题 工作日志15
    安卓 日常问题 工作日志14
    安卓 日常问题 工作日志13
    安卓 日常问题 工作日志12
    安卓 日常问题 工作日志11
  • 原文地址:https://www.cnblogs.com/panjunbai/p/9469312.html
Copyright © 2011-2022 走看看