搭建集群
创建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