【Redis】WSL2 中使用 docker compose 部署集群模式

2022年2月18日 1008点热度 0人点赞 1条评论

Redis 6.x 版本之后可以使用 docker 镜像部署集群模式,因而可以在 WSL2 中使用 docker compose 部署三主三从的 Redis 集群用以实战。

PS:

docker compose 的相关资料可以参见:

Docker Compose | 菜鸟教程

在部署的过程中发现,由于 WSL2 的网络设置问题,使用 docker host 模式部署存在问题,因而这次是在 brige 模式下部署的。因此,造成了一个问题——无法在子网外进行访问

此次,WSL2 中的镜像为 Ubuntu,并且已经安装了 docker。

PS:

Windows 下安装的 docker 自带 docker compose,如果在 Linux 环境下安装的 docker ,则需要再安装 docker compose。

安装 redis-cli

在部署和测试 redis 集群的时候需要用到 redis-cli,因而在 Ubuntu 上首先安装 redis-tools:

sudo apt install redis-tools

文件目录

按照下述的文件目录创建相应的文件夹和文件。

redis/
├── docker-compose.yml
├── node1
│   ├── data
│   └── redis.conf
├── node2
│   ├── data
│   └── redis.conf
├── node3
│   ├── data
│   └── redis.conf
├── node4
│   ├── data
│   └── redis.conf
├── node5
│   ├── data
│   └── redis.conf
└── node6
    ├── data
    └── redis.conf

Docker Compose 配置文件

Docker Compose 文件配置内容如下:

version: "3"

networks:
  redis-cluster:
    driver: bridge
    ipam:
      config:
        - subnet: 172.26.0.0/24

services:
  node1:
    image: redis
    container_name: redis-cluster-node-1
    ports:
      - "6371:6379"
    volumes:
      - "./node1/redis.conf:/etc/redis.conf"
      - "./node1/data:/data"
    command: ["redis-server", "/etc/redis.conf"]
    restart: always
    networks:
      redis-cluster:
        ipv4_address: 172.26.0.101

  node2:
    image: redis
    container_name: redis-cluster-node-2
    ports:
      - "6372:6379"
    volumes:
      - "./node2/redis.conf:/etc/redis.conf"
      - "./node2/data:/data"
    command: ["redis-server", "/etc/redis.conf"]
    restart: always
    networks:
      redis-cluster:
        ipv4_address: 172.26.0.102

  node3:
    image: redis
    container_name: redis-cluster-node-3
    ports:
      - "6373:6379"
    volumes:
      - "./node3/redis.conf:/etc/redis.conf"
      - "./node3/data:/data"
    command: ["redis-server", "/etc/redis.conf"]
    restart: always
    networks:
      redis-cluster:
        ipv4_address: 172.26.0.103

  node4:
    image: redis
    container_name: redis-cluster-node-4
    ports:
      - "6374:6379"
    volumes:
      - "./node4/redis.conf:/etc/redis.conf"
      - "./node4/data:/data"
    command: ["redis-server", "/etc/redis.conf"]
    restart: always
    networks:
      redis-cluster:
        ipv4_address: 172.26.0.104

  node5:
    image: redis
    container_name: redis-cluster-node-5
    ports:
      - "6375:6379"
    volumes:
      - "./node5/redis.conf:/etc/redis.conf"
      - "./node5/data:/data"
    command: ["redis-server", "/etc/redis.conf"]
    restart: always
    networks:
      redis-cluster:
        ipv4_address: 172.26.0.105

  node6:
    image: redis
    container_name: redis-cluster-node-6
    ports:
      - "6376:6379"
    volumes:
      - "./node6/redis.conf:/etc/redis.conf"
      - "./node6/data:/data"
    command: ["redis-server", "/etc/redis.conf"]
    restart: always
    networks:
      redis-cluster:
        ipv4_address: 172.26.0.106

redis 节点配置

redis 节点配置内容如下:

port 6379
protected-mode no
daemonize no

################################ REDIS CLUSTER  ###############################

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
# cluster-announce-ip 127.0.0.1
# cluster-announce-port 6380
cluster-announce-bus-port 16379

六个节点的配置内容均相同。

创建并配置集群

创建集群

docker-compose up -d

创建完成后可以用命令docker ps查看创建的容器。

启动并配置集群

docker exec -it redis-cluster-node-1 /bin/bash
// 由于是桥接模式,所以必须进入容器内部,也就是子网内进行操作

redis-cli --cluster create 127.0.0.1:6371 127.0.0.1:6372 127.0.0.1:6373 127.0.0.1:6374 127.0.0.1:6375 127.0.0.1:6376 --cluster-replicas 1
//启动并且会自动配置,中途会弹出对话框,直接选 yes 即可。

查看节点信息:

root@4dbff0b91143:/data# redis-cli -c
127.0.0.1:6379> cluster nodes
1493d01dbf398efee77f5dda09880488a05cc8b2 172.26.0.101:6379@16379 myself,master - 0 1645178316000 1 connected 0-5460
1c26f77904c5d2489487284609c88cfd0a3167f4 172.26.0.106:6379@16379 slave 479ea598d5cb7871e91baf4931956a88fc6e3423 0 1645178316000 2 connected
eda0fab1628ab574ee32cb66385d6825345980dd 172.26.0.105:6379@16379 slave 1493d01dbf398efee77f5dda09880488a05cc8b2 0 1645178317287 1 connected
479ea598d5cb7871e91baf4931956a88fc6e3423 172.26.0.102:6379@16379 master - 0 1645178317000 2 connected 5461-10922
0e0d447324f15bba06ec3e3eb481abd5ccfb93b9 172.26.0.104:6379@16379 slave d6dafb2d3b39193e41b42fa3c6d61abe954eb3bf 0 1645178318303 3 connected
d6dafb2d3b39193e41b42fa3c6d61abe954eb3bf 172.26.0.103:6379@16379 master - 0 1645178316255 3 connected 10923-16383

测试集群

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set test redse
-> Redirected to slot [6918] located at 172.26.0.102:6379
OK
172.26.0.102:6379> get test
"redse"
172.26.0.102:6379> get hello
-> Redirected to slot [866] located at 172.26.0.101:6379
"world"

agedcat_xuanzai

这个人很懒,什么都没留下

文章评论

  • 乐乐

    双马尾狗狗好评

    2022年3月8日
  • 您需要 登录 之后才可以评论