一、概述
1、Memcached简介
Memcached作为通用的基于内存的分布式缓存系统,它通过内存缓存的数据和对象减少外部数据的源的访问次数,常用来加速数据库驱动的动态网站。
- 客户端软件:具备可访问的memcached服务器列表;
- 基于客户端的Hash算法:能够基于“Key”选择访问的服务器;
- 服务器软件:保存内部Hash表中Keys所对应的值;
- LRU:最近最少使用统计,决定在内存溢出或内存重用时旧数据的丢弃。
(2)设计哲学
- 简单的Key/Value存储:不关心数据长啥样,条目只由key、过期时间、可选标记和裸数据组成,需要提前序列化上传的数据,一些操作命令可以在底层数据上操作,但是是以一种简单的方式;
- 一半在客户端一半在服务器端的逻辑:客户端知道该为一个条目选择服务器进行读写,也知道服务器不可访问时的步骤,服务器知道如何存储和读取条目,也知道何时回收和整理内存;
- O(1)算法复杂度:所有操作命令实现必须很快,并且尽可能无锁化设计,查询即使在比较慢的机器上也应该控制在1ms,高端服务器上可以有上百万的查询吞吐。
- 健忘特色:基于LRU算法, 在指定的时间后,条目会失效。
- 缓存失效:避免向所有主机广播条目变化,客户端直接通知服务器其所持有的数据失效。
2、关于Openstack
Memcached是一个内存缓存Daemon,能为大多数的Openstack服务提供临时数据的缓存,例如tokens。
对于缓存的访问无需通过HAProxy处理,因为复制访问都是在一种尝试性的状态,相反,OpenStack服务必须由足够多的主机运行Memcached来提供缓存服务。
Memcached 客户端通过实现Hash负载均衡访问虚拟机间的对象,如果失败的实例只影响一部分对象,客户端将自动从实例列表中移除,间隔SLA定义为几分钟。
二、脚本
安装配置非常简单,install-configure-memcached.sh如下
1 2 3 4 5 |
#!/bin/sh . ../0-set-config.sh ./style/print-split.sh "Memcached Installation" ./pssh-exe C "yum install -y memcached" ./pssh-exe C "systemctl enable memcached.service && systemctl start memcached.service" |
在使用配置时,只需要制定运行memcached的主机列表即可,如下:
1 |
memcached_servers = controller01:11211,controller02:11211,controller03:11211 |
默认情况是controller01处理缓存服务,如果该节点宕机,controller02或controller03将继续完成该缓存服务。
三、参考文档
https://github.com/memcached/memcached/wiki/Overview
https://docs.openstack.org/ha-guide/controller-ha-memcached.html
https://docs.openstack.org/ha-guide/environment-memcached.html
四、源码
脚本源码:https://github.com/zjmeixinyanzhi/Openstack-HA-Install-Shells
五、系列文章
Openstack云平台脚本部署之Galera高可用集群配置(二)
Openstack云平台脚本部署之RabbitMQ高可用集群部署(三)
Openstack云平台脚本部署之Memcached配置(五)
Openstack云平台脚本部署之Keystone认证服务配置(六)
Openstack云平台脚本部署之Glance镜像服务配置(七)
Openstack云平台脚本部署之Nova计算服务配置(八)
Openstack云平台脚本部署之Neutron网络服务配置(九)
Openstack云平台脚本部署之Dashboard配置(十)
Openstack云平台脚本部署之Cinder块存储服务配置(十一)
Openstack云平台脚本部署之Ceilometer数据收集服务配置(十二)
Openstack云平台脚本部署之Aodh告警服务配置(十三)
code
more code
~~~~