redis以其优秀的性能,丰富的数据结构,高可用和分布式的特性,应用各类大大小小的系统中。做为当今烂大街的技术,redis是开发者必须掌握的技能之一 大数据时代单点已知足不了企业及系统各类需求,分布式及微服务盛行。redis3.0推出了redis cluster的集群方案。目前已成为主流 复制与哨兵是redis实现高可用的基础。下文将学习搭建主备结构的单机多实例集群,下一节学习redis clusterredis
令一个redis节点成为另外一个节点的从节点的配置很简单bash
slaveof {masterIP} {port}
复制代码
能够经过配置文件,也能够在运行期动态配置网络
准备四个配置文件,分别为redis-6379.conf, redis-6380.conf, redis-6381.conf, redis-6382.conf。其中redis-6379.conf为主节点,其他三个为从节点数据结构
redis-6379.conf配置app
# 绑定为本地IP
bind 127.0.0.1
# 是否设置为守护进程
daemonize yes
# 端口
port 6379
# 工做目录
dir /var/redis
# 日志文件
logfile redis-6379.log
# 开启AOF
appendonly yes
# AOF文件名
appendfilename redis-6379.aof
复制代码
redis-6380.conf配置分布式
# 绑定为本地IP
bind 127.0.0.1
# 是否设置为守护进程
daemonize yes
# 端口
port 6380
# 工做目录
dir /var/redis
# 日志文件
logfile redis-6380.log
# 使其成为redis-6379的从节点
slaveof 127.0.0.1 6379
复制代码
其他两个从节点配置如redis-6380,修改端口便可。其他配置采用默认配置微服务
启动四个redis服务性能
redis-server ./redis-6379.conf
redis-server ./redis-6380.conf
redis-server ./redis-6381.conf
redis-server ./redis-6382.conf
复制代码
若是配置错误启动会失败并输出错误信息。启动后能够用redis-cli发送ping学习
redis-cli -p 6379 ping
复制代码
输出pong,代表redis服务已正常启动测试
亦可经过ps命令查看进程
ps -ef | grep redis
复制代码
redis-cli客户端链接主节点,使用info replication
查看主节点信息
info replication
查看从节点信息
再向主节点set这个键,从节点再次get这个键
至此,一主三从的单机多实例redis集群已搭建结束。这种结构适合有大量的读场景,能够把读命令分担到从节点,主节点只负责写,从而下降主节点的压力。但对于有写较多的场景,这种结构反而会由于主节点不断向直连的从节点发送写命令形成大量网络开销,同时也下降主节点的稳定性。此时能够采用树状的主从结构,即从节点下还有从节点(从节点slaveof从节点),经过中间层,能够下降主节点压力,延迟偏大是缺点之一
在主从模式下的集群,若是master挂掉了,会带来巨大的灾难,首先要选出一个节点为主节点,再修改其他从节点的主节点配置,同时还要让使用服务的客户端修改相应的节点地址,这种繁琐的处理将会带来巨大的损失。在redis2.8推出了哨兵模式,redis sentinel来帮助解决主节点故障的问题(ps: redis sentinel不支持树状的集群)
sentinel会按期检测redis,若是超过了指定数目的sentinel认为主节点已下线了,那么sentinel将会从全部从节点中选举一个节点成为主节点,帮助完成故障转移处理
setinel的主要配置为 sentinel monitor {masterName} {masterIP} {port} {num}
其中masterName为给主节点起的名字,num表示当多少sentinel认为主节点下线进行故障转移
常见配置还有以下
# sentinel按期检测节点,当超过配置时间时,sentinel主观认为该节点已下线
sentinel down-after-milliseconds {masterName} {times(毫秒)}
# sentinel故障转移时间限制,超过该时间则认为本次故障转移失败
sentinel failover-timeout {masterName} {times(毫秒)}
# 监控的主节点设置了密码,sentinel必须配置相应的密码
sentinel auth-pass {masterName} {times(毫秒)}
复制代码
更多配置可参考sentinel文档 redis.io/topics/sent…
配置三个哨兵
准备三个配置文件sentinel-26379.conf,sentinel-26380.conf,sentinel-26381.conf
# 绑定本地ip
bind 127.0.0.1
# 三个否为守护进程
daemonize yes
# 端口
port 26379
# 工做目录
dir /var/redis
# 日志文件
logfile sentinel-26379.log
# 哨兵配置
sentinel monitor redis6379 127.0.0.1 6379 2
复制代码
由于sentinel会监控主节点,其他节点就没必要再配置,由sentinel自动帮助完成
其余sentinel配置采用默认,剩余两个配置相似,只需修改一下端口及日志文件
启动sentinel服务
redis-sentinel sentinel-26379.conf
redis-sentinel sentinel-26380.conf
redis-sentinel sentinel-26381.conf
复制代码
启动后咱们观察配置文件
# 绑定本地ip
bind 127.0.0.1
# 三个否为守护进程
daemonize yes
# 端口
port 26379
# 工做目录
dir "/private/var/redis"
# 日志文件
logfile "sentinel-26379.log"
# 哨兵配置
sentinel myid 6fbd88616019490a57593fb53cd25ee2378c7ff5
# Generated by CONFIG REWRITE
protected-mode no
sentinel deny-scripts-reconfig yes
sentinel monitor redis6379 127.0.0.1 6379 2
sentinel config-epoch redis6379 0
sentinel leader-epoch redis6379 0
sentinel known-replica redis6379 127.0.0.1 6382
sentinel known-replica redis6379 127.0.0.1 6380
sentinel known-replica redis6379 127.0.0.1 6381
sentinel known-sentinel redis6379 127.0.0.1 26381 7d9673a79af38b090caa73105f76a4ac67f9fc76
sentinel known-sentinel redis6379 127.0.0.1 26380 890fa4e3723e7faaaf60fddadf1857821e07e873
sentinel current-epoch 0
复制代码
sentinel自动发现了从节点以及其他的sentinel节点
模拟主节点故障下线状况,链接redis-6379,发送shutdown
命令(亦可kill -9进程)
redis-cli -p 6379 shutdown
复制代码
此时咱们再查看redis-6380和redis-6381信息
redis-cli -p 6380 info replication
复制代码
redis-cli -p 6381 info replication
复制代码