Redis默认提供主备能力,允许自动同步,防止单主机损坏后数据丢失。
主备
主备指的是一台主机可以有N台备份同步数据处理主机,当设置了A主机的内容之后,那么该内容可以自动同步到B主机或其他主机上。主从机制可以实现数据的自动备份同步操作。通过Master主机操作时,系统会自动将所有的增加、修改、删除操作作用于全部Slave主机中。
主从配置中若Master主机挂了之后,其他从主机将无法正常工作。为解决此问题提出了哨兵方案即设置哨兵监控进程,若干哨兵进程监控整个Redis运行状况,当共同发现Master主机挂了之后剩余从主机选举出新的master主机,对于挂了之后的Master主机若恢复了正常状态则会变为slave主机。
主从关系配置主机信息:
编号 | 主机名称 | 角色 | IP地址 | 描述 |
---|---|---|---|---|
1 | node1 | master | 192.168.1.6 | Redis主服务 |
2 | node2 | slave | 192.168.1.7 | Redis备份服务 |
3 | node3 | slave | 192.168.1.8 | Redis备份服务 |
Redis主从配置
#node1,node2,node3上做如下操作
vim /etc/hosts #修改hosts文件
node1 192.168.1.6 #主服务
node2 192.168.1.7 #备份服务
node3 192.168.1.8 #备份服务
#从主机node2、node3做如下操作
vim /usr/local/redis/conf/redis.conf #打开配置文件
slaveof 192.168.1.6 6379 #设置跟随的Master主机地址
#replicaof 192.168.1.6 6379 #版本6.2.1
mastcrauth test #设置Master主机认证信息
#masterauth test #版本6.2.1
#node1、node2、node3做如下处理:
/usr/local/redis/bin/redis-server/usr/local/redis/conf/redis.conf #启动redis服务
#node1主机上
/usr/local/redis/bin/redis-cli -h 192.168.1.6 -p 6379 -a test info replication #查询副本信息
#Master主机node1上操作
/usr/local/redis/bin/redis-cli -h 192.168.1.6 -p 6379 -a test #客户端连接
set xiyue hello #设置数据
#slave主机node2或者node3获取数据
/usr/local/redis/bin/redis-cli -h 192.168.1.7 -p 6379 -a test
get xiyue
#Master主机node1上删除数据
/usr/local/redis/bin/redis-cli -h 192.168.1.6 -p 6379 -a test
del xiyue
#slave主机node2或者node3获取数据
/usr/local/redis/bin/redis-cli -h 192.168.1.7 -p 6379 -a test
get xiyue
哨兵机制
在主从配置的基础上设置哨兵机制防止master节点故障导致slave节点不可用。
所有节点有以下操作
cp redis-6.2.1/sentinel.conf /usr/local/redis/conf/ #复制哨兵配置文件到redis的工作目录中
vim /usr/local/redis/conf/sentinel.conf #打开哨兵配置文件
protected-mode no #关闭Redis保护模式,不关闭无法重新选举
daemonize yes #sentinel后台启动
port 26379 #哨兵进程监听的端口号
dir /usr/data/redis/sentinel
sentinel monitor mymaster 192.168.1.6 6379 2 #设置哨兵监控 sentinel是一个内部使用的名称,2表示有2个哨兵进程认为master无法使用则重新选举master
sentinel auth-pass mymaster test #设置master认知信息
sentinel down-after-milliseconds mymaster 3000 #设置Master不活跃的时间
sentinel parallcl-sysncs mymaster 1 #设置同步的master数量
sentinel failover-timeout mymaster 18000 #选举失败的超时时间
mkdir -p /usr/data/redis/sentinel #建立哨兵数据文件目录
cp redis-6.2.1/src/redis-sentinel /usr/local/redis/bin/ #复制哨兵启动文件
/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel.conf #启动所有的哨兵进程 前提是Redis进程是正常的
在master节点(node1 192.168.1.6)上
killall redis-server
超过master的存活时间后slave节点上会出现以下信息
104978:X 15 Mar 2021 13:03:35.771 # +sdown master mymaster 192.168.1.6 6379
104978:X 15 Mar 2021 13:03:35.942 # +new-epoch 2
104978:X 15 Mar 2021 13:03:35.953 # +vote-for-leader 6b93b935e98e0337d6ed591dc63ac617d7cf04b3 2
104978:X 15 Mar 2021 13:03:36.249 # +config-update-from sentinel 6b93b935e98e0337d6ed591dc63ac617d7cf04b3 192.168.1.6 26379 @ mymaster 192.168.1.6 6379
104978:X 15 Mar 2021 13:03:36.250 # +switch-master mymaster 192.168.1.6 6379 192.168.1.8 6379