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查看集群情况
再以集群方式进入