docker-compose redis集群搭建
1、准备好docker、docker-compose环境
2、找一个自己喜欢的目录,通过 vi install.sh 创建sh文件
3、给install.sh文件放入以下内容,:wq保存退出
4、.sh文件就是文本文件,如果要执行,需要使用chmod a+x install.sh来给可执行权限
执行
方法一 本身目录下运行
进入 cd /目录/目录文件下
执行 ./install.sh
命令会在当前目录下创建一个“test”目录。
方法二 绝对路劲运行
执行 /home/work/test.sh
方法三 本身目录下运行
sh test.sh
以下文件内容注意点:
1、替换ip,成你自己机器的ip
2、放开用到的所有端口,防火墙问题
3、有需要的可以修改/data/redis/redis-cluster路径位置
4、有需要请修改自己的redis密码
5、有需要执行redis版本可以在image: redis:latest位置修改
##############################以下是install.sh的内容 start###################################
#!/bin/bash
# 创建redis挂载目录
echo "step 1 -> 创建redis安装位置------"
mkdir -p /data/redis/redis-cluster
cd /data/redis/redis-cluster
echo "step 2 -> 创建redis-cluster.tmpl模板------"
cat <<'EOF'> redis-cluster.tmpl
port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.103.131
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
requirepass 123456
EOF
#123456密码由自己修改
#for port in `seq 6391 6396`; do \
#firewall-cmd --zone=public --add-port=${port}/tcp --permanent
#done
echo "step 3 -> 创建redis数据配置挂载目录------"
CLUSTER_ANNOUNCE_IP=192.168.103.131
echo ${CLUSTER_ANNOUNCE_IP}
for port in `seq 6391 6396`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} CLUSTER_ANNOUNCE_IP=${CLUSTER_ANNOUNCE_IP} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
echo "step 4 -> 创建redis docker-compose.yaml 模板------"
cat <<EOF > docker-compose.yaml
version: '3'
services:
redis-6391:
image: redis:latest
container_name: redis-6391
command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
privileged: true
restart: always
volumes:
- /data/redis/redis-cluster/6391/data:/data
- /data/redis/redis-cluster/6391/conf/redis.conf:/usr/local/etc/redis/redis.conf
ports:
- 6391:6391
- 16391:16391
redis-6392:
image: redis:latest
container_name: redis-6392
command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
privileged: true
restart: always
volumes:
- /data/redis/redis-cluster/6392/data:/data
- /data/redis/redis-cluster/6392/conf/redis.conf:/usr/local/etc/redis/redis.conf
ports:
- 6392:6392
- 16392:16392
redis-6393:
image: redis:latest
container_name: redis-6393
command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
privileged: true
restart: always
volumes:
- /data/redis/redis-cluster/6393/data:/data
- /data/redis/redis-cluster/6393/conf/redis.conf:/usr/local/etc/redis/redis.conf
ports:
- 6393:6393
- 16393:16393
redis-6394:
image: redis:latest
container_name: redis-6394
command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
privileged: true
restart: always
volumes:
- /data/redis/redis-cluster/6394/data:/data
- /data/redis/redis-cluster/6394/conf/redis.conf:/usr/local/etc/redis/redis.conf
ports:
- 6394:6394
- 16394:16394
redis-6395:
image: redis:latest
container_name: redis-6395
command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
privileged: true
restart: always
volumes:
- /data/redis/redis-cluster/6395/data:/data
- /data/redis/redis-cluster/6395/conf/redis.conf:/usr/local/etc/redis/redis.conf
ports:
- 6395:6395
- 16395:16395
redis-6396:
image: redis:latest
container_name: redis-6396
command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
privileged: true
restart: always
volumes:
- /data/redis/redis-cluster/6396/data:/data
- /data/redis/redis-cluster/6396/conf/redis.conf:/usr/local/etc/redis/redis.conf
ports:
- 6396:6396
- 16396:16396
EOF
echo "docker-compose redis 生成成功!"
echo "step 5 -> 运行docker-compose 部署启动redis容器------"
# 运行docker-compose启动redis容器
docker-compose -f docker-compose.yaml up -d
exist=$(docker inspect --format '{{.State.Running}}' redis-6391)
if [[${exist}!='true']];
then
sleep 3000
else
echo 'redis容器启动成功!'
IP_RESULT=""
CONTAINER_IP=""
for port in `seq 6391 6396`;
do
#CONTAINER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-${port})
IP_RESULT=${IP_RESULT}${CLUSTER_ANNOUNCE_IP}":"${port}" "
done
fi
echo "获取redis容器ip和端口号:" ${IP_RESULT}
echo "step 6 -> redis 执行集群指令------"
#进入其中一个redis-6391,然后执行集群指令,-a 123456,是密码登录
docker exec -it redis-6391 redis-cli -a 123456 --cluster create ${IP_RESULT} --cluster-replicas 1
#执行了上面这句后,控制台需要输入 yes ,才能启动集群
##############################以下是install.sh的内容 end###################################
#停止集群跟删除集群
##############################以下是 delete_redis_cluster.sh的内容 start###################################
#!/bin/bash
for port in `seq 6391 6396`; do
docker stop "redis-"${port}
sleep 1
docker rm "redis-"${port}
done
##############################以下是 delete_redis_cluster.sh的内容 end###################################
##############################以下是 show_cluster_info.sh的内容 start###################################
#查看集群情况,-a 123456 密码按照自己的来,redis-6391是你docker-compose启动时指定的其中一个redis名称
docker exec -it redis-6391 redis-cli -p 6391 -a 123456
#执行show_cluster_info.sh,再输入cluster nodes 或者 cluster info 可以查看集群情况
##############################以下是 show_cluster_info.sh的内容 end###################################