Redis 使用docker搭建集群环境(主从模式)

分类:软件编程
阅读:1691
作者:majingjing
发布:2021-11-30 23:27

主从模式

image-20211130214556444

客户端可对主数据库进行读写操作,对从数据库进行读操作,主数据库写入的数据会实时自动同步给从数据库。

工作机制:

  1. slave启动后,向master发送SYNC命令,master接收到SYNC命令后通过bgsave保存快照,并使用缓冲区记录保存快照这段时间内执行的写命令
  2. master将保存的快照文件发送给slave,并继续记录执行的写命令
  3. slave接收到快照文件后,加载快照文件,载入数据
  4. master快照发送完后开始向slave发送缓冲区的写命令,slave接收命令并执行,完成复制初始化
  5. 此后master每次执行一个写命令都会同步发送给slave,保持master与slave之间数据的一致性

优缺点

优点:
  1. master能自动将数据同步到slave,可以进行读写分离,分担master的读压力
  2. master、slave之间的同步是以非阻塞的方式进行的,同步期间,客户端仍然可以提交查询或更新请求
缺点:
  1. 不具备自动容错与恢复功能,master或slave的宕机都可能导致客户端请求失败,需要等待机器重启或手动切换客户端IP才能恢复
  2. master宕机,如果宕机前数据没有同步完,则切换IP后会存在数据不一致的问题
  3. 难以支持在线扩容,Redis的容量受限于单机配置

集群搭建

image-20211130225832662

目录结构如上图
docker-compose.yml 内容
  1. version: '3'
  2. services:
  3. master:
  4. image: redis:6.2.6
  5. container_name: redis-master
  6. command: redis-server --requirepass 12345678 --masterauth 12345678
  7. ports:
  8. - 6380:6379
  9. networks:
  10. - majj
  11. slave1:
  12. image: redis:6.2.6
  13. container_name: redis-slave-1
  14. ports:
  15. - 6381:6379
  16. command: redis-server --slaveof redis-master 6379 --masterauth 12345678 --requirepass 12345678
  17. networks:
  18. - majj
  19. slave2:
  20. image: redis:6.2.6
  21. container_name: redis-slave-2
  22. ports:
  23. - 6382:6379
  24. command: redis-server --slaveof redis-master 6379 --masterauth 12345678 --requirepass 12345678
  25. networks:
  26. - majj
  27. networks:
  28. majj:
  29. external:
  30. name: majj
执行 命令 docker-compose up -d
  1. apple@Marion ~/Documents/works/poc/Redis-docker/redis docker-compose up -d
  2. WARNING: Found orphan containers (redis) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
  3. Pulling master (redis:6.2.6)...
  4. 6.2.6: Pulling from library/redis
  5. Digest: sha256:619af14d3a95c30759a1978da1b2ce375504f1af70ff9eea2a8e35febc45d747
  6. Status: Downloaded newer image for redis:6.2.6
  7. Recreating redis-master ... done
  8. Recreating redis-slave-2 ... done
  9. Recreating redis-slave-1 ... done
  10. apple@Marion ~/Documents/works/poc/Redis-docker/redis

验证

image-20211130230607255

进入redis-master容器

image-20211130231126602

进入 redis-slave-1 容器

image-20211130231413744

master 读写, slave 只读

image-20211130232437616

image-20211130232528536