`

Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解

 
阅读更多

网站访问量达到一定时,如何做Memcached集群,又如何高可用,是接下来要讨论的问题。

有这么一段文字来描述“Memcached集群”

Memcached如何处理容错的?

不处理!:) 在memcached节点失效的情况下,集群没有必要做任何容错处理。如果发生了节点失效,应对的措施完全取决于用户。节点失效时,下面列出几种方案供您选择:

* 忽略它! 在失效节点被恢复或替换之前,还有很多其他节点可以应对节点失效带来的影响。

* 把失效的节点从节点列表中移除。做这个操作千万要小心!在默认情况下(余数式哈希算法),客户端添加或移除节点,会导致所有的缓存数据不可用!因为哈希参照的节点列表变化了,大部分key会因为哈希值的改变而被映射到(与原来)不同的节点上。

* 启动热备节点,接管失效节点所占用的IP。这样可以防止哈希紊乱(hashing chaos)。

根据上面的说法,Memcached其中一个节点失效以后,memcached本身是没有任何策略维持失效转发的,这对于大型系统是一个无法接受的事实。

举例说明:

在客户端连接的部分写入多个服务器端的ip地址,客户端将会自动的把缓存数据分布的放在每个不同的机器上,如图所示:

缺陷说明:

如果其中一个缓存节点的机器down机,那么客户端存入的缓存数据将会丢失一部分,就是图中红色字体描述的“Losed 33% Cache Data”,也就是说那部分数据彻底没有了!如果是用户的关键性信息那么就玩大了,如图所示:

 

解决方案:采用缓存代理服务器

采用 Magent 缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存服务器,缓存代理服务器可以连接多台Memcached机器,如下图所示,配件清单如下:

Magent代理服务器:2台,分别为 192.168.1.2:12000、192.168.1.3:12000

Memcached主服务器:3台,分别为 192.168.1.4:11211、192.168.1.5:11211、192.168.1.6:11211 

Memcached备服务器:2台,分别为 192.168.1.5:11211、192.168.1.6:11211

 

搭建Memcahced服务器

在 192.168.1.4、192.168.1.5、192.168.1.6、192.168.1.7、192.168.1.8 上分别编译安装并运行Memcached ,

参考:CentOS6.3编译安装Memcached

 

搭建Magent代理服务器

在 192.168.1.2、192.168.1.3 上分别 编译安装 magent [CSDN下载 Magent]

#编译安装安装magent到 /usr/local/ 

1 cd /usr/local/
2 mkdir ./magent
3 cd ./magent
4 wget -c http://memagent.googlecode.com/files/magent-0.6.tar.gz
5 tar xzvf ./magent-0.6.tar.gz
6 /sbin/ldconfig
7 sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
8 make
9 cp ./magent /usr/bin/magent

注意:编译的过程中遇到了好几处错误,错误解决过程,请参考

CentOS6.3编译安装Memcached集群分布式缓存代理Magent-0.6出错汇总

 

magent命令详解:

  -h this message
  -u uid
  -g gid
  -p port, default is 11211. (0 to disable tcp support)
  -s ip:port, set memcached server ip and port
  -b ip:port, set backup memcached server ip and port
  -l ip, local bind ip address, default is 0.0.0.0
  -n number, set max connections, default is 4096
  -D do not go to background
  -k use ketama key allocation algorithm
  -f file, unix socket path to listen on. default is off
  -i number, max keep alive connections for one memcached server, default is 20
  -v verbose

在 192.168.1.2、192.168.1.3 上分别运行 magent:

1 magent -u root -n 51200 -l 192.168.1.2 -p 12000 -s 192.168.1.4:11211 -s 192.168.1.5:11211 -s 192.168.1.6:11211 -b 192.168.1.7:11211 -b 192.168.1.8:11211

 

测试缓存数据的分布情况:

以前,我们用PHP连接多台Memcached服务器,做分布式缓存时,参考代码如下:

1 $memcache = new Memcache;
2 $memcache->addServer('localhost', 11211);
3 $memcache->addServer('localhost', 11212);
4 $memcache->addServer('localhost', 11213);
5 for ($i = 0; $i < 1000; $i++)
6 {
7     $memcache->set($i, $i, 0, 1000);
8 }

现在,代码还是那段代码,只不过连接的主机不是Memcached服务器了,而是 Magent代理服务器,给 addServer()方法传参时,传入的是Magent主机IP与端口!测试代码如下:

01 $mem = new \Memcache();
02  
03 $host = '192.168.1.2';
04 $port = '12000 ';
05 $mem->connect($host, $port);
06  
07 $key1 = 'snsgou1';
08 $value1 = '1';
09 $mem->add($key1, $value1);
10  
11 $key2 = 'snsgou2';
12 $value2 = '2';
13 $mem->add($key2, $value2);
14  
15 $key3 = 'snsgou3';
16 $value3 = '3';
17 $mem->add($key3, $value3);
18  
19 $key4 = 'snsgou4';
20 $value4 = '4';
21 $mem->add($key4, $value4);
22  
23 $key5 = 'snsgou5';
24 $value5 = '5';
25 $mem->add($key5, $value5);
26  
27 $key6 = 'snsgou6';
28 $value6 = '6';
29 $mem->add($key6, $value6);

说明:

1、PHP连接magent,把缓存key1交给magent,magent根据自身的配置参数,再加上一定的哈希算法,会计算出key1存在3台主Memcached服务器的某一台上,然后以同样的算法,将key1也在2台备用的Memcached服务器中的某一台上,再存一份数据。即,主服务器是分布式存储的,同时,从服务器也是分布式存储的;

2、在PHP获取缓存数据key1时,magent一旦得知数据所存的那台主Memcached服务器挂掉了,它就会转向从备用的Memcached服务器中获取数据。注意:服务器的定位选择算法跟存的时候是一样的。

3、有个缺陷,当 down 掉的那台主Memcached服务器重新恢复正常后,Memcahed里是没有数据的,即数据全部丢失,但此时 备用的Memcached服务器 又不会将数据同步到 主服务器

4、通过Memcached管理软件MemAdmin点击下载)去查看上述数据分布情况,如下:

192.168.1.4 存有 snsgou6,snsgou3
192.168.1.5 存有 snsgou4,snsgou1
192.168.1.6 存有 snsgou5,snsgou2
192.168.1.7 存有 snsgou5,snsgou3,snsgou1
192.168.1.8 存有 snsgou4,snsgou6,snsgou2

5、PHP连接代理的时候,最好每次随机性只连一台,这样,一旦某台代理挂了(即连不上),可切换连另外一台代理服务器。而随机性地去连,又保证了一定的负载均衡。

6、本来我打算通过修改配置文件php.ini,使PHP系统的会话(Session)通过Magent代理保存到Memcached服务器中,修改方式参考:PHP如何将session保存到memcached中?如何分布式保存PHP session

但是呢,把Mangent代理服务器IP及端口贴到php.ini后(已重启了相关服务器),发现会话根本没保存到Memcached中,即PHP底层不识别Magent代理,郁闷!!!

http://www.php-note.com/article/detail/800

分享到:
评论

相关推荐

    memcached//分布式数据缓存

    6. **分布式存储**:虽然单个Memcached实例的内存有限,但可以通过在多台机器上部署多个实例,使用一致性哈希等算法实现分布式缓存,扩大存储容量并提高可用性。 7. **源码分析**:对于深入理解其工作原理,可以...

    memcached集群linux搭建

    Memcached是一款高性能的分布式内存缓存系统,用于减轻数据库的负载,提高Web应用的响应速度。在Linux环境下搭建Memcached集群是优化服务性能的关键步骤,尤其是对于那些处理大量数据和高并发请求的Web应用程序。...

    magent memcached缓存代理服务器

    Memcached则是一种高性能的分布式内存对象缓存系统,常用于缓解数据库负载,提高网站性能。当我们谈论"Magent Memcached缓存代理服务器"时,这意味着我们将在Magento环境中集成和配置Memcached作为缓存解决方案。 ...

    分布式缓存系统Memcached简介及开发环境搭建

    分布式缓存系统是现代Web应用中提升性能的关键技术之一,Memcached作为其中的代表,以其高性能、简单易用的特点被广泛采用。Memcached是一个开源的、基于内存的分布式缓存解决方案,主要目的是减少对数据库的访问,...

    MemCached跨平台分布式缓存

    MemCached是一种广泛应用于互联网行业的分布式缓存系统,其设计目标是提供高性能、低延迟的数据存储解决方案,以缓解数据库的压力并提升应用的响应速度。作为一款跨平台的内存对象缓存系统,它支持多种操作系统,...

    Memcached分布式缓存学习.doc

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态 Web 应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。 Memcached 基于一个存储键/...

    Memcached分布式缓存

    ### Memcached分布式缓存 #### 一、Memcached的基础 **1.1 Memcached是什么?** Memcached是一款高性能、分布式内存对象缓存系统,旨在通过减轻数据库负担来加速动态网络应用的速度。它通过在内存中缓存数据和...

    memcached分布式缓存数据库部署.doc

    memcached的分布式特性使其能够在多台服务器上分布缓存,通过一致性哈希算法实现数据的均匀分布,当集群中的某个节点出现问题时,可以通过其他节点继续提供服务,保证系统的高可用性。此外,memcached支持多种数据...

    Memcached分布式缓存入门

    Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。这个“Memcached分布式缓存入门”资料将引导初学者深入理解Memcached的核心概念、工作原理以及...

    谷粒商城电商项目 ( 大型分布式基础+高级、高可用集群部署)(全栈开发篇)

    《谷粒商城电商项目:大型分布式基础与高可用集群部署》 在当今互联网时代,电商平台的构建已经成为企业不可或缺的一部分。谷粒商城电商项目以其大型分布式基础和高可用集群部署为特色,展现了现代电商系统的先进性...

    分布式缓存系统Memcached

     Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及...

    Memcached集群搭建

    本文将详细介绍如何在多个服务器上搭建一个Memcached集群,以实现数据的高可用性和负载均衡。 ### 一、安装Memcached 在开始搭建集群之前,首先需要在所有参与节点上安装Memcached。对于Linux系统,通常使用包管理...

    Linux集群/分布式环境下session处理的五种策略详解

    在搭建Linux集群或分布式系统的过程中,一个常见的挑战是如何管理跨服务器的Session数据。若未妥善处理,可能导致用户频繁重新登录等问题,严重影响用户体验。本文将详细介绍五种在Linux集群/分布式环境下处理...

    memcached单机到集群完整搭建过程.zip

    memcached单机到集群完整搭建过程

    memcached安装软件 libevent magent memcached

    Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载。它通过在内存中存储数据来提供快速的数据访问,从而提高应用的性能。本篇文章将详细讲解如何安装和配置memcached,...

    分布式缓存介绍《干货》

    Memcached是一种高性能的分布式内存对象缓存系统,被广泛应用于动态Web应用中,用于减轻数据库的压力。它的主要特点包括: - **KV存储**:数据以键值对形式存储,通过键来访问数据。 - **简单协议**:支持简单的...

    Memcached分布式缓存简介

    Memcached是一种高性能的分布式内存对象缓存系统,主要用于动态Web应用程序,以缓解数据库负载。它通过将数据和对象存储在内存中,减少对数据库的直接访问,从而提高动态、数据库驱动网站的速度。对于.NET开发者来说...

    memcached 分布式缓存服务器

    3. **分布式**:通过哈希算法将键分发到集群中的不同节点,实现数据的分布式存储,提供扩展性和高可用性。 4. **LRU(Least Recently Used)策略**:当内存满时,memcached 采用 LRU 策略淘汰最近最少使用的数据。 ...

    tomcat + apache + memcached 集群jar包

    memcached 集群jar包”揭示了这是一个关于构建分布式系统的技术组合,其中涉及到三个核心组件:Tomcat(一个流行的Java应用服务器)、Apache(一个广泛应用的HTTP服务器)和Memcached(一个高性能的分布式内存对象...

    C#/.net分布式缓存系统Memcached 实例

    Memcached是一个高性能的分布式的内存对象缓存系统.它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统,这种方法不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力...

Global site tag (gtag.js) - Google Analytics