memcached基础与配置详解

88201440 2020-01-03

一、memcached介绍

Memcache 官网 http://memcached.org/

(1)memcache本身没有像 redis 所具备的数据持久化功能,比如 RDB 和 AOF 都没有,但是可以通过做集群同步的方式,让各 memcache 服务器的数据进行同步,从而实现数据的一致性,即保证各 memcache
的数据是一样的,即使有任何一台 memcache 发生故障,只要集群种有一台 memcache 可用就不会出现数据丢失,当其他 memcache 重新加入到集群的时候可以自动从有数据的 memcache 当中自动获取
数据并提供服务。

(2)Memcache借助了操作系统的 libevent 工具做高效的读写。 libevent 是个程序库,它将 Linux 的 epoll 、BSD 类操作系统的 kqueue 等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发
挥高性能。 memcached 使用这个 libevent 库,因此能在 Linux 、 BSD 、 Solaris 等操作系统上发挥其高性能 。

(3)Memcache 支持最大的内存存储对象为 1M 超过 1M 的 数据可以使用客户端压缩或拆分报包放到多个key中,比较大的数据在进行读取的时候需要消耗的时间比较长, memcache 最适合 保存 用户的 session
实现 session 共享 Memcached 存储数据时 , Memcached 会去申请 1MB 的内存 , 把该块内存称为一个slab, 也称为一个 page 。

(4)memcached具有多种语言的客户端开发包,包括: Perl/PHP/JAVA/C/P ython/Ruby/C#/

 安装方式:yum安装和源码编译

  yum安装:

yum  install memcached

 修改配置文件及启动memcached服务

[~]#vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="4069"  最大连接数
CACHESIZE="1024" 最大缓存数1G
OPTIONS=""

[~]#systemctl start memcached

  查看memcached监听的端口,监听的是11211端口。

memcached基础与配置详解

memcached程序的常用选项:

-m <num>:Use <num> MB memory max to use for object storage; the default is 64 megabytes.
-c <num>:Use <num> max simultaneous connections; the default is 1024.
-u <username>:以指定的用户身份来运行进程;
-l <ip_addr>:监听的IP地址,默认为本机所有地址;
-p <num>:监听的TCP端口, the default is port 11211.
-U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off.
-M:内存耗尽时,不执行LRU清理缓存,而是拒绝存入新的缓存项,直到有多余的空间可用时为止;
-f <factor>:增长因子;默认是1.25;
-t <threads>:启动的用于响应用户请求的线程数;

memcached集群 部署架构:

基于 magent 的部署架构:

该部署方式 依赖于 magent 实现 高可用, 应用端通过 负载 服务器连接到 magent ,然后 再由 magent代理用户应用请求到 memcached 处理,底层的 memcached 为 双主结构会自动同步数据, 本部署方式
存在 magent 单点问题因此需要两个 magent 做高可用 。

memcached基础与配置详解

Repcached 实现原理

在master 上可以通过 X 指定 replication port ,在 slave 上通过 x/ X 找到 master 并 connect 上去,事实上,如果同时指定了 x/ X repcached 一定会尝试连接,但如果连接失败,它就会用 X 参数来
自己 listen (成为 master );如果 master 坏掉, slave 侦测到连接断了,它会自动 listen 而成为 master而如果 slave 坏掉, master 也会侦测到连接断,它就会重新 listen 等待新的 slave 加入。
从这方案的技术实现来看,其实它是一个单master单slave的方案,但它的master/slave都是可读写的,
而且可以相互同步,所以从功能上看,也可以认为它是双机master master方案。

简化后 的部署架构:

magent已经有很长 时间 没有更新, 因此 可以不再使用 magent ,直接通过负载均衡连接之 memcached任然 有两台 memcached 做高可用, memcache d 会自动同步数据保持数据一致性, 即使 一台 memcached
故障也 不影响业务正常运行 故障的 memcached 修复上线后再自动从另外一台 同步 数据 即可 保持数据一致性。
memcached基础与配置详解

二、开始源码编译memcached

环境准备:

A主机:192.168.37.17

B主机:192.168.37.27

两个主机同时进行以下编译方式:

 下载包路径:

wget  https://sourceforge.net/projects/repcached/files/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz/download

1、安装对应的依赖包

[]#yum install libevent libevent-devel -y

2、解压安装包,并切换到此目录下开始编译

[]#cd /usr/local/src
[]#tar -xvf  memcached-1.2.8-repcached-2.2.1.tar.gz 
[]#cd memcached-1.2.8-repcached-2.2.1/
[]#./configure --prefix=/usr/local/repcached  --enable-replication

3、make与make  install安装,此时就会报错

memcached基础与配置详解

解决方案:

[]#pwd
/usr/local/src/memcached-1.2.8-repcached-2.2.1
[]#vim memcached.c

 删除以下几行

memcached基础与配置详解

 添加下面几行

#ifndef IOV_MAX
#define IOV_MAX 1024
#endif

 再执行一次make  && make install 就可以安装成功,此时源码编译完成。

[]#make && make install

 启动memcached 

 启动B主机的机器,其中-x后面跟的IP地址,是监听A主机的IP地址,-X监听的是一个端口号 

[]#/usr/local/repcached/bin/memcached  -d -m 2048 -p 11211 -u root -c 2048 -x 192.168.37.17 -X 16000

查看启动状态:

memcached基础与配置详解

启动A源码编译的主机监听B主机IP地址

[]#/usr/local/repcached/bin/memcached  -d -m 2048 -p 11211 -u root -c 2048 -x 192.168.37.27 -X 16000

注意:双方都监听了对方的端口后,指定的-X端口16000就会消失,不会被看到 

此时已经实现memcached高可用功能。

相关推荐