一 Redis概念
如果涉及大数据量的需求,比如淘宝抢购,或者是主页访问量瞬间增大的时候,单一数据库来保存数据的系统由于面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,大量访问极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。二 Redis安装和环境配置: 下载redis,查看README文件,选择SYSTEMD方式编译,编译时要安装部分依赖,全部ENTER回车即可
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
NoSQL内存数据库(非关系型的数据库)是最近兴起的新型数据库,它的特点就是把数据放在内存中操作,数据处理速度相对于磁盘提高了好几个量级,因此,通过把经常访问的数据转移到内存数据库中,不但可以缓解Oracle的访问压力,而且可以极大提高数据的访问速度,提高用户体验。
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的键值对(Key-Value)数据库。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
Redis是一个内存型数据库。不限于此,Redis也可以把数据持久化到磁盘中,或者把数据操作指令追加了一个日志文件,把它用于持久化。也可以用Redis容易的搭建master-slave架构用于数据复制。
redis优点
如果我们把数据放在 Redis 中,是基于内存的,让服务端直接去读取内存中的数据,读写速度会快速增加,并且会减小数据库的压力,但是内存进行数据存储开销比磁盘大,一般只是使用 Redis 存储一些常用和主要的数据,比如用户登录的信息等。
- 基于内存运行,性能高效
- 支持分布式,理论上可以无限扩展
- key-value存储系统
- 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
文章图片
编译成功,make install 安装即可
文章图片
使用源码包里的脚本install_server.sh来创建实例:由于使用systemd编译的,所以提示使用systemd命令,本实验不使用systemd命令,更改install_server.sh文件即可
文章图片
使用脚本来创建实例,创建的时候有提示,全部回车即可。
文章图片
上面创建了两个实例端口分别为6379、6380。删除实例6380
文章图片
文章图片
默认redis只监听本机回环接口127.0.0.1,远程主机无法访问,修改redis监听端口为0.0.0.0表示监听本机所有接口。
文章图片
文章图片
进入redis实例,查看信息
文章图片
server1 此时的状态为master,没有slave
文章图片
添加server2上的redis为slave:
server2上安装redis
server1上把redis目录发送给server2
[root@server1 ~]# scp -r redis-6.2.4 server2:
server2上安装
文章图片
文章图片
server2上查看redis信息,状态为master
文章图片
文章图片
把server2变为server1的slave节点 :下图写的是server1的ip和端口
文章图片
文章图片
【笔记|Redis-redis概念、配置、Sentinel高可用】server2 redis-cli 进入实例查看信息发现6379已经变为slave:
文章图片
server1上查看redis信息识别到了slave:
文章图片
测试:server1上定义一个key,值是hahaha。
文章图片
server2上同步到数据
文章图片
slave只读,redis作为slave接入master时会放弃本机所有数据,和master保持完全一致
redis支持的数据类型:三 RedisSentinel高可用配置
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)
redis常用指令:
config get *//查看配置
select 1//选择数据库 ,总共16个数据库,0~15
flushdb//清空当前数据库
flushall//清空所有数据库
move key 1//移动key到其他数据库
del key//删除
rename oldkey newkey//改名
expire key 10//设置过期时间
persist key//设置持久化
keys user*//查询
exists key//判断是否存在
文章图片
高可用时,当master和slave之间网络故障后,sentinel哨兵模式会在上图右边部分slave中选取一个成为新的master,其他slave又指向新的master,当原来master恢复后,只能作为slave节点,此时原master会放弃本机所有数据,这就导致一个问题:在原master和slave之间网络故障后,客户端还在向原master里面写入数据,原master转换为slave时同样会放弃客户端传过来的新数据,导致客户数据丢失。所以添加参数min-slave-to-write=2,最小连接数是2。保证当和master所链接的slave小于2个时,禁止客户向master写入数据。
Redis 的 Sentinel (哨兵)系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:首先再添加server3作为slave 端,和server2相同操作:
Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。
- 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
- 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
- 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 –sentinel 选项来启动 Redis Sentinel 。
server1上热生效:重启服务没了
文章图片
文章图片
server3查看redis状态为slave:
文章图片
server1查看redis状态server3作为slave已经添加到集群节点
文章图片
resdis一主两从实现,server1为master,server2、3是slave
文章图片
添加到配置文件永久生效
文章图片
文章图片
server1 master上配置sentinel哨兵文件,并发送给server2、3
文章图片
文章图片
文章图片
文章图片
三个结点上全部运行哨兵进程。哨兵进程不打入后台是为了清楚观察自动切换master变化:
server1上显示server1为master,2、3为slave。
当server1哨兵进程运行后,/etc/redis/sentinel.conf信息就变了。所以server1上不要先运行哨兵进程,在把哨兵文件发给server2、3。
文章图片
server2、3上进程显示一主两从:
文章图片
打开一个新的shell连接到server1上,关闭server1上的redis:
文章图片
server3上哨兵进程显示,选举server3成为新的master
文章图片
把server1启动起来,server1添加到slave中
文章图片
-down表示server1已启动,不在是down状态。
文章图片
打开一个新的shell连接到server3上,查看redis信息,发现一主两从,server3是master,1、2是slave:
文章图片
R
推荐阅读
- 笔记|mysql(三)路由器读写分离、MHA高可用
- 笔记|mysql(二)优化mysql
- 笔记|nfs网络文件系统
- linux|jenkins
- linux|在安装Docker-ce的时候遇到报错
- 笔记|Linux笔记4(软件包管理,Shell编程)
- c++|C++核心编程-1 内存分区模型
- 笔记|Linux笔记2(帮助命令,文件目录类,时间日期类)
- 笔记|Linux笔记3(用户权限类,搜索查找类,压缩解压类,磁盘管理类,进程管理类,系统定时任务)