1、概念
-
将一台Redis服务器的数据,复制到其他的Redis服务器上
-
从主节点上复制数据到从节点,主节点以写操作为主,从节点以读为主
-
默认情况每个节点都是主节点
-
主节点可以没有或者有好多个从节点,从节点只能有一个主节点
2、作用
-
1、数据冗余
主从复制实现了数据的热备份,是持久化之外的另一种数据冗余方式
-
2、故障恢复
当主节点出现错误时,可以由从节点提供服务,实现快速的故障恢复
-
3、负载均衡
在主从复制的基础上,配合读写分离,由主节点提供写服务,从节点提供读服务,分担服务器负载,提高Redis服务器的并发量
-
4、高可用基石
主从复制是哨兵和集群能够实现的基石
3、集群
-
为什么要使用集群?
-
结构上,避免单点故障
-
容量上,提高内存容量
-
性能上,减轻服务器负载,实现负载均衡
-
-
集群环境配置
-
info replication:查看服务器主从复制信息
role:master # 角色
connected_slaves:0 # 从机数量
master_replid:5a5bb574e65d0287b0197d28042646405b271d2e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0 -
1、配置文件复制成多份
cp redis.conf redis80.conf
-
2、修改配置文件内容
# 1、端口号
# 2、后台运行
# 3、pidfile
# 4、logfile
# 5、dbfilename
-
3、启动三个服务器
-
4、通过命令配置一主二仆模式
-
配置6380端口,并查看主从复制信息
-
配置6381端口,并查看主从复制信息
-
查看7379主从复制信息
-
-
5、主仆模式细节
-
主服务器的所有信息会自动复制到从服务器
-
从服务器只能读,不能写
-
主机宕机后,从机依然是从机,当主机重新连接后,从机可以获得主机新写的信息
-
从机宕机后,主仆模式失效,主机在从机宕机之后写的操作,从机再连接之后获取不到,但是如果重新配置主仆模式后,可以获得信息
-
-
4、主从复制原理
-
从服务器启动成功并且连接到主服务器上后,会发送一个sync命令
-
主服务器接收到命令后,启动后台的存盘进程,同时收集所有接收到的用于对数据集做修改的命令,在后台进程执行完毕之后,主服务器将传送整个数据文件到从服务器,并完成一次完全同步
-
全量复制:从服务器在接收到数据文件后,将其存盘并加载到内存中
-
增量复制:主服务器将新收集到的用于对数据集做修改的命令依次传给从服务器,完成同步
-
如果从服务器是重新连接主服务器,会进行一次全量复制
5、层层链路模式
6、宕机后手动配置主机
-
使用
slaveof no one
命令是自己变成主机
6、哨兵模式
-
哨兵是一个单独的进程,独立运行
-
原理
-
哨兵发送命令,等待Redis服务响应,监控运行的多个Redis实例
-
-
作用
-
通过发送命令,让Redis服务器返回其运行状态,包括主服务器和从服务器
-
当哨兵检测到主服务器宕机,会自动将从服务器切换成主服务器,然后通过发布订阅模式同之其他的服务器,修改配置文件,切换主机
-
-
模式
-
单哨兵模式,哨兵监督服务器
-
多哨兵模式,哨兵监督服务器及其他哨兵
-
-
主观下线
-
哨兵1检测到主服务器宕机,主观认为主服务器不可用
-
-
客观下线
-
其他哨兵也检测到主服务器不可用,并且数量达到一定值时,哨兵之间会进行一次投票,投票的结果由一个哨兵发起,进行failover(故障转移)操作,切换成功后,会通过发布订阅模式,让哨兵把自己监控的从服务器实现切换主机
-
-
测试
-
编写哨兵配置文件
vim sentinel.conf
sentinel monitor myredis 127.0.0.1 6379 1 -
启动哨兵
redis-sentinel hmxConfig/sentinel.conf
73454:X 17 Sep 2020 21:28:14.706 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
73454:X 17 Sep 2020 21:28:14.706 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=73454, just started
73454:X 17 Sep 2020 21:28:14.706 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.0.6 (00000000/0) 64 bit
.-`` .-```. ```/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 73454
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
73454:X 17 Sep 2020 21:28:14.707 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
73454:X 17 Sep 2020 21:28:14.709 # Sentinel ID is 2092024f7b6023d37e43875c878a972cac61cbdb
73454:X 17 Sep 2020 21:28:14.709 # +monitor master myredis 127.0.0.1 6379 quorum 1
73454:X 17 Sep 2020 21:28:14.709 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
73454:X 17 Sep 2020 21:28:14.711 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6379
-
此时断开主机,发现哨兵发生变化
-
此时原先的主机如果重新连接,只能变成现主机的从服务器
-
-
优点
-
故障转移
-
高可用
-
健壮
-
-
缺点
-
集群容量有限,难以在线扩容
-
配置复杂
-