Redis 在我的项目中,主要用作缓存和消息队列。小的项目可以使用单机版,大点的项目或者稍微注重高可用的时候可以考虑使用Redis 集群。
Redis 集群有三种模式: 主从复制(redis2.8版本之前的模式)、哨兵(sentinel)模式以及redis cluster模式(redis3.0版本之后)。
问
为什么要Redis主从复制?
1.高可用数据备份,当一个节点挂掉时,数据因为有备份,可恢复。
2.适用于高并发场景,负载均衡,所有客户端都访问一个节点肯定会影响Redis工作效率,有了主从以后,可以作为读写分离,即查询操作通过查询从节点来完成,写入访问主节点。
重要
Redis主从复制的注意事项
1.一个master可以有多个slave,默认配置下,master节点可以进行读和写,slave节点只能进行读操作,写操作被禁止。
2.不要修改配置让slave节点支持写操作,没有意义,原因一,写入的数据不会被同步到其他节点;原因二,当master节点修改同一条数据后,slave节点的数据会被覆盖掉。
3.slave节点挂了不影响其他slave节点的读和master节点的读和写,重新启动后会将数据从master节点同步过来,master节点挂了以后,不影响slave节点的读,Redis将不再提供写服务,master节点启动后Redis将重新对外提供写服务。
4.master节点挂了以后,redis就不能对外提供写服务了,因为剩下的slave不能成为master。这个缺点影响是很大的,尤其是对生产环境来说,是一刻都不能停止服务的,所以一般的生产坏境是不会单单只有主从模式的。所以有了哨兵(sentinel)模式。
实例:单机使用docker 搭建redis主从复制
建议大家学习下docker ,非常简单的,简单的几条命令就可以搭建环境,docker帮我们屏蔽了很多编译、安装困难。使用docker-compose 搭建,下面给出docker-compose.yml
version: '3.6'
services:
master:
image: redis
container_name: redis-master
restart: always
command: redis-server --port 6379 --requirepass master123 --appendonly yes
ports:
- 6379:6379
volumes:
- ./data/master:/data
slave1:
image: redis
container_name: redis-slave-1
restart: always
command: redis-server --slaveof master 6379 --port 6380 --requirepass slave123 --masterauth master123 --appendonly yes
ports:
- 6380:6380
volumes:
- ./data/slave1:/data
slave2:
image: redis
container_name: redis-slave-2
restart: always
command: redis-server --slaveof master 6379 --port 6381 --requirepass slave456 --masterauth master123 --appendonly yes
ports:
- 6381:6381
volumes:
- ./data/slave2:/data
其中:
--slaveof master 6379 设置从节点的关键语句,master指主节点的hostname
--requirepass slave456 设置密码
--appendonly yes 开启持久化,默认是AOF 模式
运行结果:
[root@master docker-compose]# ls
data docker-compose.yml
[root@master docker-compose]# docker-compose up -d
Starting redis-master ... done
Starting redis-slave-2 ... done
Starting redis-slave-1 ... done
[root@master docker-compose]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1934a4e65a80 redis "docker-entrypoint.s…" 5 hours ago Up 9 seconds 6379/tcp, 0.0.0.0:6380->6380/tcp redis-slave-1
422a708f7a1f redis "docker-entrypoint.s…" 5 hours ago Up 9 seconds 6379/tcp, 0.0.0.0:6381->6381/tcp redis-slave-2
07f8c1393f08 redis "docker-entrypoint.s…" 5 hours ago Up 9 seconds 0.0.0.0:6379->6379/tcp redis-master
[root@master docker-compose]#
使用 redis客户端工具RedisDesktopManager,当在master 上写入一个 key时,slave1和slave2 上也会有数据通过过来。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有