Docker 搭建 Redis Cluster集群 每一步都带有操作图、命令!!!

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

之前无论学什么东西,总感觉只要会写小Demo就完事了。但随着学习的深入,(内卷)接触的越来越多,集群、JVM、数据结构、算法、底层、Liunx 系统,任重而道远啊。

分享一句很喜欢的话:“八小时谋生活,八小时外谋发展”。

如果你也喜欢,那一起共勉??

一、环境

  • 阿里云服务器 CentOS 8
  • docker版本为20.10.7
  • redis 镜像 (拉取为默认最新镜像)

在这里插入图片描述

在这里插入图片描述

大致步骤:?

  1. 下载Redis镜像
  2. 编写Redis配置文件
  3. 启动Redis 容器
  4. 创建Redis Cluster 集群。
  5. 进行实际测试

二、前期准备

2.1、搜索、拉取redis镜像

docker search redis
docker pull redis
复制代码

在这里插入图片描述

在这里插入图片描述

2.2、Docker 容器网络

  1. 创建虚拟网卡?

    创建虚拟网卡,主要是用于redis-cluster能于外界进行网络通信,一般常用桥接模式。

    docker network create myredis 
    复制代码
  2. 查看Docker 网卡信息

    docker network ls
    复制代码

    在这里插入图片描述

3、查看dockerr网络详细信息

docker network inspect myredis
复制代码

在这里插入图片描述

4、补充(删除网卡信息、帮助命令)

docker network rm myredis #删除网卡命令 多个中间 空格隔开
docker network --help #显示可带参数等
复制代码

2.3、编写配置文件

此处用到了一点 shlle 编程中 的一些命令,让我们操作更加便利。?

for port in $(seq 6379 6384); 
do 
mkdir -p /home/redis/node-${port}/conf
touch /home/redis/node-${port}/conf/redis.conf
cat  << EOF > /home/redis/node-${port}/conf/redis.conf
port ${port}
requirepass 1234
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes 
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip  47.113.227.254
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
EOF
done
复制代码

命令解释:?

  • port:节点端口;
  • requirepass:设置密码,访问时需要验证
  • protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
  • daemonize:是否以守护线程的方式启动(后台启动),默认 no;
  • appendonly:是否开启 AOF 持久化模式,默认 no;
  • cluster-enabled:是否开启集群模式,默认 no;
  • cluster-config-file:集群节点信息文件;
  • cluster-node-timeout:集群节点连接超时时间;
  • cluster-announce-ip:集群节点 IP
    • 注意: 如果你想要你的redis集群可以供外网访问,这里直接填 服务器的IP 地址即可
    • 如若为了安全,只是在服务器内部进行访问,这里还需要做一些修改。
  • cluster-announce-port:集群节点映射端口;
  • cluster-announce-bus-port:集群节点总线端口。

redis 在官网上有说明为什么需要映射两个端口redis官网

在这里插入图片描述


执行命令完:

在这里插入图片描述

我们通过tree 命令查看目录结构:(如果没有 tree 命令先安装 yum install -y tree

在这里插入图片描述


接下来就是启动容器拉

三、启动容器

3.1、启动redis容器

因为要启动六个容器,一个一个去启动,肯定是麻烦丫。就再次借助shell编程的力量。

for port in $(seq 6379 6384); \
do \
   docker run -it -d -p ${port}:${port} -p 1${port}:1${port} \
  --privileged=true -v /home/redis/node-${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  --privileged=true -v /home/redis/node-${port}/data:/data \
  --restart always --name redis-${port} --net myredis \
  --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf
done
复制代码

解释:?

  • -it:交互

  • -d:后台运行,容器启动完成后打印容器

  • –privileged:是否让docker 应用容器 获取宿主机root权限(特殊权限-)

  • -p :端口映射

  • -v:文件挂载

  • –sysctl参数来设置系统参数,通过这些参数来调整系统性能

  • –restart always:在容器退出时总是重启容器

  • –name :给容器取名

  • –net myredis :使用我们创建的虚拟网卡 (想详细了解,可以去看看Docker 网络方面知识)

执行完成:

在这里插入图片描述

亦可使用docker ps -a 查看运行中容器。

在这里插入图片描述

可以看到已全部启动成功。

?‍?

3.2、创建Redis Cluster集群

可随意选择一个节点进入,创建Redis集群。

1、进入redis-6379 容器

docker exec -it redis-6379 /bin/bash
复制代码

在这里插入图片描述

2、创建集群

redis-cli  -a 之前设置的密码 --cluster create 配置文件中的IP地址:6379 IP地址:6380 IP地址:6381 IP地址:6382 IP地址:6383 IP地址:6384   --cluster-replicas 1
复制代码

在这里插入图片描述

在这里插入图片描述

显示这样的画面就表示已经成功拉。

3、查看节点相关信息

进入容器后,通过redis-cli -c -a 1234,进入redis。?

在这里插入图片描述

输入cluster info 查看集群信息

在这里插入图片描述

也可输入cluster nodes 查看所有节点相关信息

在这里插入图片描述


?‍?下一步就是进入测试阶段拉。?

四、测试

4.1、本机测试

在这里插入图片描述

在这里插入图片描述

我们在 6381中 set 进去,同时在 6379 中能够取出来,这代表我们已经成功拉?

4.2、外网测试

进入windows中 你redis下载的目录中,进入cmd。

在这里插入图片描述

测试说明 我们已经可以连接拉。

那么我们就开启两个cmd 窗口,用不一样的端口进入。

在这里插入图片描述

在这里插入图片描述

到此,可以证明我们的集群是已经搭建成功拉。

4.3、出错可能会用到的命令

批量停止容器

 for port in $(seq 6379 6384); 
 do 
 docker stop redis-${port}
 done
复制代码

批量删除容器

 for port in $(seq 6379 6384); 
 do 
 docker rm redis-${port}
 done
复制代码

4.4、可能会出的错

一直卡在Waiting for the cluster to join ……

: 如果是阿里云或者腾讯云上的服务器 ,要记得打开安全组规则, 6379~6384和16379 ~16384都要打开。

如果是虚拟机上,可能牵扯到防火墙,这个得注意一下。

五、博主自言

?‍?

如若存在错误,欢迎大家不啬赐教!!!

如若存在疑惑或执行错误,请大家评论或私信,定会第一时间回复。

一起继续努力,或者啊,咱们一起? ☺。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享