一.redis简介
1.概念
redis是一个基于内存的高性能key-value数据库,和传统关系型数据库不一样,不一定遵循传统数据库的基本要求。
2.redis的特点
Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,也可以被当作一 个功能加强版的memcached来用
3.redis的数据结构
redis是以key-value store存储,data structure service数据结构服务器
键可以包含:string(字符串),哈希,链表(list),集合(set),有序集合(Zset)。这些数据结合都支持pysh/pop,add/remove及取交集和并集更丰富的操作
redis支持各种不同的方式排序,为了保证效率,数据都是缓存在内存中,它也可以周期性的把更新数据写入磁盘后把修改操作写到追加文件。
4.redis的额外功能
提供了键过期功能,可以用来实现缓存
提供了发补订阅功能,可以用来实现消息系统
支持Lua脚本功能,可以利用Lua脚本创造出新的redis命令
5.redis速度快的原因
redis是把所有的数据都放到内存中
redis是用c语言实现的,一般来说c语言实现的程序“距离“操作系统最近,执行速度相对更快
redis使用了单线程架构,预防了多线程可能产生的竞争问题。
6.分布式
redis支持主从的模式。原则:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接master来同步数据。
这是一个典型的分布式读写分离模型。我们可以利用master来插入数据,slave提供检索服务。这样可以有效减少单个机器的并发访问数据
7.高可用
redis从2.8版本正式提供了高可用实现redis setinel,它能够保证redis节点的故障发现和故障自动转移。
redis从3.0版本正式提出了分布式redis cluster,它是redis真正分布式的实现,提供了高可用,读写及其容量的扩展性。
redis有三种高可用:
a.主从
b .哨兵
Redis sentinel是一个分布式系统中监控redis主从服务器,并在主服务器下线时自动进行故障转移。其中有3个特性:
监控(Monitoring): Sentinel会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification):当被监控的某个Redis服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知。
自动故障转移(Automatic failover):当一个主服务器不能正常工作时,Sentinel会开始一次自动故障转移
c.集群
二.redis的主从复制
1.实验环境
主机名 (IP) 服务
server1(172.25.254.1) master
server2(172.25.254.2) slave
server3(172.25.254.3) slave
2.redis主从复制的部署
server1(master):
安装redis
a.官网下载压缩包并且解压
[root@server1 ~]# tar zxf redis-5.0.3.tar.gz
b.安装依赖包并且编译安装
[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# pwd
/root/redis-5.0.3
[root@server1 redis-5.0.3]# yum install gcc -y
[root@server1 redis-5.0.3]# make && make install
c.在相应目录下纸型安装脚本安装
[root@server1 redis-5.0.3]# cd utils/
[root@server1 utils]# ./install_server.sh
完成之后会出现redis的端口
本次模拟实验需要的配置
a.编辑配置文件,修改bind端口
注:默认改文件的bind端口是本机的回环地址,也就是127.0.0.1,但是这样的话,访问redis只能通过本机的客户端连接,无法进行远程连接,这样可以避免redis服务暴露于危险的网络环境中,防止别人通过远程连接盗取数据,在本次实验中为了实验效果,默认是设置为0.0.0.0及任意网段的主机进行连接,如果注释的话表示接收来自于可用网络接口的连接,这在企业中是不会出现的。
文件编辑内容如下:
b.重启服务查看端口
server2,server3(slave):
安装redis(同server1)
a.安装包解压
b.安装依赖软件编译安装
c.执行安装脚本,指定redis的相应配置(同server1)
编辑server2和server3的配置文件
server2:
文件编辑如下:
server3的配置文件编辑同server2,这里不再演示
b.重启服务查看端口
测试:
a.在server1(master)上添加key-value数值
2.在server2和server3(都是slave)上查看数据是否同步
三.基于哨兵的redis的主从切换
server1:
a.在redia的解压目录下将关于哨兵的配置文件复制到redis的控制配置文件目录下
b.编辑配置文件
[root@server1 redis-5.0.3]# cd /etc/redis/
[root@server1 redis]# ls
6379.conf sentinel.conf
[root@server1 redis]# vim sentinel.conf
文件编辑内容如下:
17 protected-mode no //关闭保护模式
84 sentinel monitor mymaster 172.25.254.1 6379 2
//指定要监控的master,mymaster是定义的master名字,quorum为法定票数2,此处指的是sentinel的数,
只有指定的sentinel同意时才认为sentinel做的决策是有效的,一般大于sentinel数量的半数。可以有多
个master,一组sentinel集群可以监控N个主从复制架构
113 sentinel down-after-milliseconds mymaster 10000
//至少多长时间 连不上才认为主的离线了。单位为ms, 即连接超时时长
121 sentinel parallel-syncs mymaster 1
// 刚刚设定为新主时,允许同时有多少个从向主发起同步请求。
146 sentinel failover-timeout mymaster 180000
//当master故障时,把新的从提升为master,多长时间提不上就认为故障转移失败。
c.将哨兵配置文件发到server2和server3上的相应目录下
c.分别重启server1,2,3上的redis服务
查看状态
在server1上:
可以查看到俩个slave的状态
在server2和server3上也能查到对应的slave的状态