88201440 2020-01-03
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端口。
-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>:启动的用于响应用户请求的线程数;
该部署方式 依赖于 magent 实现 高可用, 应用端通过 负载 服务器连接到 magent ,然后 再由 magent代理用户应用请求到 memcached 处理,底层的 memcached 为 双主结构会自动同步数据, 本部署方式
存在 magent 单点问题因此需要两个 magent 做高可用 。
在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 修复上线后再自动从另外一台 同步 数据 即可 保持数据一致性。
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安装,此时就会报错
解决方案:
[]#pwd /usr/local/src/memcached-1.2.8-repcached-2.2.1 []#vim memcached.c
删除以下几行
添加下面几行
#ifndef IOV_MAX #define IOV_MAX 1024 #endif
再执行一次make && make install 就可以安装成功,此时源码编译完成。
[]#make && make install
启动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
查看启动状态:
启动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高可用功能。