zoukankan      html  css  js  c++  java
  • magent——memcached缓存代理服务器

    memcached分布式缓存

    我们使用PHP连接多台memcached服务器,做分布式缓存,实现如下:

    $memcache = new Memcache;
    $memcache->addServer('192.168.252.134', 11211);
    $memcache->addServer('192.168.252.134', 11212);
    $memcache->addServer('192.168.252.134', 11213);
    for ($i = 0; $i < 1000; $i++)
    {
        $memcache->set($i, $i, 0, 1000);
    }

    这样的实现是最直接、简单的,PHP应用直接连接memcached服务器。但也存在一个问题,就是可用性的问题,如果,有一台memcached 服务器宕机了,那么该服务器上的数据就丢失了,可能有人会认为,memcached本来就是做缓存的,缓存丢失就丢了呗,没什么大惊小怪的。其实不然滴, 缓存的命中率也是影响系统稳定性和高可用的一个指标嘛,难道每次丢了缓存,我们就那么心宽的“去数据库找数据就好咯”,这样缓存还有意义吗。

    magent——memcached缓存代理服务器

    针对上面的问题,可以使用magent缓存代理服务器来管理memcached服务器,PHP应用由直接和多台memcached交互转变成和magent交互。那么,magent都帮我们做了什么呢?

    我们先上个图看看

    可以看出,magent作为memcached集群的代理,还可以做备份(192.168.252.134:11213为备份服务器),主缓存服务 器(192.168.252.134:11211、192.168.252.134:11212)宕机后,应用依旧可以用从备份服务器上读取到缓存。

    搭建magent缓存代理服务器

    magent依赖libevent库

    magent依赖libevent库

    magent依赖libevent库

    重要的话说三遍!!

    1)编译安装magent

    cd /home
    mkdir ./magent
    cd ./magent
    wget -c https://memagent.googlecode.com/files/magent-0.5.tar.gz    // 谷歌被墙了,如有需要可以评论留邮箱
    tar xzvf ./magent-0.5.tar.gz
    /sbin/ldconfig
    sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
    make
    cp ./magent /usr/bin/magent

    编译过程会遇到很多问题,参照这网址自行解决

    2)memcached的搭建略过

    3)启动memcached和magent

    magent -u root -l 192.168.252.134 -p 11210 -s 192.168.252.134:11211 -s 192.168.252.134:11212 -b 192.168.252.134:11213

    4)运行测试脚本

    <?php
    $host = '192.168.252.134';
    $port = '11210';
    $mem = memcache_connect($host, $port);
    
    $key1 = 'mctest1';
    $value1 = '1';
    $mem->add($key1, $value1);
    
    $key2 = 'mctest2';
    $value2 = '2';
    $mem->add($key2, $value2);
    
    $key3 = 'mctest3';
    $value3 = '3';
    $mem->add($key3, $value3);
    
    $key4 = 'mctest4';
    $value4 = '4';
    $mem->add($key4, $value4);
    
    $key5 = 'mctest5';
    $value5 = '5';
    $mem->add($key5, $value5);
    
    $key6 = 'mctest6';
    $value6 = '6';
    $mem->add($key6, $value6);

    服务器192.168.252.134:11211

    服务器192.168.252.134:11212

    服务器192.168.252.134:11213

    主服务器上的数据都会备份到备份服务器上,如果主服务器宕机了,应用依旧可以从备份服务器上取数据。

    更多的部署图

    本文链接:http://www.hcoding.com/?p=316

    原创文章,转载请注明:JC&hcoding.com

  • 相关阅读:
    inet_ntoa 的一个小问题
    获取DNS服务器的版本信息
    host_network_interfaces_slow_mode_thresholds
    10月8日至11月底考试安排
    腾讯广点通防作弊
    移动广告作弊方式及防范方式
    广告联盟常用的防作弊手续
    移动端点击作弊与激活作弊的现象与预警
    数据科学家最常用的十种算法(我准备拿这个当成学习参考)
    项目的命名规范,为以后的程序开发中养成良好的行为习惯
  • 原文地址:https://www.cnblogs.com/szuyuan/p/4866891.html
Copyright © 2011-2022 走看看