redis使用docker搭建集群以及扩容和收容

搭建集群

创建redis‐cluster.tmpl配置Redis信息【端口、是否开启集群等】

创建 redis-cluster.tmpl 配置Redis信息

#端口 
port ${PORT} 
#非保护模式 
protected-mode no 
#启用集群模式 
cluster-enabled yes 
cluster-config-file nodes.conf 
#超时时间 
cluster-node-timeout 5000 
#主机ip
cluster-announce-ip 192.168.81.128 
cluster-announce-port ${PORT} 
cluster-announce-bus-port 1${PORT} 
#开启aof持久化策略 
appendonly yes 
#后台运行 
#daemonize yes 
pidfile /var/run/redis_${PORT}.pid 
#集群加密 
#masterauth redis
#requirepass redis

创建redis.sh配置需要创建的redis信息

创建 redis.sh 配置需要创建的Redis 集群

#!/bin/bash 
#在/usr/local/server/redis‐cluster下生成conf和data目标,并生成配置信息 
for port in `seq 7001 7006`; 
do
	mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf && mkdir -p ./${port}/data; 
done 
#创建6个redis容器 
for port in `seq 7001 7006`; 
do 
	docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/server/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/server/redis-cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
done
#查找ip 
for port in `seq 7001 7006`; 
	do echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port}" "; 
done 
#换行 
echo -e "\n" 
#输入信息 
#输入信息 
read -p "请把输入要启动的docker容器名称,默认redis-7001:" DOCKER_NAME 
#判断是否为空 
if [ ! $DOCKER_NAME ]; 
	then DOCKER_NAME='redis-7001'; 
fi
#进入容器 
docker exec -it redis-7001 /bin/bash

添加网络,redis集群使用该网络

docker network create --driver bridge net-redis

redis.sh添加可执行权限

chmod +x redis.sh

使用redis-cli命令创建集群

# 172.18.0.x 为docker容器ip  
# --cluster-replicas 1 表示每个主节点有一个从节点
./redis-cli --cluster create 172.18.0.2:7001 172.18.0.3:7002 172.18.0.4:7003 172.18.0.5:7004 172.18.0.6:7005 172.18.0.7:7006 --cluster-replicas 1

记得开放redis端口号+10000的端口号,否则一直处于等待状态

扩容

创建redis-port.sh文件添加新的redis docker容器

#!/bin/bash 
#在/usr/local/server/redis‐cluster下生成conf和data目标,并生成配置信息 
#换行 
echo -e "\n" 
#输入信息 
read -p "请输入容器端口:" DOCKER_PORT 
#输入端口赋值 
port=$DOCKER_PORT; 
echo -e "$port" 
#创建配置文件 
mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf && mkdir -p ./${port}/data; 
#创建redis容器 
docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/server/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/server/redis-cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
#查找ip 
echo -n "启动$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port}" 成功!"; 
echo -e "\n"

执行redis-port.sh输入新的端口号 注意一定开放新的端口号+10000的端口号

添加集群主节点

#将192.168.81.128:7007节点添加到192.168.81.128:7001节点所在的集群中
./redis-cli --cluster add-node 192.168.81.128:7007 192.168.81.128:7001

哈希槽分配

# from后面的是redis其他主节点节点的id,to后面的是新加入的主节点的id,表示将其他主节点的哈希槽分配100个给新的主节点
./redis‐cli ‐‐cluster reshard 192.168.211.141:7001 ‐‐cluster‐from c9687b2ebec8b99ee14fcbb885b5c3439c58827f,80a69bb8af3737bce2913b2952b4456430a89eb3,612e4af8eae484 26938ce65d12a7d7376b0b37e3 ‐‐cluster‐to 443096af2ff8c1e89f1160faed4f6a02235822a7 ‐‐cluster‐slots 100

添加集群从节点

执行redis-port.sh文件输入新的port创建新的redis容器
添加从节点

# 为192.168.211.141:7001所在集群id为443096af2ff8c1e89f1160faed4f6a02235822a7的直接点添加从节点192.168.81.128:7008
./redis-cli --cluster add-node 192.168.81.128:7008 192.168.81.128:7001 --cluster-slave --cluster-master-id 443096af2ff8c1e89f1160faed4f6a02235822a7

收容

反向执行 删除从节点,一定哈希槽,删除主节点
删除节点

#删除 192.168.81.128:7001 所在集群中id为98be71d8d6eff6bd40947fa0441e5a821dce20ae的节点
./redis-cli --cluster del-node 192.168.81.128:7001 98be71d8d6eff6bd40947fa0441e5a821dce20ae
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值