Magent、Memcached 负载均匀和容错

一.背景

Memcached在实现分布集群部署时, Memcached服务端的之间是没有通讯的,服务端是伪分布式,实现分布式是由客户端实现的,客户端实现了分布式算法把数据保存到不同的Memcached服务端。我们在上一篇有介绍了,当我们客户端进行保存也key为keyValue,Value为dataValue时,Memcached服务端我们做了一个测试验证一下,如图所示:

二.问题分析

memcached对容错不做处理的,也就是说当 Memcached服务端挂掉或者Memcached重启复活,由于Memcached重启后无数据,对高并发的大型系统中,是没办法接受的,我们在集群的情况下,要做到负载均衡和容错,这种情况下,服务器端挂掉,负载就不那么均衡,缓存数据也会丢失,重新对数据库进行操作,加大的系统的性能,数据丢失容错也没做得那么好。

三.解决

Magent是一款开源的Memcached代理服务器软件,使用它可以搭建高可用性的集群应用的Memcached服务,备份Memcached数据,尽管Memcached服务挂掉,前端也能获取到数据,客户端先连到Magent代理服务器,然后Magent代理服务器在可以连接多台Memcached服务器,然后可以进行数据的保存和备份数据。这样数据就不会丢失,保存了数据完整性。

四.实现

第一步: 下载并安装Magent并安装

(1)下载地址http://memagent.googlecode.com/files/magent-0.5.tar.gz

(2)先安装好Memcached服务,这个在上一节已经安装好了

(3)Linux上安装Magent

#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

在执行make出现的问题,Magen安装出现的问题我们在有介绍怎么解决

  (4)验证一下,有没有安装正确 

#magent  能正常显示帮助信息,就说明安装正确,如图所示:

第二步:设置Magent代理的Memcached的服务和备份的Memcached的服务

(1)启动三个Memcached进程,分别为:

/opt/bin/memcached -d -m 5 -u root -l 192.168.74.129 -p 12000 -c 256 -P /tmp/memcached.pid

/opt/bin/memcached -d -m 5 -u root -l 192.168.74.130 -p 13000 -c 256 -P /tmp/memcached.pid

/opt/bin/memcached -d -m 5 -u root -l 192.168.74.130 -p 14000 -c 256 -P /tmp2/memcached.pid

(2)启动一个magent进程:

magent -u root -n 51200  -l 192.168.74.129 -p 11000 -s 192.168.74.130:13000 -s 192.168.74.130:14000 -b 192.168.74.129:12000

-s 为要写入的memcached, -b 为备份用的memcached,  -n number, set max connections, default is 4096

第三步:测试Magent

通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存服务器,缓存代理服务器可以连接多台Memcached服务器可以将每台Memcached服务器进行数据同步,我们测试一下Memcached其中一台挂掉,客户端相同的key还能从缓存服务获取数据,还有测试一下数据保存到代理服务器,对应的Memcached服务器也有数据。

(1)我们客户端连接到代理服务器,然后保存数据,Memcached服务器有保存到对应的数据。

第一步:我们连接的我们代理服务器192.168.74.129:11000,然后保存数据,这里我们直接在Linux服务上模拟,如图所示:

我们设置key 为keyValue3  value为dataValue3

第二步:我们查看写入memcached服务有没有对应的添加

我们查看是保存在192.168.74.130:13000或者192.168.74.130:14000,如图所示:

这时写入的Memcached服务是在192.168.74.130:13000服务上。

第三步:这时备份Memcached服务器上应该有对应的数据,如图所示:

    

    我们刚才以192.168.74.129:12000为备份的Memcached服务,这时有保存对应的数据,当写入的emcached服务器挂掉可以从这里恢复数据。

(2)我们客户端连接到代理服务器,然后对原来的key对应的值进行修改时,Memcached服务器有对应的数据应该也是对应的修改

第一步:replace修改,如图所示:

第二步:我们查看一下代理服务器有没有对应的修改

我们客户端连接到代理服务器,如图所示:

我们原来key 为keyValue3  value变为为dataValueNew3

第三步:我们查看写入memcached服务有没有对应的修改

如图所示:

