使用docker-compose搭建Redis集群

docker-compose&redis

Posted by MistRay on August 15, 2019

redis 使用docker-compose一键搭建Redis集群

Demo已上传github.

1.简介

大部分情况开发者不会在本地搭建集群.但有时在我们需要进行集群API测试,对集群性能及可用性验证,学习Redis集群特性等情况下 需要在本地搭建Redis集群,本项目诣在帮助没有集群部署经验的开发人员可以快速在本地搭建Redis集群

2.Redis集群

Redis集群可以把数据分散存储到n个节点中,同时可以对每个节点做备份,来保障Redis数据的高可用和稳定性

3.集群方案比较

redis高可用集群

Redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。 Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式, 这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。 redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。 RedisCluster

redis哨兵集群

在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态, 如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂, 并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况, 而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大, 否则会导致持久化文件过大,影响数据恢复或主从同步的效率。 redis_sentinel

4.快速开始

1.安装依赖: docker,docker-composepython3.X

2.启动

# 需在docker-compose.yml所在的文件夹下执行
docker-compose up -d 

docker exec -it node-80 redis-cli -p 6380 --cluster create 172.16.238.10:6380 172.16.238.11:6381 172.16.238.12:6382 172.16.238.13:6383 172.16.238.14:6384 172.16.238.15:6385 --cluster-replicas 1

5.说明

  • 使用Redis版本为5.0.5-alpine,如有需要请自行更改.

    redis官方在redis3.x和redis4.x提供了redis-trib.rb工具方便我们快速搭建集群,在redis5.x中更是可以直接使用redis-cli命令来直接完成集群的一键搭建,省去了redis-trib.rb依赖ruby环境的问题。

  • docker-compose自动组网

    使用docker-compose up启动容器后,这些容器都会被加入{app_name}_default网络中,但是ip不固定.所以该项目在docker-compose内使用了指定ip地址的方式,使每个容器的ip为定值.

  • client端节点互通问题
    在redis配置文件中有如下配置:
    # docker虚拟网卡的ip
    cluster-announce-ip 10.1.1.5
    # 节点映射端口
    cluster-announce-port 6379
    # 总线映射端口,通常为节点映射端口前加1
    cluster-announce-bus-port 16379
    

    docker虚拟网卡地址为docker与外界互通所使用的虚拟ip,如果没有上述配置,在client端操作时,会有取docker内网ip的问题.

  • 关于时区,项目内默认使用了上海时区,需要使用其他时区的同学请自行更改.
      environment:
        # 设置时区为上海
        - TZ=Asia/Shanghai
    

6.Reference

7.转载

本文遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。