docker搭建redis集群

docker搭建redis集群:

1、创建一个docker网络:

docker network create --driver=bridge --gateway=192.165.0.1 --subnet=192.165.0.0/16 myredis(网络名)

2、使用docker创建一个3主3从的redis集群

#删除此文件夹
rm -rf /mycontainerdata/
#创建6个redis配置文件
for port in $(seq 1 6); \
do \
mkdir -p /mycontainerdata/redis/node-${port}/conf
touch /mycontainerdata/redis/node-${port}/conf/redis.conf
cat << EOF >/mycontainerdata/redis/node-${port}/conf/redis.conf
#port:节点端口;
port 6379
#0.0.0.0在服务器的环境中,指的就是服务器上所有的ipv4地址,如果机器上有2个ip 192.168.30.10 和 10.0.2.15,redis在配置中,如果配置监听在0.0.0.0这个地址上,那么,通过这2个ip地址都是能够到达这个redis服务的。同时呢,访问本地的127.0.0.1也是能够访问到redis服务的。
bind 0.0.0.0
#cluster-enabled:是否开启集群模式,默认 no;
cluster-enabled yes
#cluster-config-file:集群节点信息文件;
cluster-config-file nodes.conf
#cluster-node-timeout:集群节点连接超时时间;
cluster-node-timeout 5000
#cluster-announce-ip:集群节点 IP,填写宿主机的 IP;启动docker时固定的ip(docker run --ip x.x.x.x)
cluster-announce-ip 192.165.0.1${port}
#cluster-announce-port:集群节点映射端口;
cluster-announce-port 6379
#cluster-announce-bus-port:集群节点总线端口。
cluster-announce-bus-port 16379
#appendonly:是否开启 AOF 持久化模式,默认 no;
appendonly yes
EOF
done


#移除所有容器
docker rm -f $(docker ps -aq)
#运行redis容器
for port in $(seq 1 6); \
do \
docker run -dit -p 637${port}:6379 -p 1637${port}:16379 --name=redis-${port} \
-v /mycontainerdata/redis/node-${port}/data:/data \
-v /mycontainerdata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
--net myredis --ip 192.165.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
done

#排查配置文件是否正确
docker run -it -p 6371:6379 -p 16371:16379 --name=redis-1 \
-v /mycontainerdata/redis/node-1/data:/data \
-v /mycontainerdata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
--net myredis --ip 192.165.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;

#进入redis-1容器
docker exec -it redis-1 /bin/sh

#创建集群(进入容器后执行)
redis-cli --cluster create 192.165.0.11:6379 192.165.0.12:6379 192.165.0.13:6379 192.165.0.14:6379 192.165.0.15:6379 192.165.0.16:6379 --cluster-replicas 1
#--cluster-replicas集群副本数

注:每个 Redis 集群节点都需要打开两个 TCP 连接。一个用于为客户端提供服务的正常 Redis TCP 端口,例如 6379。还有一个基于 6379 端口加 10000 的端口,比如 16379。

第二个端口用于集群总线,这是一个使用二进制协议的节点到节点通信通道。节点使用集群总线进行故障检测、配置更新、故障转移授权等等。客户端永远不要尝试与集群总线端口通信,与正常的 Redis 命令端口通信即可,但是请确保防火墙中的这两个端口都已经打开,否则 Redis 集群节点将无法通信。

更多详细内容参考

https://www.cnblogs.com/mrhelloworld/p/docker12.html

3、使用docker-compose创建一个3主3从的redis集群

所需的集群配置文件:

#此处任然使用之前的myredis网络
#配置文件:
for port in $(seq 1 6); \
do \
mkdir -p /mycontainerdata/redis/node-${port}/conf
touch /mycontainerdata/redis/node-${port}/conf/redis.conf
cat << EOF >/mycontainerdata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.165.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

docker-compose.yml

