docker - [14] redis集群部署

本章节是在一个服务器上进行演示

 

一、准备工作

(1)创建redis集群使用的网络:redis-net

docker network create redis-net --subnet 172.38.0.0/16

(2)查看docker网络:docker network ls

(3)通过脚本创建6个redis配置

for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/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 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

 

二、启动redis的容器 & 集群

(1)启动容器

docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
    -v /mydata/redis/node-1/data:/data \
    -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
    -d --net redis-net --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

# 启动第二个
docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
    -v /mydata/redis/node-2/data:/data \
    -v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
    -d --net redis-net --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
# 启动第三个
docker run -p 6373:6379 -p 16373:16379 --name redis-3 \
    -v /mydata/redis/node-3/data:/data \
    -v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
    -d --net redis-net --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
# ...

(2)要启动6个,还是用shell脚本启动吧

#!/bin/bash

# Step1:记录脚本开始执行时间
start_time=$(date +%s)

# Step2:查看是否有存活的redis容器,如果有存活的redis容器则将其清除掉.
redis_container_count=$(docker ps -a | grep -ci redis)

if [ "$redis_container_count" -gt 0 ]; then
    echo "There are $redis_container_count Redis containers. Proceeding to remove them..."
    docker rm -f $(docker ps -aq --filter name=redis)
    echo "Redis containers have been removed."
else
    echo "No Redis containers found. Nothing to remove.Proceeding to start redis container..."
fi


# Step3:启动redis容器
for no in $(seq 1 6);do
        container_id=$(docker run -p 637${no}:6379 -p 1637${no}:16379 --name redis-${no} \
        -v /mydata/redis/node-${no}/data:/data \
        -v /mydata/redis/node-${no}/conf/redis.conf:/etc/redis/redis.conf \
        -d --net redis-net --ip 172.38.0.1${no} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf)
        echo "Started Redis container redis-${no} with ID ${container_id}"
done

# Step4:记录脚本结束执行时间
end_time=$(date +%s)

# Step5:计算并输出总耗时
elapsed_time=$((end_time - start_time))
echo "Script execution completed at $(date).Total elapsed time: ${elapsed_time} seconds."

# Step6:当前日期及时间
current_time=$(date +'%Y-%m-%d %H:%M:%S')
echo "Current date and time: ${current_time}."

(3)进入容器不能使用/bin/bash

(4)创建redis集群

redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1

(5)查看集群信息:cluster info

(6)查看集群节点信息:cluster nodes

但是第一次配置的时候,发现六个都是master!!

Q:为什么都是显示master?slave呢?

A:在启动redis集群时,redis-cli cluster create时少了--cluster-replicas 1

 

 

三、测试

(1)设置值:set a b,可以看到当前redis是哪个节点:172.38.0.13

(2)另外开个ssh会话窗口B,停掉redis集群主机的容器:docker stop [主机容器名]

(3)在之前的会话窗口执行:get a

可以看到master已经切换到redis-4,而redis-3则显示fail

 

 

四、删除redis集群

(1)删除redis的容器:docker rm -f $(docker ps -aq --filter name=redis)

(2)清除数据和配置文件(位置:/mydata/redis

(3)重新启动redis的容器 (^U^)ノ点此跳转

 

 

 

— 要养成终身学习的习惯 —

posted @ 2024-05-08 11:07  HOUHUILIN  阅读(42)  评论(0编辑  收藏  举报