基于docker构建Redis Cluster

1、拉取Redis镜像

docker pull redis:6.2  选了一个较为稳定的version

 

2、创建配置文件

比如在服务器的用户目录下/home/w/(俺的服务器用户目录)

mkdir redis_cluster
cd redis_cluster
mkdir bin
mkdir conf
mkdir data
cd data
mkdir node-1
mkdir node-2
mkdir node-3
mkdir node-5
mkdir node-6

创建配置文件vim redis-node-1.conf ,依次6个文件redis-node-1.conf  redis-node-2.conf  redis-node-3.conf  redis-node-4.conf  redis-node-5.conf  redis-node-6.conf

bind 0.0.0.0
protected-mode no
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.1.6
cluster-announce-port 7000
cluster-announce-bus-port 17000

user r_user on >read123 ~* +@read ~* -@write ~* -@admin
user rw_user on >write123 ~* +@read ~* +@write ~* -@admin
user admin on >admin123 ~* &* +@all
user default off

 
3、创建脚本

创建初始化脚本 vim init_redis.sh 

#!/bin/bash

echo "Creating Redis cluster..."

# 启动6个Redis节点
for i in {1..6}; do
  port=$((6999 + $i))
  container="redis-node-$i"
  config="/home/w/redis/conf/redis-node-$i.conf"
  data="/home/w/redis/data/node-$i"

  docker run -d --name $container \
    -p $port:6379 -p $((port + 10000)):16379 \
    --net redis-cluster \
    -v $config:/usr/local/etc/redis/redis.conf \
    -v $data:/data \
    -e TZ="Asia/Shanghai" \
    --ulimit nofile=100000:100000 \
    redis:6.2 redis-server /usr/local/etc/redis/redis.conf

  # 检查容器是否启动成功
  if [ $? -ne 0 ]; then
    echo "Failed to start $container"
    exit 1
  fi
done

# 等待节点启动
sleep 10

# 获取所有节点的 IP,这里是容器IP
nodes=""
for i in {1..6}; do
  ip=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node-$i)
  nodes+="$ip:6379 "
done

echo "Nodes: $nodes"

# 创建 Redis 集群(使用密码连接)
docker exec -it redis-node-1 redis-cli -u redis://admin:admin123@localhost:6379 --cluster create $nodes --cluster-replicas 1

echo "All Redis nodes should be running now. Here is the list of running containers:"
docker ps | grep redis

 

创建停止脚本 vim stop_redis.sh

#!/bin/bash

# 停止redis cluster
for i in {1..6}; do
  docker stop redis-node-$i
done

 

创建删除镜像脚本 vim rm_redis.sh

#!/bin/bash

for i in {1..6}; do
  docker rm redis-node-$i
done

 

创建启动容器脚本 vim start_redis.sh 

#!/bin/bash

for i in {1..6}; do
  docker start redis-node-$i
done

 

查看集群状态信息

docker exec -it redis-node-1 redis-cli CLUSTER INFO

带密码版

docker exec -it redis-node-1 redis-cli -u redis://admin:admin123@localhost:6379 CLUSTER INFO

 

查看集群节点信息

docker exec -it redis-node-1 redis-cli CLUSTER NODES

docker exec -it redis-node-1 redis-cli -u redis://admin:admin123@localhost:6379 CLUSTER NODES

 

最后通过客户端连接测试



后记:不得不说Redis Cluster集群还是很消耗CPU和带宽资源的,因为我的服务器是自己的旧笔记本搭建,启动后系统的CPU和网络资源负载很大(怪不得Redis应用一般独占一台服务器资源)

posted @ 2025-03-27 23:10  Ashe|||^_^  阅读(18)  评论(0)    收藏  举报