zoukankan      html  css  js  c++  java
  • Memcached repcached 高可用

    Memcached + repcached 高可用环境

    repcached 就是一个让memcached的机器能够互为主从,前端可以加一台HAProxy,后端两台memcached互为主从后,写入任何一点都会同步到另外一边.
    由于 Memcached 自己没有防止单点的措施,因为为了保障 Memcached 服务的高可用,我们需要借助外部的工具来实现高可用的功能。
    本文引入 Repcached 这个工具,通过使用该工具我们可以完成 Memcached 服务的主从功能。
    Repcached 用来实现 Memcached 复制功能的一个工具。它所构建的主从方案是一个单主单从的方案,不支持多主多从。
    但是,它的特点是,主从两个节点可以互相读写,从而可以达到互相同步的效果。
    假设主节点坏掉,从节点会很快侦测到连接断开,然后它会自动切换到监听状态( listen)从而成为主节点,并且等待新的从节点加入。
    假设原来挂掉的主节点恢复之后,我们只能人工手动以从节点的方式去启动。原来的主节点并不能抢占成为新的主节点,除非新的主节点挂掉。这也就意味着,基于 Repcached 实现的 Memcached 主从,针对主节点并不具备抢占功能。
    假设从节点坏掉,主节点也会很快侦测到连接断开,然后它就会重新切换到监听状态(listen),并且等待新的从节点加入。
    假设主从节点都挂掉,则数据就丢失了!因此,这是 Repcached 的一个短板,不过后期我们可以通过结合其它的工具来弥补这个缺点。
    OK,简单介绍到这里。下面我们通过实验来看,基于 Repcached 的 Memcached 主从架构是如何部署,以后如何测试和管理的。

    安装memcached 和依赖:

    yum install libevent libevent-devel memcached -y
    
    wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
    
    [root@srv-3 ~]# rpm -ql memcached
    /etc/sysconfig/memcached          # 配置文件
    /usr/bin/memcached                # 可执行文件
    /usr/bin/memcached-tool
    /usr/lib/systemd/system/memcached.service   # 启动脚本
    /usr/share/doc/memcached-1.4.15
    /usr/share/doc/memcached-1.4.15/AUTHORS
    /usr/share/doc/memcached-1.4.15/CONTRIBUTORS
    /usr/share/doc/memcached-1.4.15/COPYING
    /usr/share/doc/memcached-1.4.15/ChangeLog
    /usr/share/doc/memcached-1.4.15/NEWS
    /usr/share/doc/memcached-1.4.15/README.md
    /usr/share/doc/memcached-1.4.15/protocol.txt
    /usr/share/doc/memcached-1.4.15/readme.txt
    /usr/share/doc/memcached-1.4.15/threads.txt
    /usr/share/man/man1/memcached-tool.1.gz
    /usr/share/man/man1/memcached.1.gz
    
    
    # 修改memcached 配置文件:
    [root@srv-3 ~]# vim /etc/sysconfig/memcached 
    PORT="11211"                  # 端口
    USER="memcached"              # 启动用户
    MAXCONN="4096"                # 最大连接数
    CACHESIZE="1024"              # 最大使用的内存
    OPTIONS=""                    # 其他参数
    
    

    解压并部署replications:

    tar xvf memcached-1.2.8-repcached-2.2.tar.gz
    cd memcached-1.2.8-repcached-2.2
     ./configure --prefix=/data/soft/repcached --enable-replication
    make                        # 这一步可能会出错 按照下面的解决办法
    make install 
    
    #  发现错误:
    config.status: executing depfiles commands
    [root@srv-3 memcached-1.2.8-repcached-2.2]# make
    gcc -DHAVE_CONFIG_H -I.  -DNDEBUG   -g -O2 -MT memcached-memcached.o -MD -MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f 'memcached.c' || echo './'`memcached.c
    memcached.c: In function ‘add_iov’:
    memcached.c:696:30: error: ‘IOV_MAX’ undeclared (first use in this function)
             if (m->msg_iovlen == IOV_MAX ||        #  错误提示在这里
                                  ^
    memcached.c:696:30: note: each undeclared identifier is reported only once for each function it appears in
    
    解决问题:
    vim  memcached.c    # 56 57 58 把57行去掉 改成下面这样既可.     
    
    # /* FreeBSD 4.x doesn't have IOV_MAX exposed. */
    #ifndef IOV_MAX
    #define IOV_MAX 1024
    #endif
    
    
    
    #  启动memcahed
       *** 每台机器都不能启动memcahed 11211,否则会产生冲突导致高可用版本无法启动.  ***
       *** 直接按照下面的命令行启动高可用版本的memcached 即可占用的事 16000 和11211 端口 ***
    2.1.1 )  启动 10.10.5.12 上的replications:
    /data/soft/repcached/bin/memcached -d -m 2048  -p 11211 -u memcached -c 4096  -x 10.10.5.13 -X 16000
    
    2.1.2 )  启动 10.10.5.13 上的replications:
    /data/soft/repcached/bin/memcached -d -m 2048  -p 11211 -u memcached -c 4096  -x 10.10.5.12 -X 16000
    
    参数解释:
    -d      后台运行
    -m      使用多大的内存
    -p      占用端口
    -u      启动用户
    -c      允许的连接数
    -x      对端的IP地址
    -X      探测对端监控端口
    
    

    验证是否可以同步:

    # 先搞个脚本:
    3.1 )  安装这3个软件python3 + pip3 + python-memcahed 
    yum install python3 -y
    pip3 install python-memcached
    
    
    3.2 ) 批量的在其中一台memcached 里面添加数据,
    [root@srv-3 ~]# cat memcache_1.py 
    #!/usr/bin/env python3 
    import memcache
    m = memcahce.Client(['10.10.5.13:11211'],debug=True)
    for i in range(100):
        m.set("key%d" % i,"v%d" % i)
        ret = m.get('key%d' % i)
        print(ret)
    
    
    3.3 ) 在13 的memcached 上添加了100个数据,在5.12 上查看一下是否有数据同步过来:
    
    [root@srv-2 bin]# telnet 10.10.5.12 11211
    Trying 10.10.5.12...
    Connected to 10.10.5.12.
    Escape character is '^]'.
    get key79
    VALUE key79 16 3
    v79
    END
    get key80
    VALUE key80 16 3
    v80
    
    ****** 以上的key证明我们已经成功的获取了KEY信息,证明2台机器的memcache 是可以同的。
    
    
    
    然后修改一下代码里面的10.10.5.13 到 10.10.5.12 重新添加进去900个KEY
    [root@srv-3 ~]# cat memcache_1.py 
    #!/usr/bin/env python3 
    import memcache
    m = memcahce.Client(['10.10.5.12:11211'],debug=True)
    for i in range(200,1000):
        m.set("key%d" % i,"v%d" % i)
        ret = m.get('key%d' % i)
        print(ret)
    
    ## 查看5.13 上是否有了key200 - key1000 之间的key。 
    [root@srv-3 ~]# telnet 127.0.0.1 11211
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    get key888
    VALUE key888 16 4                 # 成功获取memcahced 同步成功.
    v888
    END
    
    
    
    
    
    
  • 相关阅读:
    asp.net 2.0-实现数据访问(1)
    跨平台跨服务器跨网站SSO(单点登录)方案的DEMO
    (翻译)Windows Communication Foundation (Workshop)-Part 2:在WCF中操作会话
    ipc的remoting
    忙活了半年的书已经交稿,年后就要出版
    一个ASP.NET2.0的小项目-BLOG
    (论坛答疑点滴)上传控件怎么修改样式?怎么设置readonly?
    【LoveCherry】上海.NET招聘!!!!!!!!!!!!!!!!!!!!!!!!!
    【翻译】Scott Mitchell的ASP.NET2.0数据指南中文版索引
    Scott Mitchell 的ASP.NET 2.0数据教程之二十四:: 分页和排序报表数据
  • 原文地址:https://www.cnblogs.com/zhenxing06/p/12870984.html
Copyright © 2011-2022 走看看