1.主从架构
1.1 Redis主从架构拓扑图结构
2.2.1 关闭主节点持久化
通常 Redis 的主节点是不会进行持久化操作,持久化操作主要在从节点进行。从节点是备份节点,没有来自客户端请求的压力,它的操作系统资源往往比较充沛。
选取一台为主服务器,修改redis.conf配置文件,注释掉save 三个命令关闭rdb快照, 指定关闭aof(appendonly no 默认是关闭的);
vim /etc/redis/6379.conf
2.2.2 设置主从关系
1.2.1 在安装好单机版的前提下,分别修改每台设备配置文件设置主从
在Redis中设置主从有2种方式:
1.在redis.conf中设置slaveof
a) slaveof <masterip> <masterport>
2、 使用redis-cli客户端连接到redis服务,执行slaveof命令
a) slaveof <masterip> <masterport>
第二种方式在重启后将失去主从复制关系。
我们这里使用第一种方式设置主从,比如以192.168.2.203做主服务器,则在其他设备上配置所属主服务器地址::
vim /etc/redis/6379.conf
增加 slaveof 192.168.2.203 6379
1.2.5 查看Redis主从关系
使用Redis客户端连接上主库6379端口
# redis-cli -h 192.168.2.30 -p 6379
查看Redis主从关系 如下图所示
192.168.29.128:6379> info replication
role:角色信息
slaveX:从库信息
connected_slaves:从库数量
1.2.6 测试
在主库写入数据
在从库读取数据
2.3.从库只读
默认情况下redis数据库充当slave角色时是只读的不能进行写操作
可以在配置文件中开启非只读:slave-read-only no
2.4.主从复制的过程原理
1.当从库和主库建立MS关系后,会向主数据库发送SYNC命令
2.主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来
3.当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis
4.从Redis接收到后,会载入快照文件并且执行收到的缓存的命令
5.之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致
3.1、Sentinel的作用:
A、Master 状态监测
B、如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master作为Slave
C、Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
3.2、Sentinel的工作方式:
1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令
6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。
若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。
到此结束!