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

magent——memcached缓存代理服务器的更多相关文章

  1. Linux下使用Magent+Memcached缓存服务器集群部署

    1.编译安装libevent  cd /root/soft_hhf/  wget http://cloud.github.com/downloads/libevent/libevent/libeven ...

  2. Memcached【Magent+Memcached】集群

    Memcached介绍  事件处理libevent是个程序库,它将Linux的epoll.BSD类操作系统的kqueue等事件处理功能封装成统一的接口.即使对服务器的连接数增加,也能发挥O(1)的性能 ...

  3. Twemproxy 缓存代理服务器

    Twemproxy 缓存代理服务器 Twemproxy 概述 Twemproxy(又称为nutcracker)是一个轻量级的Redis和Memcached代理,主要用来减少对后端缓存服务器的连接数.T ...

  4. Twemproxy 分布式集群缓存代理服务器

    Twemproxy 分布式集群缓存代理服务器 是一个使用C语言编写.以代理的方式实现的.轻量级的Redis代理服务器, 它通过引入一个代理层,将应用程序后端的多台Redis实例进行统一管理, 使 应用 ...

  5. Python项目使用memcached缓存

    前言许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现数据库的负担加重.数据库响应恶化. 网站显示延 ...

  6. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  7. .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存

    注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...

  8. redis和memcached缓存

    memcached memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群 memcached下载地址: http://memcached.org/downloads python实现 ...

  9. 应对Memcached缓存失效,导致高并发查询DB的四种思路(l转)

    当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 解决 ...

随机推荐

  1. 简单DOS命令实现局域网Windows远程关机

    1秒内重启局域网内计算机名为ppgsvr-pc的用户电脑shutdown -r -m \\ComputerName -t 1 1秒内关闭局域网内ppgsvr用户电脑shutdown -s -m \\C ...

  2. SQL basic

    Function 从例子学习 drop function dbo.getWorkingDateCount; --getWorkingDateCount = functionName CREATE FU ...

  3. QT程序制作deb包并安装在应用程序菜单

    制作原理:打包:将QT制作的源程序(没有编译的)用debian压缩打包(这里是用脚本对源程序再编译)安装:将deb包中的源程序解压(默认解压到根目录)到规定系统文件中并编译(postinst脚本)卸载 ...

  4. elasticsearch 重启后,需要的操作

    如果elasticsearch 集群挂了,请勿开启Logstash 同步数据,需等待elasticsearch集群恢复后,在继续写入

  5. BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排

    1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 400  Solved: 290 ...

  6. 【转】Win8/8.1/Win7小技巧:揪出C盘空间占用的真凶

    原文网址:http://www.ithome.com/html/win8/55496.htm 不少使用Win8.Win8.1的用户不难发现,原先只占用20G大小的系统盘,随着使用时间的增加,C盘的磁盘 ...

  7. 切割 bitmap

    最近在安卓手机控制蓝牙打印机打印图片,有时候图片太大,考虑到bitmap的切割,在此,献上代码,各位小主指点 public class ImageSplitter { public static Ar ...

  8. 微信、QQ和手机号之间不得不说的故事!

    发文字,发图片,发心情,视频聊天,查看附近的人,微信能干的事情QQ都可以,那么它们有什么区别,我QQ用得好好的为什么要我联系人都导到微信去?我们很早就有了QQ,但是在QQ时代,我们虽然用QQ发消息聊天 ...

  9. Bogo排序

    我不知道这个能不能算排序...维基上有这个排序名称...但我感觉它纯碎在卖萌... 基本思路:随机打乱数组,然后看看数组有序了没,如果没?继续随机打乱继续看...直至有序. 神一般的低效.排几十个数不 ...

  10. openStack工具集

    Openstack发展很猛,很多朋友都很认同,2013年,会很好的解决OpenStack部署的问题,让安装,配置变得更加简单易用. 很多公司都投入人力去做这个,新浪也计划做一个Openstack的is ...