`
huangyongxing310
  • 浏览: 490547 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

memcache缓存集群与分布式实现方式

 
阅读更多
缓存集群与分布式实现方式


一致性Hash原理:
1.计算各个服务节点的hash,分散在2的32次方的环上,记录好服务节点与hash的对应关系,服务节点的hash可以选取IP或名字进行计算.
2.对象定位到服务节点,对象(key)进行hash,得到的hash与服务节点的hash进行对比,放到其hash值往增大方向找到的第一个服务节点
3.服务节点不可用时,只有这个节点的数据受影响,其他的不受影响。
4.增加一个节点时,只需要将其前一个节点的数据进行重新重定位一个节点的数据就可以了,不用全部数据都进行重定位

https://www.cnblogs.com/lpfuture/p/5796398.html(一致性Hash算法背景)


memcached:hash算法设置
pool.setHashingAlg( SockIOPool.NEW_COMPAT_HASH );

memcached以IP和端口号加虚拟节点(_1,_2_...)组成的字符串进行HASH。

memcached使用了一实际个节点对应了若干(40个)个“虚拟节点",使数据分布更为均匀分布。平衡性 (Balance)
double factor = Math.floor(((double)(40 * this.servers.length * thisWeight)) / (double)this.totalWeight); 

http://makemyownlife.iteye.com/blog/1439581(Java memcached client学习(一致性hash))
http://jameswxx.iteye.com/blog/1168711(memcached客户端源码分析)


memcached:
memcached的分布式是通过客户端来实现的,


failover和failback
这两者都是发生在获取可用连接这个环节。
failover,如果为key选择的服务器不可用,则对key重新哈希选择下一个服务器,详见getSock方法的末尾。

failback,用一个hashmap存储连接失败的服务器和对应的失效持续时间,每次获取连接时,都探测是否到了重试时间。


memcachedclient的SockIOPool只是实现了memcached的分布式缓存功能,还没有实现高可用性功能,一旦某个缓存节点失效后就没法恢复数据了,这对于存放session数据是不行的,其他数据在数据库可以查回来还可以忍受。


memcached windows管理工具
http://www.cnblogs.com/mecity/archive/2011/06/13/Memcached.html


Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大。
Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的stats 命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。

默认memcached单个进程只支持到2G内存,需要更大内存支持的话,需要打开64位支持,编译的时候加参数:--enable-64bit

最大键长为250字节,大于该长度无法存储,常量KEY_MAX_LENGTH 250控制

单个item最大数据是1MB,超过1MB数据不予存储

最大同时连接数默认是1024

memcached是一种无阻塞的socket通信方式服务,所以最大连接数可以很大的



memcached 高可用(HA)
利用magent搭建memcached集群




上图中的Memcached-1~Memcached-3属于主服务器,每台负责缓存部分数据,Memcached-4属于备份服务器,缓存上述三台的所有数据
如果其中一台主服务器宕机,数据将会从备机上获取。








https://blog.csdn.net/guolulu0223/article/details/52997988(Magent集群)

magent是一款开源的Memcached代理服务器软件

其中一台Memcached死掉,从magent取数据,数据会从备份的Memcached取出,保证用户不受影响.

Memcached重启复活,由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管备份Memcached还有数据。可采用定时维护服务器,恢复memcached。

如果Memcached死掉,备份机同时死掉,那么只能说明你够倒霉。


magent工作原理:
magent(memcached agent)基于Consistent Hashing(一致性Hash)原理来缓存数据

上图中的Memcached-1~Memcached-3属于主服务器,每台负责缓存部分数据,Memcached-4属于备份服务器,缓存上述三台的所有数据

如果其中一台主服务器宕机,数据将会从备机上获取。

magent是memcache的补充,magent下memcache分主备,主节点分散存储所有的键值数据 ,备节点存储一个完整的所有键值数据。magent解决了memcache的不能节点分布式问题。

每个从都会写入数据(从上的数据是所有主上的数据集合)(从保存所有主的数据)


启动memcached服务,每台主给4GB内存,备机给12GB内存和60000个连接数
memcached -p 11211 -m 4096 -d -l 192.168.202.221 -u memcached -c 20000 -t 8 -b 2048 -P /var/run/memcached-11211.pid
memcached -p 11211 -m 4096 -d -l 192.168.202.222 -u memcached -c 20000 -t 8 -b 2048 -P /var/run/memcached-11211.pid
memcached -p 11211 -m 4096 -d -l 192.168.202.223 -u memcached -c 20000 -t 8 -b 2048 -P /var/run/memcached-11211.pid
memcached -p 11211 -m 12288 -d -l 192.168.202.224 -u memcached -c 60000 -t 8 -b 2048 -P /var/run/memcached-11211.pid

启动magent服务,分配65000个连接数
magent -u root -n 65000 -l 192.168.202.225 -p 11211 -s 192.168.202.221:11211 -s 192.168.202.222:11211 -s 192.168.202.223:11211 -b 192.168.202.224:11211


就是magent使用hash算法将对象保存到memcached的对应节点,并放一份到备份节点中去,当一个主节点失效时,magent会从备份节点中去获取数据返回.


magent只是实现了memcached的高可用性,但magent是单点的,
magent的高可用性就要用kepalived实现了


magent中主缓存重启后数据是丢失了的,如何从备份缓存中恢复的方法:
Repcached,全称replication cached,高可用技术,简称复制缓冲区技术。

“repcached”是一个Memcached补丁集合,实现Memcached复制功能的

Repcached 用来实现 Memcached 复制功能的一个工具。

多主复制,异步数据复制,支持所有的memcached命令(set, add, delete, incr/decr, flush_all, cas)。

主要实现数据的同步功能,复制完成后再进行Memcached启动的,所以不用担心启动有一小段时间还是没有数据

repcached插件,它是一个单Master单Slave的方案,但它的Master和Slave都是可读可写的,而且可以相互同步,就主数据有变时从数据会跟着变化(并且从会同步主中的数据)

并且Master和Slave会自动切换(主变从,从变主自由切换)。如果Master宕机,Slave侦测到连接断了,它会自动Listen而成为Master,而如果Slave坏掉,Master也会侦测到连接断了,它就会重新等待新的Slave加入。

Repcached + kepalived构建高可用memcached
https://blog.csdn.net/dailywater/article/details/50909041(repcached实现memcached内存复制+keepalived主备模式)

https://blog.csdn.net/zqtsx/article/details/46977941


搭建memcached集群memcached+magent+repcache
https://blog.csdn.net/qq_34021712/article/details/56844801

https://blog.csdn.net/dailywater/article/details/50967278

repcache完整版已经集成了memcached,不需要单独安装memcached
它所构建的主从方案是一个单主单从的方案,不支持多主多从。


联合memcache,repcached,magent,monit四个组件搭建高可用集群方案
1)memcache负责缓存对象。
2)repcached负责单主单从的同步备份。
3)magent代理实现N主N备。
4)monit监听以上组件的各个实例端口,保证故障自动重启。


高可用方式最终方式:magent进行分布式,repcached实现数据复制备份,kepalived实现
magent高可用性


  • 大小: 29.3 KB
  • 大小: 14.8 KB
  • 大小: 17.4 KB
分享到:
评论

相关推荐

    memcache缓存分布式集群

    在标题提到的“memcache缓存分布式集群”中,主要涉及以下知识点: 1. **分布式存储原理**:分布式存储是将数据分散存储在多台独立的设备上,以提高系统的可扩展性和可用性。Memcache分布式集群就是通过将数据分散...

    本地缓存与分布式缓存优缺点,使用

    本地缓存与分布式缓存优缺点、使用场景 缓存是计算机系统中的一种优化技术,通过将频繁访问的数据存储在内存中,以减少对外部存储设备的访问次数,提高系统的响应速度和性能。本文将详细介绍本地缓存与分布式缓存的...

    Memcache缓存技术,Memcache配置说明及其文件,PHP5.2.6版本内存缓存技术配置

    在本主题中,我们将详细探讨Memcache缓存技术,特别是针对PHP5.2.6版本的配置以及在Windows操作系统的应用。 首先,理解Memcache的基本原理至关重要。Memcache的工作机制是在内存中存储数据,当应用程序需要访问...

    memcache 缓存 分布式

    **Memcache缓存技术详解** Memcache是一种高性能的分布式内存对象缓存系统,它能够将数据存储在服务器的内存中,以减少对数据库的访问,从而显著提高网站的响应速度和处理能力。作为一款轻量级的缓存解决方案,...

    apache+jk+memcache+nginx分布式网站建设笔记

    ### Apache、Tomcat、Memcache与Nginx在分布式网站建设中的应用 #### Apache与Tomcat集成 Apache是一款广泛使用的Web服务器软件,而Tomcat是Apache基金会下的一个开源项目,主要作为Java应用程序的Servlet容器。...

    .net 分布式缓存中间件

    开源地址:...方便实现缓存的分布式,集群,负载均衡,故障自动转移,并兼容多种缓存存储的分布式缓存中间件。 用于解决分布式架构中的分布式缓存环节。支持redis,memcache,ssdb

    memcache缓存配置包(dll,memched,配置方法)

    **Memcache缓存技术详解** Memcache是一种广泛应用于Web开发中的分布式内存缓存系统,它能够有效提升应用程序的性能,减少数据库的负载。这个压缩包提供了在PHP环境中配置和使用Memcache所需的关键组件。 1. **...

    memcache、redis、tair性能对比测试报告

    Ehcache作为组件级缓存,其性能受到web服务器和集群方式的影响,不具备与memcache、redis、tair的直接对比性。而MongoDB是文档型数据库,其设计目标与缓存系统不同,不适宜进行性能对比。 测试场景涵盖了单机环境和...

    Memcache缓存

    ### Memcache缓存详解 #### 一、Memcache概述 Memcache是一种开源的、高性能的分布式内存对象缓存系统,它的主要目标是为了减轻数据库的负担,提高网站的响应速度。Memcache通过在内存中缓存数据和对象来减少对...

    Memcache缓存安装学习课件及源码

    - 分布式环境下的Memcache集群配置,以实现更高的可用性和可扩展性。 通过本课件的学习,你将掌握如何在实际项目中部署和利用Memcache提升应用性能。源码部分可以帮助你更好地理解Memcache在实际编程中的应用,...

    memcache分布式一致性hash

    它旨在确保当缓存集群中的节点增减时,对现有数据的映射影响最小,从而降低数据迁移和系统压力。 在传统的哈希分发策略中,数据通过哈希函数映射到缓存服务器,通常是通过`hash(object) % N`的方式来决定数据存储在...

    基于MemCache的分布式扩展算法.pdf

    MemCache是一个高性能的分布式内存对象缓存系统,它通过在内存中维护一个巨大的哈希表来存储各种格式的数据。最初由Dangalnteractive公司开发,现在已被多个大型网站如mixi、hatena、Facebook、Vox和LiveJournal用于...

    Memcache集群环境下缓存解决方案.docx

    **Memcache集群环境下的缓存解决方案** Memcache是一款高性能、分布式的内存对象缓存系统,其核心机制是在内存中维持一个大的哈希表,用于存储各种格式的数据,如图像、视频、文件及数据库查询结果等。它的工作原理...

    memcache缓存机制

    - **分布式**:Memcached支持多服务器环境,数据可以在集群中的任何一台服务器上存储,实现负载均衡和高可用性。 - **内存存储**:所有数据都存储在内存中,因此读取速度非常快,但同时也意味着数据不持久化,断电...

    Java memcache缓存实现for Windows.docx

    Java Memcached 缓存是一种高效的分布式内存对象缓存系统,常用于减轻数据库的负载和提高应用程序性能。在Windows环境下,我们可以使用Java客户端来与Memcached服务进行交互。本文将详细介绍如何在Java中实现...

    memcache缓存

    使用Memcached作为session存储,可以实现多台服务器间的session共享,这样当用户在集群中的任意一台服务器上登录后,其session信息可以在其他服务器上被识别,保证了用户会话的一致性,提升了应用的可扩展性和可用性...

    Nginx+Memcache+Linux+Tomcat集群

    2. **Memcache**:Memcache是一种分布式内存对象缓存系统,用于临时存储(缓存)中间结果或数据,以减少数据库的访问。在Nginx+Tomcat集群中,Memcache可以缓存动态生成的内容,比如用户的会话信息,进一步提高响应...

    Nginx+tomcat6+memcache配置集群session共享所需jar包

    Memcached是一种分布式内存对象缓存系统,可以存储和检索数据,以减少数据库访问的负担。在这个配置中,我们将使用Memcached来存储session数据,确保所有Tomcat节点都能访问到相同的数据。提供的jar包“memcache-...

    memcache集群安装

    Memcache是一款广泛使用的分布式内存对象缓存系统,用于临时存储(缓存)中间结果或数据,以减少对数据库的访问。本文将详细介绍如何搭建一个memcache集群。 ### 1. memcache简介 Memcache是一种高性能的、分布式...

Global site tag (gtag.js) - Google Analytics