Memcached 群集高可用性(HA)架构
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)架构相关推荐
- 教程篇(7.0) 07. FortiGate基础架构 高可用性(HA) ❀ Fortinet 网络安全专家 NSE 4
在本课中,你将了解FortiGate高可用性(HA)的基础知识以及如何配置它.FortiGate HA提供了提高可靠性和性能的解决方案. 本节课,你将学习上图显示的主题. 通过展示在HA运行模式 ...
- 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 ...
- VMware VCSA 6.7高可用性HA
VMware VCSA 6.7高可用性HA https://www.cnblogs.com/aqicheng/p/13622314.html 一.HA技术介绍 1.技术介绍 2.原理 3.网络问题 4 ...
- Bypass交换机-确保关键链路的高可用性 (HA)
文章目录 挑战 目标 解决方案 高可用性(HA) 好处 关注我们 在过去的 12 个月中,主要金融机构遭受的网络攻击增加了 80%,同比增长了 13%,在疫情期间,针对银行的网络攻击激增了 238%. ...
- 新闻网大数据实时分析可视化系统项目——5、Hadoop2.X HA架构与部署
1.HDFS-HA架构原理介绍 hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解 ...
- 集群(cluster)amp;高可用性(HA)概念
1.1 什么是集群 简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点(node).一个理想的集群是,用户从来不会意识到 ...
- HA架构中的脑裂,什么是脑裂,怎样预防脑裂?
在HA架构中有一个非常重要的问题,就是需要保证同一时刻只有一个处于Active状态的NameNode,否则就会出现两个NameNode同时修改命名空间的问题,也就是脑裂(split-brain).脑裂 ...
- 高可用性HA(High Availability)双机热备
对于日益承担企事业单位核心业务的NT网络来说,数据的高可用性和系统的连续运转能力极其重要,服务器是企事业单位存放数据的重要设备,如果一旦因为服务器的故障而无法正常运转,就会造成业务停顿,导致不可挽回的 ...
- 徐雷FrankXuLei受邀为阿里巴巴集团马云老板的恒生集团讲授《分布式高并发HA架构和全新.net core高级课程》...
非常荣幸受邀为@阿里巴巴 集团马云老板的恒生集团讲授<分布式高并发HA架构和全新.net core高级课程>学习氛围浓厚公司注重员工培训[强]金融证劵领域的领军企业感谢姚总和柳总杭州人间天 ...
最新文章
- 虚拟地址空间以及编译模式
- 【渝粤教育】电大中专学前儿童语言教育 (4)作业 题库
- 矩池云安装PyQt5,并在VNC中测试使用
- centos php 环境路径,路径(十四):在本地 CentOS 7 上搭建 Web 开发环境 — PHP
- svn的使用--解决commit冲突问题
- 自从上了 Prometheus 监控,睡觉真香!
- 使用GPS经纬度定位附近地点(某一点范围内查询)
- STM32控制WS2812B HAL库
- 刷armbian后必要的安装和配置
- 【C语言】下标法 编写数组元素的输入与输出
- 油溶性CdSe/ZnS量子点,以CdSe为核心,ZnS为壳层,表面由疏水配体包裹的核/壳型荧光纳米材料
- 微服务的优缺点_支付宝上的好医保长期医疗险这款保险到底怎么样?保障全面吗?有哪些优缺点?值得买吗?...
- 关于js中e = e || window.event
- 一个小时学会Maven(参考资料)
- html ui组件,UI组件
- LeetCode数据库题目汇总一(附答案)
- mysql数据字段属性
- 高清优质PPT模板20篇下载(商务型系列)
- 计算机格式化什么意思,终极:计算机格式化是什么意思?
- 安卓编译x264与集成使用ffmpeg-demo
热门文章
- 【Linux】一步一步学Linux——reboot命令(197)
- 【Linux】一步一步学Linux——gzip命令(63)
- 计算机职称在线考试报名系统,计算机职称考试报名时间及入口2021年9月
- mysql字段数值累加_mysql字段值(字符串)累加 | 学步园
- iphone xh5打开ppt预览_教你如何用iPhone拍全景照片
- wave文件 fft_STM32F103 如何实现 FFT?
- Redis源码剖析(七)监视功能
- phoenix客户端操作hbase已经存在的表
- Apache(3)——配置文件里的各参数(1)
- wordpress Oops! That page can’t be found.