• magent + memcached 集群测试


     1、编译安装libevent:

    wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
    tar zxvf libevent-1.4.9-stable.tar.gz
    cd libevent-1.4.9-stable/
    ./configure --prefix=/usr
    make && make install
    cd ../



      2、编译安装Memcached:

    wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
    tar zxvf memcached-1.2.6.tar.gz
    cd memcached-1.2.6/
    ./configure --with-libevent=/usr
    make && make install
    cd ../



      3、编译安装magent:

    mkdir magent
    cd 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
    make
    cp magent /usr/bin/magent
    cd ../


    前面的3步就跳过了,接着测试magent +memcached的强大功能

      环境说明:  centeros 5.4(虚拟机) IP:192.168.128.133

             测试客户端:xp

        先在133上面开5个memcached端口

        依次执行

    memcached -m 1 -u root -d -l 192.168.128.133 -p 10001

    memcached -m 1 -u root -d -l 192.168.128.133 -p 10002

    memcached -m 1 -u root -d -l 192.168.128.133 -p 10003

    memcached -m 1 -u root -d -l 192.168.128.133 -p 10004

    memcached -m 1 -u root -d -l 192.168.128.133 -p 10005

      先看看是否启动监听端口成功

      ps -ef | grep memcached

      发现结果6行,最后一行是执行这个查看命令的 说明成功

      接着启动magent 设置启动参数 -u当然是启动账号 -n是最大连接数,-l是magent监听的IP -p是magent监听的端口

      后面的格式依次是 -s IP:端口 代表是主服务器 然后指定IP:端口的格式

      -b IP:端口的意思是 备用服务器,

      这里我设置了10001,10002,10003 为主Memcached服务器

      10004,10005 为memcached备份服务器 

     magent -u root -n 51200 -l 192.168.128.133 -p 12000 -s 192.168.128.133:10001 -s 192.168.128.133:10002 -s 192.168.128.133:10003 -b 192.168.128.133:10004 -b 192.168.128.133:10005

      执行命令后 可以先查看是否启动成功

      ps -ef | grep magent

      出现2行 OK,继续

      在XP客户端上测试

       直接连接magent 端口 12000

      telnet 192.168.128.133 12000

      执行stats

      

    说明magent 里面已经负载了3个memcached 端口

      接着我们继续set

    set key1 0 0 1
    1
    STORED
    set key2 0 0 1
    2
    STORED
    set key3 0 0 1
    3
    STORED

     

     好了 依次设置了3个key ,这里说明下参数 <command name> <key> <flags> <exptime> <bytes>\r\n

     详细的解释大家请看:http://blog.zol.com.cn/737/article_736087.html

      既然设置了3个key,我们来读取看

      执行命令get key1 get key2 get key3

      依次返回了

     到此,一个缓存写入已经存取的过程就完成了,但是我们要了解其中的过程呀,哈哈

      然后我们直接登陆memcached的端口get数据看 它是怎么样保存的

      先telnet 192.168.128.133 10001

          执行stats

      STAT pid 7496
    STAT uptime 894
    STAT time 1319202978
    STAT version 1.2.6
    STAT pointer_size 32
    STAT rusage_user 0.000000
    STAT rusage_system 0.001999
    STAT curr_items 1
    STAT total_items 1
    STAT bytes 54
    STAT curr_connections 3
    STAT total_connections 4
    STAT connection_structures 4
    STAT cmd_get 1
    STAT cmd_set 1
    STAT get_hits 1
    STAT get_misses 0
    STAT evictions 0
    STAT bytes_read 36
    STAT bytes_written 32
    STAT limit_maxbytes 1048576
    STAT threads 1\STAT threads 1\

    说明10001只缓存了1个key

      我们看是存的哪一个

    get key1
    VALUE key1 0 1
    1
    END

      OK存的key1

    再telnet 192.168.128.133 10002

    直接

    get key1
    END
    get key2
    VALUE key2 0 1
    2
    END
    get key3
    END
    get key4
    END
    get key5
    END

    说明10002上缓存的key2啊,

    这样不难看出10003上应该是缓存的key3了

      试试

      telnet 192.168.128.133 10003

    然后

    get key1
    END
    get key2
    END
    get key3
    VALUE key3 0 1
    3
    END
    get key4
    END
    get key5
    END

    到此 知道了magent是根据自己的算法 把要缓存的内容依次分发到后端的memcached的,至于具体的算法就不知道了,我个人认为应该是依次分发的吧,当然此memcached存活的前提下,

    知道了主服务器是分发负载的,不知道备用服务器是不是这样,

      进telnet 192.168.128.133 10004

      依次

    get key1
    END
    get key2
    VALUE key2 0 1
    2
    END
    get key3
    END
    get key4
    END
    get key5
    END

      发现 备用服务10004 并没有全部缓存3个key,就是之前的key1 key2 key3

    再进 telnet 192.168.128.133 10005

    get key1

    VALUE key1 0 1
    1
    END
    get key2
    END
    get key3
    VALUE key3 0 1
    3
    END
    get key4
    END
    get key5
    END
    看来备用服务器也是实现了负载啊,哈哈,估计算法还是跟主服务器的一样吧,

      然后我把主服务器的10001 10002 10003的进程全部kill了

    root      7496     1  0 21:01 ?        00:00:00 memcached -m 1 -u root -d -l 192.168.128.133 -p 10001
    root      7498     1  0 21:01 ?        00:00:00 memcached -m 1 -u root -d -l 192.168.128.133 -p 10002
    root      7500     1  0 21:01 ?        00:00:00 memcached -m 1 -u root -d -l 192.168.128.133 -p 10003

    kill 7496 7498 7500

    再在magent的端口上get key1
    VALUE key1 0 1
    1
    END
    get key2
    VALUE key2 0 1
    2
    END
    get key3
    VALUE key3 0 1
    3
    END

    并不影响取值。

      不过如果备用服务器也死了的话,就无力了,

      到此测试结束咯

  • 相关阅读:
    背景透明的static控件
    MFC应用程序配置不正确解决方案
    #pragma once与 #ifndef的区别
    一种新颖的流程控制方式
    DbgView.exe的应用和使用类
    内存对齐的一点个人理解
    MFC下实现透明位图
    结束已知应用程序名的进程
    基本线程编程
    Linux下PCI设备驱动程序开发的经典文章
  • 原文地址:https://www.cnblogs.com/cnsanshao/p/2220154.html
Copyright © 2020-2023  润新知