[Demo示例]Docker搭建redis cluster集群,外网可访问

目标
在linux主机是,使用Docker搭建redis cluster集群(含主从),使用本地java访问redis集群

本文不同
1、使用redis5.0的redis-cli --cluster命令替换老版本redis集群创建命令redis-trib.rb,因此过程中不需要ruby支持。
2、百度教程中docker搭建的集群大都可以在宿主机器中访问,但本地java调用时,往往因为ip问题无法访问。我使用了docker的host网络方式替换了一般新建一个名为redis-netbridge模式,使得本地java得意访问。
3、使用了官方redis镜像,没有编写Dockerfile

操作环境
我手头的是一台Centos7 linux主机,使用XShell远程连接,已经安装docker以及redis5.0

redis cluster须知
写给刚接触的人,有个大概了解。redis-server可以启动一个单机服务,修改redis.conf后可以以集群方式启动。

首先,我们需要先启动6个redis-server(3个主节点,横向扩展redis的数据存储量,有一个节点挂掉整体宕机;因此,需要3个从节点,每个从节点为一个主节点的备胎。);

其次,通过redis-cli --cluster命令连接这些节点,创建出一个集群服务。两步完毕。

步骤一:启动6个redis-server

1、docker pull redis获取redis镜像
2、准备6份redis.conf,此处跟大部分百度教程相似。

一个模板文件redis-cluster.tmpl方便脚本生成多份配置:

port ${PORT}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.1.200
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
protected-mode no

注:ip部分要换成linux主机ip,我这是192.168.1.200,方便后期外网访问,原文一般是172.18.0.1的虚拟地址

脚本生成6份配置:

for port in `seq 7000 7005`; do \
  mkdir -p ./${port}/conf \
  && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
  && mkdir -p ./${port}/data; \
done

3、脚本启动6个容器

for port in `seq 7000 7005`; do \
  docker run -d -ti \
  --privileged=true -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  --privileged=true -v /home/redis-cluster/${port}/data:/data \
  --restart always --name redis-${port} --net host \
  --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done

此处注意,--net host这种网络模式可以让容器ip、端口共享宿主机的网络,其他部分还是独立的,因此-p 7000:7000等端口映射参数可以不写了。

注意:如果容器启动失败,可以使用docker logs命令查看日志,有时候是配置文件错误导致的。

步骤二:redis-cli创建集群

redis5.0中redis-cli --cluster已经替换了redis-trib.rb命令,如果还使用此命令会提示你的。
具体命令如下:
redis-cli --cluster create 192.168.1.200:7000 192.168.1.200:7001 192.168.1.200:7002 192.168.1.200:7003 192.168.1.200:7004 192.168.1.200:7005 --cluster-replicas 1
192.168.1.200替换成你自己的linux主机ip
–cluster-replicas 1意思是为主节点创建1份从节点
根据提示,输入yes即可创建成功。

大功告成,以spring-boot为例,配置为:
spring.redis.cluster.nodes=192.168.1.200:7000,192.168.1.200:7001,192.168.1.200:7002,192.168.1.200:7003,192.168.1.200:7004,192.168.1.200:7005
spring.redis.host、spring.redis.port可以不要了

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Docker中集成Redis Cluster集群,可以按照以下步骤操作: 1. 创建一个Docker Compose文件,定义Redis Cluster集群的服务和配置。例如: ``` version: '3' services: redis-1: image: redis:latest command: redis-server /redis-conf/redis-1.conf ports: - 6381:6381 volumes: - ./conf/redis-1.conf:/redis-conf/redis-1.conf - ./data/redis-1:/data redis-2: image: redis:latest command: redis-server /redis-conf/redis-2.conf ports: - 6382:6382 volumes: - ./conf/redis-2.conf:/redis-conf/redis-2.conf - ./data/redis-2:/data redis-3: image: redis:latest command: redis-server /redis-conf/redis-3.conf ports: - 6383:6383 volumes: - ./conf/redis-3.conf:/redis-conf/redis-3.conf - ./data/redis-3:/data redis-4: image: redis:latest command: redis-server /redis-conf/redis-4.conf ports: - 6384:6384 volumes: - ./conf/redis-4.conf:/redis-conf/redis-4.conf - ./data/redis-4:/data redis-5: image: redis:latest command: redis-server /redis-conf/redis-5.conf ports: - 6385:6385 volumes: - ./conf/redis-5.conf:/redis-conf/redis-5.conf - ./data/redis-5:/data redis-6: image: redis:latest command: redis-server /redis-conf/redis-6.conf ports: - 6386:6386 volumes: - ./conf/redis-6.conf:/redis-conf/redis-6.conf - ./data/redis-6:/data networks: redis-cluster: driver: bridge ``` 2. 在同一目录下创建一个conf文件夹,用于存储每个Redis节点的配置文件。例如,创建一个redis-1.conf文件: ``` port 6381 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes ``` 3. 启动Redis Cluster集群服务: ``` docker-compose up -d ``` 4. 将节点加入Redis Cluster集群。可以使用redis-cli命令行工具连接到每个节点,并使用CLUSTER MEET命令将节点加入集群。例如: ``` redis-cli -h 127.0.0.1 -p 6381 > CLUSTER MEET 127.0.0.1 6382 > CLUSTER MEET 127.0.0.1 6383 > CLUSTER MEET 127.0.0.1 6384 > CLUSTER MEET 127.0.0.1 6385 > CLUSTER MEET 127.0.0.1 6386 ``` 5. 创建一个Redis Cluster集群。可以使用redis-cli命令行工具连接到任何一个节点,并使用CLUSTER CREATE命令来创建集群。例如: ``` redis-cli --cluster create 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 --cluster-replicas 1 ``` 6. 现在,您已经成功地在Docker中集成了Redis Cluster集群。可以使用redis-cli命令行工具连接到任何一个节点,并开始使用集群
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值