安装redis服务:
下载地址: wget https://download.redis.io/releases/redis-6.2.4.tar.gz
解压:tar -zxvf redis-6.2.4.tar.gz
cd redis-6.2.4/
安装: make && make install
安装完成之后将有
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server这些命令
直接执行 redis-server命令将以默认配置文件启动redis服务
下面介绍redis集群的配置方式,参考文档:
https://blog.csdn.net/miss1181248983/article/details/90056960
https://zhuanlan.zhihu.com/p/72945689
集群模式:主从模式, Sentinel, Cluster
主从模式:
特点:
-
主库有读写权限,从库只读,从库接收主库同步的数据
-
一对多关系, 一个master对应1个或多个slave
-
master挂了不会在slave重新选master,且redis不再提供写功能
-
slave挂了不影响其他slave的读和master的写
缺点:
不可高可用, 当master挂掉以后无法写入数据。
主从配置(同台机器):
配置master节点:
vim redis.conf
# 修改或新增键对应的值, 下同
bind 0.0.0.0
daemonize yes
masterauth 123456
requirepass 123456
appendonly yes
port 6379
pidfile /var/run/redis6379.pid
logfile "/var/log/redis/redis1.log"
appendfilename "appendonly1.aof"
配置slave节点:
cp redis.conf redis_slave.conf
vim redis_slave.conf
bind 0.0.0.0
daemonize yes
masterauth 123456
requirepass 123456
appendonly yes
port 6389
pidfile /var/run/redis6389.pid
logfile "/var/log/redis/redis2.log"
appendfilename "appendonly2.aof"
replicaof 127.0.0.1 6379
配置slave2节点:
cp redis.conf redis_slave2.conf
vim redis_slave2.conf
bind 0.0.0.0
daemonize yes
masterauth 123456
requirepass 123456
appendonly yes
port 6399
pidfile /var/run/redis6399.pid
logfile "/var/log/redis/redis3.log"
appendfilename "appendonly3.aof"
replicaof 127.0.0.1 6379
启动服务:
redis-server redis.conf
redis-server redis_slave1.conf
redis-server redis_slave2.conf
客户端:
开启3个命令终端执行:(执行之后需要输入auth 123456,认证密码)
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6389
redis-cli -h 127.0.0.1 -p 6399
Sentinel模式
描述:由于主从模式的弊端,因此Sentinel模式应运而生, sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义
特点:
-
主动选择,当master挂了之后,Sentinel会在slave中选择一个做为master,并修改他们的配置文件。
-
master重新启动后不再是master而是slave
-
sentinel因为也是一个进程有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群
-
一个sentinel或sentinel集群可以管理多个主从Redis,多个sentinel也可以监控同一个redis
配置master:
vim sentinel.conf
port 26379
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile "/usr/local/share/redis/sentinel.log"
dir "/usr/local/share/redis/sentinel" #sentinel工作目录
sentinel monitor mymaster 127.0.0.1 6379 2 #判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000 #判断master主观下线时间,默认30s
配置slave:
cp sentinel.conf sentinel-slave1.conf
vim sentinel-slave1.conf
port 26389
daemonize yes
pidfile /var/run/redis-sentinel1.pid
logfile "/usr/local/share/redis/sentinel1.log"
dir "/usr/local/share/redis/sentinel1" #sentinel工作目录
sentinel monitor mymaster 127.0.0.1 6379 2 #判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000 #判断master主观下线时间,默认30s
配置slave2:
cp sentinel.conf sentinel-slave2.conf
vim sentinel-slave2.conf
port 26399
daemonize yes
pidfile /var/run/redis-sentinel2.pid
logfile "/usr/local/share/redis/sentinel2.log"
dir "/usr/local/share/redis/sentinel2" #sentinel工作目录
sentinel monitor mymaster 127.0.0.1 6379 2 #判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000 #判断master主观下线时间,默认30s
启动服务:
mkdir /usr/local/share/redis/sentinel
mkdir /usr/local/share/redis/sentinel1
mkdir /usr/local/share/redis/sentinel2
redis-sentinel sentinel.conf
redis-sentinel sentinel-slave1.conf
redis-sentinel sentinel-slave2.conf
查看日志:
tailf /usr/local/share/redis/sentinel.log
tailf /usr/local/share/redis/sentinel1.log
tailf /usr/local/share/redis/sentinel2.log
模拟宕机:
杀手master:kill -9 102360
观察日志, 以及执行操作(会重新选举master)
再次启动6379redis(将以slave身份加入集群):redis-server redis.conf
Cluster模式
描述:
Redis Cluster是一种服务器Sharding技术,3.0版本开始正式提供。 Redis Cluster是一种服务器Sharding技术,3.0版本开始正式提供。sentinel模式基本可以满足一般生产要求,具备高可用,但是数据量过大到一台 服务器放不下的情况时,主从模式就不能满足需求,需要对存储的数据分片。
特点:
多个redis节点网络互联,数据共享
所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用
客户端可以连接任何一个主节点进行读写
知识点:
- 同步方式:
1. appendfsync always 每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
2. appendfsync everysec 每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,系统默认
3. appendfsync no 完全依赖os,性能最好,持久化没保证
- 过期键的删除策略
1. 定时删除。过期键较多的情况下,大量的CPU用于删除键而影响了客户端的请求。
2. 惰性删除。只有过期键被访问才删除,可能会导致过期键过多,造成内存浪费和溢出。
3. 定期删除。限制时长和频率对过期键进行删除,难点在于时长和频率难以确定。
- Redis的过期键删除策略?
Redis采用的是惰性删除和定期删除,配合这两种策略来取得CPU和内存的平衡。
- RDB和AOF文件中会包含过期键吗?
不包含。