docker-compose搭建redis集群

1. 安装docker-compose

通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动、停止、重启应用,非常适合组合使用多个容器进行开发的场景。

 

curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

#查看版本

docker-compose –version

若报错Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg

手工下载:

https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Darwin-x86_64.tgz

上传到/usr/local/bin目录下,修改文件名为docker-compose

2. Redis集群

2.1.    宿主机文件及文件夹配置

宿主机上创建/lvyou/redis-cluster,下面7000到7005文件夹,

7000文件夹下面创建conf和data文件夹,conf文件夹下创建redis.conf文件。

 

redis.conf内容如下:

bind 0.0.0.0

appendonly yes

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 15000

# nodes.conf是集群配置文件(这个在后面搭建的时候,会自动生成)

7001 7002 7003 7004 7005同7000

 

docker-compose.yml内容如下:

version: "3"

services:

  redis1:

    container_name: redis1

    image: redis

    networks:

      - cluster

    volumes:

      - ./7000/conf/redis.conf:/usr/local/etc/redis/redis.conf

      - ./7000/logs:/usr/local/redis/logs

      - ./7000/data:/data

    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

    restart: always

 

  redis2:

    container_name: redis2

    image: redis

    networks:

      - cluster

    volumes:

      - ./7001/conf/redis.conf:/usr/local/etc/redis/redis.conf

      - ./7001/logs:/usr/local/redis/logs

      - ./7001/data:/data

    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

    restart: always

 

  redis3:

    container_name: redis3

    image: redis

    networks:

      - cluster

    volumes:

      - ./7002/conf/redis.conf:/usr/local/etc/redis/redis.conf

      - ./7002/logs:/usr/local/redis/logs

      - ./7002/data:/data

    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

    restart: always

 

  redis4:

    container_name: redis4

    image: redis

    networks:

      - cluster

    volumes:

      - ./7003/conf/redis.conf:/usr/local/etc/redis/redis.conf

      - ./7003/logs:/usr/local/redis/logs

      - ./7003/data:/data

    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

    restart: always

 

  redis5:

    container_name: redis5

    image: redis

    networks:

      - cluster

    volumes:

      - ./7004/conf/redis.conf:/usr/local/etc/redis/redis.conf

      - ./7004/logs:/usr/local/redis/logs

      - ./7004/data:/data

    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

    restart: always

 

  redis6:

    container_name: redis6

    image: redis

    networks:

      - cluster

    volumes:

      - ./7005/conf/redis.conf:/usr/local/etc/redis/redis.conf

      - ./7005/logs:/usr/local/redis/logs

      - ./7005/data:/data

    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

    restart: always

networks:

  cluster:

2.2.    启动docker-compose

在redis-cluster目录下执行

docker-compose up –d

 

#查看一些网络信息

docker inspect redis-cluster_cluster

 

 

 

主(Master)

从(Slave)

redis1 172.19.0.3

redis4 172.19.0.6

redis2 172.19.0.5

redis5 172.19.0.7

redis3 172.19.0.2

redis6 172.19.0.4

2.3.    Redis集群配置

docker exec -it redis1 /bin/bash #进redis1容器

redis-cli -h redis1 #进redis1的redis

#将节点都加到集群

cluster meet 172.19.0.3 6379

cluster meet 172.19.0.5 6379

cluster meet 172.19.0.2 6379

cluster meet 172.19.0.6 6379

cluster meet 172.19.0.7 6379

cluster meet 172.19.0.4 6379

 

cluster nodes

 

 

 

主(Master)

标识

172.19.0.3

dc274ddf9d319c2c7f69ae24eb6242fb4ffba383

172.19.0.5

87903fb1c5c97d8b165d89dcb5e8e4d366ceb95b

172.19.0.2

d9aebd8a9b19c3d654316c0d28fea0d04bcca685

 

回到宿主机/lvyou/redis-cluster/7000/data目录下,创建addslots.sh脚本,用于分配插槽。

vi addslots.sh

内容如下:

#!/bin/bash
#将0-5461的槽点配置在redis1 上
n=0
for ((i=n;i<=5461;i++))
do
   /usr/local/bin/redis-cli -h 172.19.0.3 CLUSTER ADDSLOTS $i
done
 
#将5462-10922的槽点配置在redis2 上
n=5462
for ((i=n;i<=10922;i++))
do
   /usr/local/bin/redis-cli -h 172.19.0.5 CLUSTER ADDSLOTS $i
done
 
#将10923-16383的槽点配置在redis3 上
n=10923
for ((i=n;i<=16383;i++))
do
   /usr/local/bin/redis-cli -h 172.19.0.2 CLUSTER ADDSLOTS $i
done

 

创建slaves.sh脚本,添加主从关系

vi slaves.sh

内容如下:

# 需要用到 从 redis 到IP 与 主redis 的节点标识

# 主 redis1 从 redis4

/usr/local/bin/redis-cli -h 172.19.0.6 CLUSTER REPLICATE dc274ddf9d319c2c7f69ae24eb6242fb4ffba383

# 主 redis2 从 redis5

/usr/local/bin/redis-cli -h 172.19.0.7 CLUSTER REPLICATE 87903fb1c5c97d8b165d89dcb5e8e4d366ceb95b

# 主 redis3 从 redis6

/usr/local/bin/redis-cli -h 172.19.0.4 CLUSTER REPLICATE d9aebd8a9b19c3d654316c0d28fea0d04bcca685

 

再进redis1容器里

docker exec -it redis1 /bin/bash

赋执行权限

chmod -R 755 addslots.sh slaves.sh

./addslots.sh   (时间有点长)

./slaves.sh

 

再进入redis1的redis查看集群情况

 

 

 

 

 

再以集群方式进入

 

posted @ 2020-11-19 10:23  lvyouyou  阅读(425)  评论(0编辑  收藏  举报