目录
1.主从模式(master-slave)
1.1 搭建方式
1.2 测试主从模式
1.3 其他配置
1.4 主从模式的缺点
2. sentinel (哨兵)模式
2.1 搭建方式
2.2 测试sentinel模式
2.3 Redis Sentinel 的主要功能
2.4 Redis Sentinel 的工作流程
主从模式的搭建和配置,以下面搭建一个 master 与两个 slave 为例 创建一个 master-slave 文件夹
mkdir master-slave进入 master-slave
cd master-slave创建三个文件夹 redis11, redis12, redis13。其中 redis11 为 master 文件, redis12/redis13 为 slave 文件夹。准备需要的 redis 执行文件
mkdir redis11 redis12 redis13复制 redis-server 到每一个文件夹。
root@ubuntu:/home/xiaoluo/soft# cp redis-6.0.8/src/redis-server master-slave/redis11 root@ubuntu:/home/xiaoluo/soft# cp redis-6.0.8/src/redis-server master-slave/redis12 root@ubuntu:/home/xiaoluo/soft# cp redis-6.0.8/src/redis-server master-slave/redis13复制 redis-cli 到 master-slave 文件夹
root@ubuntu:/home/xiaoluo/soft# cp redis-6.0.8/src/redis-cli master-slave/在 master 的 redis11 里面添加配置文件redis.conf
bind 0.0.0.0 port 8001 logfile "8001.log" dbfilename "dump-8001.rdb" daemonize yes rdbcompression yes在 slave 的 redis12 里面添加配置文件redis.conf
bind 0.0.0.0 port 8002 logfile "8002.log" dbfilename "dump-8002.rdb" daemonize yes rdbcompression yes slaveof 192.168.74.133 8001 #主机ip 和master端口在 slave 的 redis12 里面添加配置文件redis.conf
bind 0.0.0.0 port 8003 logfile "8003.log" dbfilename "dump-8003.rdb" daemonize yes rdbcompression yes slaveof 192.168.74.133 8001 #主机ip 和master端口创建 start-all.sh 的 shell 脚本文件
#!/bin/bash cd redis11 ./redis-server redis.conf & cd .. cd redis12 ./redis-server redis.conf & cd .. cd redis13 ./redis-server redis.conf & cd ..执行start-all.sh,查看 redis 启动情况
在 redis.conf 中,还有一些关于主从的其他配置,按需配置即可。 首先谈谈我对主从模式的必要性: 主从模式的一个作用是备份数据,这样当一个节点损坏(指不可恢复的硬件损坏)时,数据因为有备份,可以方便恢复。 另一个作用是负载均衡,所有客户端都访问一个节点肯定会影响 Redis 工作效率,有了主从以后,查询操作就可以通过查询从节点来完成。 对主从模式必须的理解(结论已经验证过,可以自行验证): 一个 Master 可以有多个 Slaves 默认配置下,master 节点可以进行读和写,slave 节点只能进行读操作,写操作被禁止 不要修改配置让 slave 节点支持写操作,没有意义,原因一,写入的数据不会被同步到其他节点;原因二,当 master 节点修改同一条数据后,slave 节点的数据会被覆盖掉 slave 节点挂了不影响其他 slave 节点的读和 master 节点的读和写,重新启动后会将数据从 master 节点同步过来 master 节点挂了以后,不影响 slave 节点的读,Redis 将不再提供写服务,master 节点 启动后 Redis 将重新对外提供写服务。 master 节点挂了以后,slave节点不会重新选一个 master
master 节点挂了以后,redis 就不能对外提供写服务了,因为剩下的 slave 不能成为master 这个缺点影响是很大的,尤其是对生产环境来说,是一刻都不能停止服务的,所以一般的生产坏境是不会单单只有主从模式的。所以有了下面的 sentinel 模式。
在主从模式的基础上面,将端口从 8001 改为 9001,8002 改为 9002,8003 改为 9003
root@ubuntu:/home/xiaoluo/soft# mkdir sentinel root@ubuntu:/home/xiaoluo/soft# cd master-slave/ root@ubuntu:/home/xiaoluo/soft/master-slave# cp -r ./* ../sentinel/ root@ubuntu:/home/xiaoluo/soft/master-slave# cd ../sentinel/ root@ubuntu:/home/xiaoluo/soft/sentinel# mv redis11 redis21 root@ubuntu:/home/xiaoluo/soft/sentinel# mv redis12 redis22 root@ubuntu:/home/xiaoluo/soft/sentinel# mv redis13 redis23复制 redis-sentinel 到 redis21/redis22/redis23 的文件夹中
复制 sentinel.conf 到 redis21/redis22/redis23
root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/src/redis-sentinel ./redis21 root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/src/redis-sentinel ./redis22 root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/src/redis-sentinel ./redis23 root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/sentinel.conf ./redis21 root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/sentinel.conf ./redis22 root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/sentinel.conf ./redis23修改 sentinel.conf 文件
三个sentinel.conf都需要修改为监控master节点
修改start-all.sh,除了运行master和slave节点还需要运行三个sentinel,运行start-all.sh
#!/bin/bash cd redis21 ./redis-server redis.conf & cd .. cd redis22 ./redis-server redis.conf & cd .. cd redis23 ./redis-server redis.conf & cd .. cd redis21 ./redis-sentinel sentinel.conf & cd .. cd redis22 ./redis-sentinel sentinel.conf & cd .. cd redis23 ./redis-sentinel sentinel.conf &第一次运行,9001是master节点,我们kill掉9001端口的服务
可以看到,此时master节点已经切换到9002端口 。
Sentinel 的主要功能包括主节点存活检测、主从运行情况检测、自动故障转移(failover)、主 从切换。Redis 的 Sentinel 最小配置是一主一从。 Redis 的 Sentinel 系统可以用来管理多个 Redis 服务器,该系统可以执行以下四个任务:
监控 Sentinel 会不断的检查主服务器和从服务器是否正常运行。 通知 当被监控的某个 Redis 服务器出现问题,Sentinel 通过 API 脚本向管理员或者其他的应用程序发送通知。 自动故障转移 当主节点不能正常工作时,Sentinel 会开始一次自动的故障转移操作,它会将与失效主节点 是主从关系的其中一个从节点升级为新的主节点, 并且将其他的从节点指向新的主节点。 配置提供者 在 Redis Sentinel 模式下,客户端应用在初始化时连接的是 Sentinel 节点集合,从中获取主节点的信息。
Sentinel 负责监控集群中的所有主、从 Redis,当发现主故障时,Sentinel 会在所有的从中选 一个成为新的主。并且会把其余的从变为新主的从。同时那台有问题的旧主也会变为新主的 从,也就是说当旧的主即使恢复时,并不会恢复原来的主身份,而是作为新主的一个从。 在 Redis 高可用架构中,Sentinel 往往不是只有一个,而是有 3 个或者以上。目的是为了让 其更加可靠,毕竟主和从切换角色这个过程还是蛮复杂的。 sentinel 模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一 台服务器存放不下的情况时,主从模式或 sentinel 模式就不能满足需求了,这个时候需要 对存储的数据进行分片,将数据存储到多个 Redis 实例中,就是下面要讲的。