#指定本 yml 依从的 compose 哪个版本制定的
version: "3"
#服务编排
services: 
  #服务名:
  redis-1:
    #指定容器运行的镜像
    image: redis:5.0.9-alpine3.11
    #指定自定义容器名称
    container_name: redis-1
    #设置网络模式
    networks:
      myredis:
        ipv4_address: 192.165.0.11
    #容器和主机绑定到暴露的端口
    ports:
      - 6371:6379
      - 16371:16379
    #将主机的数据卷或着文件挂载到容器里
    volumes:
      #主机的配置文件挂载到容器中的配置文件
      - /mycontainerdata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf
      #主机的数据文件挂载到容器中的持久化文件
      - /mycontainerdata/redis/node-1/data:/data
    #覆盖容器启动的默认命令,启动redis服务
    command: /bin/sh -c "redis-server /etc/redis/redis.conf"
    #添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保YML解析器不会将其转换为 True或False
    environment: 
      # 设置时区为上海,否则时间会有问题
      - TZ=Asia/Shanghai
  redis-2:
    image: redis:5.0.9-alpine3.11
    container_name: redis-2
    networks:
      myredis:
        ipv4_address: 192.165.0.12
    ports:
      - 6372:6379
      - 16372:16379
    volumes:
      - /mycontainerdata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf
      - /mycontainerdata/redis/node-2/data:/data
    command: /bin/sh -c "redis-server /etc/redis/redis.conf"
    environment: 
      - TZ=Asia/Shanghai
  redis-3:
    image: redis:5.0.9-alpine3.11
    container_name: redis-3
    networks:
      myredis:
        ipv4_address: 192.165.0.13
    ports:
      - 6373:6379
      - 16373:16379
    volumes:
      - /mycontainerdata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf
      - /mycontainerdata/redis/node-3/data:/data
    command: /bin/sh -c "redis-server /etc/redis/redis.conf"
    environment: 
      - TZ=Asia/Shanghai
  redis-4:
    image: redis:5.0.9-alpine3.11
    container_name: redis-4
    networks:
      myredis:
        ipv4_address: 192.165.0.14
    ports:
      - 6374:6379
      - 16374:16379
    volumes:
      - /mycontainerdata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf
      - /mycontainerdata/redis/node-4/data:/data
    command: /bin/sh -c "redis-server /etc/redis/redis.conf"
    environment: 
      - TZ=Asia/Shanghai
  redis-5:
    image: redis:5.0.9-alpine3.11
    container_name: redis-5
    networks:
      myredis:
        ipv4_address: 192.165.0.15
    ports:
      - 6375:6379
      - 16375:16379
    volumes:
      - /mycontainerdata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf
      - /mycontainerdata/redis/node-5/data:/data
    command: /bin/sh -c "redis-server /etc/redis/redis.conf"
    environment: 
      - TZ=Asia/Shanghai
  redis-6:
    image: redis:5.0.9-alpine3.11
    container_name: redis-6
    networks:
      myredis:
        ipv4_address: 192.165.0.16
    ports:
      - 6376:6379
      - 16376:16379
    volumes:
      - /mycontainerdata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf
      - /mycontainerdata/redis/node-6/data:/data
    command: /bin/sh -c "redis-server /etc/redis/redis.conf"
    environment: 
      - TZ=Asia/Shanghai
networks:
    myredis:
      external: 
	    name: myredis

创建redis集群

#进入redis-1容器
docker exec -it redis-1 /bin/sh

#创建集群(进入容器后执行)
redis-cli --cluster create 192.165.0.11:6379 192.165.0.12:6379 192.165.0.13:6379 192.165.0.14:6379 192.165.0.15:6379 192.165.0.16:6379 --cluster-replicas 1
#--cluster-replicas集群副本数

edis-1 /bin/sh

#创建集群(进入容器后执行)
redis-cli --cluster create 192.165.0.11:6379 192.165.0.12:6379 192.165.0.13:6379 192.165.0.14:6379 192.165.0.15:6379 192.165.0.16:6379 --cluster-replicas 1
#–cluster-replicas集群副本数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值