Memcache本身并不实现集群功能。假设你想使用Memcahce集群需要使用第三方软件或编程来实现自己的设计,这里将被用来memagent实现代理,memagent也被称为magent。我们注意到,,这二者当成两种工具。至于memcache、magent的安装请參考文章   在Linux上安装Memcached服务和 magent编译安装及常见错误

总体架构

直接上图:

从图中能够看到有两个magent节点,两个memcached节点,每一个magent节点又分别代理两个memcached节点,应用系统端使用magent pool来调用memcache进行存储。

硬件结构为两台linuxserver。每台server上分别安装magent和memcached服务,并设为开机启动。

这样做的优点是不论什么一台server宕机后都不影响magent pool获取memcache信息,即实现了memcached的高可用(HA),假设两台机器都宕机了。仅仅能说明你RP太差了。

当然。也能够用三台、四台或者很多其它server来提高HA。

測试HA

測试背景,本地局域网内两台server172.18.117.71(memcacheport11211,magentport11210),172.18.117.113(memcacheport11211,magentport11210),和两台server在同一局域网内的測试机器,下边是測试代码:

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;public class MainTest {public static void main(String[] arg){SockIOPool pool = SockIOPool.getInstance();//magent连接池pool.setServers(new String[] { "172.18.117.71:11210","172.18.117.113:11210" });pool.setSocketTO(3000);pool.setNagle(false);pool.setSocketConnectTO(0);pool.initialize();MemCachedClient memCachedClient = new MemCachedClient();memCachedClient.set("becd0000", "測试样例");//System.out.println(memCachedClient.get("becd0000"));//System.out.println(memCachedClient.flushAll());}}

步骤1:将key为“becd0000”,value为“測试样例”通过magent的pool放到memcache中

步骤2:改动magent连接池为单个memcache连接,代码例如以下

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;public class MainTest {public static void main(String[] arg){SockIOPool pool = SockIOPool.getInstance();//magent连接池pool.setServers(new String[] { "172.18.117.71:11211"});pool.setSocketTO(3000);pool.setNagle(false);pool.setSocketConnectTO(0);pool.initialize();MemCachedClient memCachedClient = new MemCachedClient();//memCachedClient.set("becd0000", "測试样例");System.out.println(memCachedClient.get("becd0000"));//System.out.println(memCachedClient.flushAll());}}

能够看到单独訪问memcache是能够取到刚才所存储的值的。

步骤3:改动

pool.setServers(new String[] { "172.18.117.71:11211"});

pool.setServers(new String[] { "172.18.117.113:11211"});

再次运行能够看到和步骤2一样的结果,都能够取到值,说明通过magent代理存的值会分别放到两个memcache中

步骤4:停止172.18.117.113上的memcached服务

停止memcached服务命令:kill "cat /tmp/memcached.pid"

步骤5:再次通过magent代理取值,代码例如以下:

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;public class MainTest {public static void main(String[] arg){SockIOPool pool = SockIOPool.getInstance();//magent连接池pool.setServers(new String[] { "172.18.117.71:11210","172.18.117.113:11210" });pool.setSocketTO(3000);pool.setNagle(false);pool.setSocketConnectTO(0);pool.initialize();MemCachedClient memCachedClient = new MemCachedClient();//memCachedClient.set("becd0000", "測试样例");System.out.println(memCachedClient.get("becd0000"));//System.out.println(memCachedClient.flushAll());}}

可以看到依旧可以取到值。

步骤6:启动刚才停掉的memcached服务,重新启动后memcache中全部信息将清空

步骤7:再次通过magent代理池去取key为“becd0000”的值。代码例如以下:

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;public class MainTest {public static void main(String[] arg){SockIOPool pool = SockIOPool.getInstance();//magent连接池pool.setServers(new String[] { "172.18.117.71:11210","172.18.117.113:11210" });pool.setSocketTO(3000);pool.setNagle(false);pool.setSocketConnectTO(0);pool.initialize();MemCachedClient memCachedClient = new MemCachedClient();//memCachedClient.set("becd0000", "測试样例");System.out.println(memCachedClient.get("becd0000"));//System.out.println(memCachedClient.flushAll());}}

能够看到这里取到的值为null。

结果分析

通过以上測试能够得出结论

1、通过magent的连接池放的值会分别存在magent代理的全部memcached上去

2、假设有一个memcached宕机通过magent代理方式还能取到值

3、假设memcached修复重新启动后通过magent代理方式取到的值就会为Null,这是由于memcache重新启动后里边的值随着memcache服务的停止就消失了(由于在内存中)。可是magent是通过key进行哈希计算分配到某台机器上的。memcache重新启动后会还从这台机器上取值,全部取到的值就没空。

解决的方法

1、在每次memcache宕机修复后能够写一个程序把集群中的其它memcache的全部信息全给复制到当前宕机修复后的memcache中。

2、自己写代理。当从一个memcached服务上取到的值为null时再去其它memcached上取值

注意事项

magent的调用方式同memcached一样。client能够不用改代码就可以实现切换到magent模式下

版权全部分,转载请注明、资源。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/hrhguanli/p/4680866.html

Memcached 群集高可用性(HA)架构相关推荐

  1. 教程篇(7.0) 07. FortiGate基础架构 高可用性(HA) ❀ Fortinet 网络安全专家 NSE 4

     在本课中,你将了解FortiGate高可用性(HA)的基础知识以及如何配置它.FortiGate HA提供了提高可靠性和性能的解决方案.  本节课,你将学习上图显示的主题.  通过展示在HA运行模式 ...

  2. NFS HA架构部署(NFS + Pacemaker + Corosync + DRBD)

    NFS HA架构部署(NFS + Pacemaker + Corosync + DRBD) 环境:kvm虚拟机2台 OS:CentOS7.6 Kernel: Linux 3.10.0-957.21.3 ...

  3. VMware VCSA 6.7高可用性HA

    VMware VCSA 6.7高可用性HA https://www.cnblogs.com/aqicheng/p/13622314.html 一.HA技术介绍 1.技术介绍 2.原理 3.网络问题 4 ...

  4. Bypass交换机-确保关键链路的高可用性 (HA)

    文章目录 挑战 目标 解决方案 高可用性(HA) 好处 关注我们 在过去的 12 个月中,主要金融机构遭受的网络攻击增加了 80%,同比增长了 13%,在疫情期间,针对银行的网络攻击激增了 238%. ...

  5. 新闻网大数据实时分析可视化系统项目——5、Hadoop2.X HA架构与部署

    1.HDFS-HA架构原理介绍 hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解 ...

  6. 集群(cluster)amp;高可用性(HA)概念

    1.1 什么是集群     简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点(node).一个理想的集群是,用户从来不会意识到 ...

  7. HA架构中的脑裂,什么是脑裂,怎样预防脑裂?

    在HA架构中有一个非常重要的问题,就是需要保证同一时刻只有一个处于Active状态的NameNode,否则就会出现两个NameNode同时修改命名空间的问题,也就是脑裂(split-brain).脑裂 ...

  8. 高可用性HA(High Availability)双机热备

    对于日益承担企事业单位核心业务的NT网络来说,数据的高可用性和系统的连续运转能力极其重要,服务器是企事业单位存放数据的重要设备,如果一旦因为服务器的故障而无法正常运转,就会造成业务停顿,导致不可挽回的 ...

  9. 徐雷FrankXuLei受邀为阿里巴巴集团马云老板的恒生集团讲授《分布式高并发HA架构和全新.net core高级课程》...

    非常荣幸受邀为@阿里巴巴 集团马云老板的恒生集团讲授<分布式高并发HA架构和全新.net core高级课程>学习氛围浓厚公司注重员工培训[强]金融证劵领域的领军企业感谢姚总和柳总杭州人间天 ...

最新文章

  1. 虚拟地址空间以及编译模式
  2. 【渝粤教育】电大中专学前儿童语言教育 (4)作业 题库
  3. 矩池云安装PyQt5,并在VNC中测试使用
  4. centos php 环境路径,路径(十四):在本地 CentOS 7 上搭建 Web 开发环境 — PHP
  5. svn的使用--解决commit冲突问题
  6. 自从上了 Prometheus 监控,睡觉真香!
  7. 使用GPS经纬度定位附近地点(某一点范围内查询)
  8. STM32控制WS2812B HAL库
  9. 刷armbian后必要的安装和配置
  10. 【C语言】下标法 编写数组元素的输入与输出
  11. 油溶性CdSe/ZnS量子点,以CdSe为核心,ZnS为壳层,表面由疏水配体包裹的核/壳型荧光纳米材料
  12. 微服务的优缺点_支付宝上的好医保长期医疗险这款保险到底怎么样?保障全面吗?有哪些优缺点?值得买吗?...
  13. 关于js中e = e || window.event
  14. 一个小时学会Maven(参考资料)
  15. html ui组件,UI组件
  16. LeetCode数据库题目汇总一(附答案)
  17. mysql数据字段属性
  18. 高清优质PPT模板20篇下载(商务型系列)
  19. 计算机格式化什么意思,终极:计算机格式化是什么意思?
  20. 安卓编译x264与集成使用ffmpeg-demo

热门文章

  1. 【Linux】一步一步学Linux——reboot命令(197)
  2. 【Linux】一步一步学Linux——gzip命令(63)
  3. 计算机职称在线考试报名系统,计算机职称考试报名时间及入口2021年9月
  4. mysql字段数值累加_mysql字段值(字符串)累加 | 学步园
  5. iphone xh5打开ppt预览_教你如何用iPhone拍全景照片
  6. wave文件 fft_STM32F103 如何实现 FFT?
  7. Redis源码剖析(七)监视功能
  8. phoenix客户端操作hbase已经存在的表
  9. Apache(3)——配置文件里的各参数(1)
  10. wordpress Oops! That page can’t be found.