redis集群
2020-09-01 本文已影响0人
Geroge1226
1、业务背景
在实际生产中使用redis,如果只使用单节点方式会存在以下问题。
(1)redis所在服务宕机,或者是进程死掉,则服务继续使用过redis提供服务,而且如果redis服务硬盘坏掉及时做了持久化,也会将数据丢失掉。
(2)单个redis服务内存大小有限,如果所有操作都让一个服务器来承担。也是有问题的。
基于以上,我们会考虑到使用redis集群
2、集群详解
2.1 集群中的角色
- 主Redis数据库
- 从Redis数据库库
启动多实例redis命令:--slaveof 主数据ID 端口号
【示例】
redis-server --port 6380 --slaveof 127.0.0.1 6379
3、主从复制原理
-
主从复制过程
主从复制过程
【说明】:
1、如果复制初始化完成,后续主数据库每收到一条命令都会主动发送给从数据库。
2、如果主从数据库断开链接后,当链路回复正常时,会重新进行复制初始化(全量复制),这是2.6以前版本做法。2.8版本之后,使用主数据库推送断开这段时间内数据命令。推送到从数据库(增量复制)。
4、redis哨兵
介绍
哨兵是一个独立进程,可以集群部署哨兵。
哨兵作用:
(1)监控主数据库和从数据库是否正常运行
(2)主数据库出现故障时自动动讲从数据库转换为主数据库。
默认redis目录下有sentinel.conf文件。
image.png
- 使用
redis-sentinel
命令启动
[longshiyang@lsyPro redis-5.0.5 ]$ redis-sentinel sentinel.conf
5226:X 01 Sep 2020 15:03:28.822 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
5226:X 01 Sep 2020 15:03:28.822 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=5226, just started
5226:X 01 Sep 2020 15:03:28.822 # Configuration loaded
5226:X 01 Sep 2020 15:03:28.823 * Increased maximum number of open files to 10032 (it was originally set to 256).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.5 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 5226
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
5226:X 01 Sep 2020 15:03:28.827 # Sentinel ID is d13aa7a2bd051001a1dccc5c1d7e97d31986107f
5226:X 01 Sep 2020 15:03:28.827 # +monitor master mymaster 127.0.0.1 6379 quorum 2
5226:X 01 Sep 2020 15:03:28.829 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
5226:X 01 Sep 2020 15:03:28.829 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
4.1 哨兵生命周期中
(1)每10秒会向主数据库和从数据发送INFO命令
(2)每2秒会向主数据库和从数据库的sentinel:hello 频道发送自己的小心
(3)每1秒会向主数据库,从数据库和其他哨兵节点发送PING命令。