这时之前写入的memcached服务是在192.168.74.130:13000服务上key 为keyValue3  value变为为dataValueNew3

第三步:这时备份Memcached服务器上应该有对应的数据的修改,如图所示:

(3)这时我们把对应的写人的Memcached服务挂掉时,数据会不会通过原来的key获取对应的值

我们之前查看keyValue3的值放在192.168.74.130:13000服务端,我们关掉服务,这样假设已经挂掉服务,验证一下,能不能获取数据,就是处理容错。

如图所示:

这时我们关掉了192.168.74.130:13000服务端的进程

在代理服务192.168.74.129:11000 get keyValue3还能获取数据

(4)重启一下memcached服务是在192.168.74.130:13000服务,验证一下还能不能获取数据?

我们之前查看keyValue3的值放在192.168.74.130:13000服务端,我们已经关掉服务,我们重启一下192.168.74.130:13000服务,在192.168.74.129:11000 代理服务能不能获取数据,我们先重启一下192.168.74.130:13000服务器,如图所示:

第一步:先查看192.168.74.130:13000的keyValue3

如图所示:

这时  192.168.74.130:13000已经没有保存keyValue3对应的值。因为Memcached这边不做持久化数据

第二步:备份先查看192.168.74.129:12000的keyValue3

如图所示:

这时备份里还有存keyValue3对应的值,所以可以从备份Memcached服务恢复数据,起到了容错的作用

我们通过192.168.74.129:11000 代理服务上获取keyValue3对应的值

如图所示:

这时192.168.74.130:13000服务重启,通过192.168.74.129:11000 代理服务获取不到keyValue3对应的值。

时间: 2024-08-29 17:10:46

Magent、Memcached 负载均匀和容错的相关文章

magent + memcached 集群测试

首先:配置本地源,挂载光驱,安装编译器 Yum install gcc gcc-c++ 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/ Mkdir /usr/local/libevent ./configure --prefix=/usr/local/libevent make && make

Nginx+Tomcat+Memcached负载均衡配置完整流程(多方总结,亲测可用)

Nginx+Tomcat+Memcached负载均衡配置完整流程: 前言: Nginx实现Tomcat的负载均衡和利用memcached实现session共享. 首先配置tomcat,JDK 将jdk,tomcat 放入站点/opt目录中 安装JDK cd /opt chmod 755 jdk-6u45-linux-x64-rpm.bin ./jdk-6u45-linux-x64-rpm.bin java -version      //检验版本 安装Tomcat tar -zxf apache

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 < 100

Nginx+Tomcat7+Memcached负载均衡集群+session共享

Nginx+Tomcat7+Memcached负载均衡集群服务搭建 操作系统:CentOS6.5     本文档主要讲解,如何在CentOS6.5下搭建Nginx+Tomcat7+Memcached负载均衡集群服务器,Nginx负责负载均衡,Tomcat7负责实际服务,Memcached负责同步Tomcat7的Session,达到Session共享的目的.1.安装NginxNginx官网:http://nginx.org/下载最新稳定版本.在安装Nginx之前,需要先安装gcc. openssl

Dubbo中集群Cluster,负载均衡,容错,路由解析

Dubbo中的Cluster可以将多个服务提供方伪装成一个提供方,具体也就是将Directory中的多个Invoker伪装成一个Invoker,在伪装的过程中包含了容错的处理,负载均衡的处理和路由的处理.这篇文章介绍下集群相关的东西,开始先对着文档解释下容错模式,负载均衡,路由等概念,然后解析下源码的处理.(稍微有点乱,心情不太好,不适合分析源码.) 集群的容错模式 Failover Cluster 这是dubbo中默认的集群容错模式 失败自动切换,当出现失败,重试其它服务器. 通常用于读操作,

Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错) 【转】

互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使前端应用能更快速和稳定的响应. 第一:介绍Dubbo背景 大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡. (1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也

Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)(转)

互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使前端应用能更快速和稳定的响应. 第一:介绍Dubbo背景 大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡. (1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也

Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)【转】

互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使前端应用能更快速和稳定的响应. 第一:介绍Dubbo背景 大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡. (1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也

Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)

互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使前端应用能更快速和稳定的响应. 第一:介绍Dubbo背景 大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡. (1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也