Memcached:单节点、集群案例;概念、工作原理

目录

案例前置知识点

Memcached

概念

部署场景

Memcached常用架构

流程

Memcached

Memcached API

数据存储方式

数据过期方式

LRU

Lazy Expiration

Memcached缓存机制

Memcached路由算法

求余数hash算法

一致性hash算法

Memcached分布式

案例

单节点Memcached缓存系统案例

案例环境

初步设置

修改主机名

安装Memcached

配置客户端

部署LAMP

安装Memcached API

连接到Memcached查看数据

Memcached的常用命令

添加(add)命令

gets命令

cas命令(更新)

追加(append)命令

清除所有缓存数据(flush_all)

Memcached主主复制和高可用案例

案例环境

初步设置

修改主机名

部署Memcached服务端

配置Memcached服务端

测试

部署Keepalived实现故障转移

测试


案例前置知识点

Memcached

概念

  • 是一套开源的高性能分布式内存对象缓存系统
  • 所有数据都存储在内存中
  • 支持任意存储类型的数据
  • 非关系型数据库
  • 提高网站的访问速度

部署场景

Memcached是典型的 C/S 架构,因此需要构建服务端与Memcached API客户端。

如果要使用Memcached,是需要开发人员编写API接口程序,由API接口去连接另一端,运维人员只负责平台的搭建

Memcached常用架构

流程
  1. 当客户端访问Web服务器时,Web服务器会通过Memcached API程序去连接Memcached服务器
  2. 如果Memcached的数据库里有用户要请求的数据,就直接返回给用户
  3. 如果数据库中没有要请求的数据,就请求MySQL查询数据
  4. 在MySQL找到数据了就返回给Memcached,然后再返回给客户端

Memcached

Memcached经常用于为数据存储做前端缓存

对于关系型数据库(MySQL),并发I/O的数据量很大时,数据库会承载很高的压力,因为关系型数据库是基于磁盘存储数据,可能会导致客户端的数据延迟较大

但是在Web服务器和MySQL数据库中间加一个缓存服务器,那也就意味着Web服务器获取数据不是直接从MySQL获取,而是从缓存服务器获取


Memcached API

Memcached API程序通常安装在客户端,在上图的环境中,Web服务器就是Memcached的客户端,再由开发人员在网页的代码里添加连接到Memcached服务端的语句

Memcached API是前端应用程序和缓存之间一个桥梁


数据存储方式

  • 数据存储方式:Slab Allocation

按组分配存储空间,每次先分配一个Slab,一个Slab的大小为1M,然后在1M的空间里根据数据划分大小相同的Chunk。

Chunk的大小是根据数据总量进行均分,均分后的每一个Chunk大小是相同的

数据过期方式

像Memcached这种基于内存的非关系型数据库,存储的数据不会一直存储下去,为了解决这种问题就有了过期方式

当数据过期以后,就会清理掉

  • LRU
    • 数据空间不足时,会根据LRU的情况淘汰最近使用最少的记录
  • Lazy Expiration
    • 惰性过期,指的是使用get时查看记录时间,从而检查记录是否已经过期

Memcached缓存机制

当程序写入缓存数据时,Memcached的API接口将Key输入路由算法模块路由到集群中一台服务,之后由API接口与服务器进行通信,完成一次分布式缓存写入


Memcached路由算法

求余数hash算法
  • 先用Key做hash运算得到一串16进制的数字,再做hash算法,根据余数进行路由
  • 适合大多数数据需求,但是不适合用在动态变化的环境中
  • 消耗性能少,速度更快
一致性hash算法
  • 一致性哈希算法的核心思想是将所有节点和数据项映射到一个环形的哈希空间上,从而实现数据的均匀分布。
  • 当节点发生变动时,只需要对部分数据进行重新分配,这大大降低了数据迁移的成本。通过这种方式,一致性哈希算法在分布式系统中实现了高效的数据管理和负载均衡。
  • 适合在动态变化的环境中使用
  • 生成时消耗性能较多,解密时速度慢

Memcached分布式

  • 依赖于Memcached的客户端来实现
  • 多个Memcached服务器是独立的
  • 分布式数据如果存储是由路由算法决定的

利用路由算法结合Key,为Key生成一个hash整数值,通过这个整数来匹配对应的哪个Memcached服务器,最后把这个数据写入到该服务器

路由:这里的路由不是路由器概念上的路由,而是通过对应算法来决定把数据写入到哪个Memcached服务器,尽量做到平均


案例

注意:

如果要做高可用的集群环境,就需要使用专门针对高可用集群的Memcached软件包

如果要做单节点的部署,用的软件包和集群环境的Memcached软件包是不一样的

也就是说如果想把单节点的Memcached服务器更改为高可用集群环境,需要重新安装Memcached

单节点Memcached缓存系统案例

案例环境

操作系统

IP 地址

角色

Centos 7

192.168.10.101

Memcached服务器

Centos 7

192.168.10.103

Memcached API和LAMP客户端


初步设置

打开101和103两台CentOS 7虚拟机,并连接上XShell

修改主机名

为了区分两台主机,使用hostnamectl命令设置主机名为对应的角色

在101主机设置
[root@localhost ~]# hostnamectl set-hostname memcache1
[root@localhost ~]# bash

在103主机设置
[root@localhost ~]# hostnamectl set-hostname memcached-api
[root@localhost ~]# bash

安装Memcached

在101主机(服务端)操作

为了方便实验关闭防火墙和内核安全机制

[root@memcache1 ~]# systemctl stop firewalld
[root@memcache1 ~]# setenforce 0

Memcached需要事件通知库来作为基本的运行环境,先导入该软件包到系统中

安装依赖,解压源码包,进入解压目录,指定安装参数,安装

[root@memcache1 ~]# yum -y install gcc*
[root@memcache1 ~]# tar zxvf libevent-2.1.8-stable.tar.gz
[root@memcache1 ~]# cd libevent-2.1.8-stable
[root@memcache1 libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent
[root@memcache1 libevent-2.1.8-stable]# make && make install

再导入Memcached针对单节点的服务端源码包到系统

回到root家目录,解压源码包,进入解压目录,指定安装参数,安装

  • --with-libevent:指定libevent函数库的位置
[root@memcache1 libevent-2.1.8-stable]# cd
[root@memcache1 ~]# tar zxvf memcached-1.5.1.tar.gz
[root@memcache1 ~]# cd memcached-1.5.1
[root@memcache1 memcached-1.5.1]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/
[root@memcache1 memcached-1.5.1]# make && make install

回到root家目录,编写一个能够方便管理Memcached状态的脚本,因为脚本中用到了killall命令,所以需要安装killall命令的依赖软件包

[root@memcache1 memcached-1.5.1]# cd
[root@memcache1 ~]# vim memcached_service.sh
[root@memcache1 ~]# yum -y install psmisc

脚本内容如下

#!/bin/bash 
CMD="/usr/local/memcached/bin/memcached"
start(){
  $CMD -d -m 128 -u root
}
stop(){
  killall memcached;
}

ACTION=$1
  case $ACTION in
  'start')
     start;;
  'stop')
     stop;;
'restart')
     stop
     sleep 2
     start;;
*)
     echo 'Usage:{start|stop|restart}' 
esac 

然后为该脚本添加执行权

[root@memcache1 ~]# chmod +x memcached_service.sh

然后使用该脚本启动Memcached,再使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值