提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、缓存服务器作用
许多Web应用都将数据保存到 RDBMS(关系数据库管理系统)中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。
前言
Memcached/redis是高性能的分布式内存缓存服务器,采用以NOSQL键值对存储方式,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web等应用的速度、 提高可扩展性。
一、Memcached架构
memcached是一款NOSql、采用key/value键值对存储的内存式的分布式缓存服务器。
1、特点
①内置内存存储方式:
重启操作系统会导致全部数据消失
②简单key/value存储:
服务器不关心数据本身的意义及结构,只要是可序列化数据即可。
存储项由“键、过期时间、可选的标志及数据”四个部分组成;
③不互相通信的分布式:
各个memcached不会互相通信以共享信息。
2、服务框架
工作原理:
①检查用户请求的数据是缓存中是否有存在,如果存在直接把请求的数据返回,无需查询数据库。
②如果请求的数据在缓存中找不到,才去查询数据库。返回请求数据的同时,把数据缓存一份。
③保持缓存的“新鲜性”,每当数据发生变化的时候要同步的更新缓存信息。
3、部署测试
安装memcached
# yum -y install memcached
修改配置文件
# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="1000"
OPTIONS=""
--------------------------------------------------
#参数
PORT 访问端口号,可用于同机多实例
USER 系统用户
MAXCONN 最大连接数
CACHESIZE 缓存区大小
OPTIONS 监听的网络地址
启动memcached
# systemctl start memcached.service
# systemctl enable memcached.service
使用memcached原始命令测试
# yum -y install telnet / ˈtelnet 远程登陆系统
# telent 192.168.116.131 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
set name 0 900 5
hahah
STORED
--------
get name
VALUE name 0 5
hahah
END
--------------------------------------------------
name #key名
0 #key的id号
900 #缓存过期日期,单位为s,0为永久
5 #value长度
三、 Redis缓存服务器
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。
官网:http://redis.io
特点:
①丰富的数据结构
②支持持久化,RDB和AOF模式
③哨兵模式,故障转移高可用集群
④支持主从
Redis+Sentinel主从集群
主从同步原理
从服务器会向主服务器发出SYNC指令,当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作,也就是将主服务器的数据写入RDB文件中。在数据持久化期间,主服务器将执行的写指令都缓存在内存中。
在BGSAVE指令执行完成后,主服务器会将持久化好的RDB文件发送给从服务器,从服务器接到此文件后会将其存储到磁盘上,然后再将其读取到内存中。
这个动作完成后,主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器。
注:即使有多个从服务器同时发来SYNC指令,主服务器也只会执行一次BGSAVE,然后把持久化好的RDB文件发给多个下游。
环境:三台Centos7主机
下载地址:
http://download.redis.io/releases/
ip role
192.168.116.131 master
192.168.116.132 slave
192.168.116.133 slave
1.安装部署Redis
所有节点
# tar -xf redis-7.0.0.tar.gz -C /usr/local/
# mv /usr/local/redis-7.0.0/ /usr/local/redis
# mkdir /etc/redis
# cd /usr/local/redis/
# make
# cp redis.conf /etc/redis/6379.conf
# cp utils/redis_init_script /etc/init.d/redis
------------------------------------------------------------------------------
# vim /etc/init.d/redis
# chkconfig: 2345 10 90 #能够在什么模式下启动(图形+命令行)
# description: start redis #描述
EXEC=/usr/local/redis/src/redis-server #服务器文件位置
CLIEXEC=/usr/local/redis/src/redis-cli #客户端文件位置
$EXEC $CONF & #后台运行
------------------------------------------------------------------------------
# chmod +x /etc/init.d/redis
# chkconfig --add redis
# chkconfig redis on
------------------------------------------------------------------------------
2.开启集群
master:
# vim /etc/redis/6379.conf
protected-mode no # 关闭保护模式
bind 0.0.0.0 # 监听本机所有地址
slave:
# vim /etc/redis/6379.conf
protected-mode no
bind 0.0.0.0
slaveof 192.168.116.131 6379 # 作为谁的slave,ip为master的ip
3.开启哨兵模式
所有节点
# vim sentinel.conf
protected-mode no # 关闭保护模式
sentinel monitor mymaster 192.168.116.131 6379 2 # 监控master状态
sentinel down-after-milliseconds mymaster 30000 # master断线时延
sentinel failover-timeout mymaster 10000 # 故障转移时延 failover 故障转移;故障切换;容错;失效接管;失效转移
4.启动Redis和Sentinel
所有节点
# systemctl daemon-reload
# systemctl start redis
# ./src/redis-sentinel sentinel.conf
5.集群故障转移
# src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.116.132,port=6379,state=online,offset=213759,lag=1
slave1:ip=192.168.116.133,port=6379,state=online,offset=213759,lag=1
master_replid:44951c800b54c5c9cdbfb435f7d742f46b65173e
master_replid2:76f0cacab51d344adf7113937c11539eb10bbd90
master_repl_offset:213904
second_repl_offset:209481
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:31870
repl_backlog_histlen:182035
127.0.0.1:6379> get name
"hahah"
127.0.0.1:6379>