Docker搭建Redis集群

前置准备

redis.conf 配置文件
port 6379
bind 0.0.0.0
save 60 5
protected-mode no
dbfilename dump.rdb
dir /data/redis/data
pidfile /data/redis/data/redis.pid
appendonly yes
cluster-enabled yes
cluster-config-file /data/redis/data/nodes.conf
cluster-node-timeout 5000
cluster-announce-port 6379
cluster-announce-bus-port 16379
cluster-announce-ip 192.168.10.1 #为该节点IP
脚本start_run.sh
  • 初始化目录及配置文件
  • 将上面的redis.conf 输入到redis0$num/redis.conf配置文件中
  • 开启容器

bashDir 为创建目录
number为创建节点数量
confDir 为redis.conf 目录
startIp 为开始IP #正常IP 192.1.10.1 这里输入192.1.10
startPort 为开始端口 # 26380 则容器端口从26391开始

#!/bin/bash
bashDir=$1
number=$2
confDir=$3
startIp=$4
startPort=$5

if [ -z "$bashDir" ]; then
    echo "参数bashDir为空!"
fi


if [ -z "$number" ]; then
    echo "参数number为空!"
fi


if [ -z "$confDir" ]; then
    echo "参数confDir为空!"
fi

if [ -z "$startIp" ]; then
    echo "参数startIp为空!"
fi


if [ -z "$startPort" ]; then
    echo "参数startPort为空!"
fi

cd $bashDir
echo "Cd dir --> $bashDir"

for((index=1;index<=$number;index++))
do
    mkdir -p redis0$index/data  redis0$index/conf
    touch redis0$index/conf/redis.conf
    cat /dev/null > redis0$index/conf/redis.conf
    cat << EOF >redis0$index/conf/redis.conf
    port 6379
    bind 0.0.0.0
    save 60 5
    protected-mode no
    dbfilename dump.rdb
    dir /data/redis/data
    pidfile /data/redis/data/redis.pid
    appendonly yes
    cluster-enabled yes
    cluster-config-file /data/redis/data/nodes.conf
    cluster-node-timeout 5000
    cluster-announce-port 6379
    cluster-announce-bus-port 16379
    cluster-announce-ip $startIp.$index
EOF
    echo "Create dir $bashDir/redis0$index Successfully!"
    docker run -itd --net=redis_net --ip=$startIp.$index -v $bashDir/redis0$index/data:/data/redis/data \
    -v $bashDir/redis0$index/conf/redis.conf:/data/redis/conf/redis.conf -p $((startPort+index)):6379 -p 1$((startPort+index)):16379 \
    --name=redis0$index docker.io/redis:5.0 \
    redis-server /data/redis/conf/redis.conf
    echo "Start run redis docker container"
done

echo "All finish!"
更新配置文件update_conf.sh
#!/bin/bash
for n in 1 2 3 4 5 6
do
    cat /dev/null > redis0$n/conf/redis.conf
    cat redis.conf > redis0$n/conf/redis.conf
done
echo "End!!!! "

docker准备

创建自定义网络redis_net
配置网关和子网掩码

docker network create redis_net --gateway 172.168.0.1 --subnet=172.168.0.1/16

启动容器

使用start_run.sh 启动

sh start_run.sh /data/containers/redis 9 /data/containers/redis/redis.conf 172.168.10 26380

在这里插入图片描述
可以看到redis容器已经起来了
在这里插入图片描述

创建集群

进入到redis容器里执行!

redis-cli --cluster create --cluster-replicas 2 172.168.10.1:6379 172.168.10.2:6379 172.168.10.3:6379 172.168.10.4:6379 172.168.10.5:6379 172.168.10.6:6379 172.168.10.7:6379 172.168.10.8:6379 172.168.10.9:6379

其中172.168.10.1 - 172.168.10.9为容器的IP 不能用宿主机+映射端口!
在这里插入图片描述

进入redis容器执行 redis-cli -c

可以看到一共有3个集群 每个集群为1主2从
在这里插入图片描述

到此已经搭建完成!

测试

执行 redis-cli -c

set个数据试试

在这里插入图片描述

可以看到将该值存到了172.168.10.3主节点上

退出集群模式,直接连另外一个主节点 172.168.10.1 看看是否有数据

在这里插入图片描述

可以看到提示到172.168.10.3 上获取数据

试试高可用能力

1.将172.168.10.3主节点停掉
2.可以看到172.168.10.3主节点的从节点172.168.10.9 变成了主节点。说明高可用能力没问题

在这里插入图片描述

至此完成了!

备注:

redis启动命令

docker run -itd --net=redis_net --ip=172.168.10.2 -v /data/containers/redis/redis02/data:/data/redis/data -v /data/containers/redis/redis02/conf/redis.conf:/data/redis/conf/redis.conf -p 26380:6379 --name=redis02 docker.io/redis:5.0 redis-server /data/redis/conf/redis.conf

使用awk获取redis容器的所有端口

docker ps|grep redis |awk '{print $10}' |awk -F':' '{print $2}'|awk -F'->' '{print $1}'

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值