使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)

这篇具有很好参考价值的文章主要介绍了使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Redis 单机版安装

1.1 拉取 Redis

首先从 docker hub 拉取 Redis 镜像,这里拉取 7.0 版。

docker pull redis:7.0

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

1.2 创建数据卷目录

首先要在宿主机/root 目录中创建一个目录 redis,将来用于存放外挂文件 redis.conf。

mkdir redis

使用rz命令上传一份redis.conf:

rz
1.3 修改 redis.conf

修改配置文件:

vim redis.conf

1.解除 IP 绑定

将 bind 行注释掉,以解除 Redis 对访问者 IP 的绑定。

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

2.关闭保护模式
关闭保护模式,否则只能本机访问自己。
docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

3.指定持久化目录
这里要指定 RDB 或 AOF 的持久化目录为/data,这样无论是哪种持久化文件,均会保存
到该目录。后面会指定容器中的/data 目录为数据卷挂载点目录。
docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

1.4 启动 Redis 容器
docker run --name myredis \
-v /root/redis/redis.conf:/etc/redis/redis.conf \
-v /root/redis/data:/data \
-dp 6379:6379 \
redis:7.0 \
redis-server /etc/redis/redis.conf

这里指定了两个数据卷,其中一个是文件,一个是目录:

  • /root/redis/redis.conf:/etc/redis/redis.conf
  • /root/redis/data:/data
    对于该启动命令需要注意的是,其后面运行的命令为 redis-server,且加载的配置文件为
    挂载点目录/etc/redis 中的 redis.conf。

查看运行的docker的镜像:

docker ps -a

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

1.5 进入容器连接 Redis

通过 docker exec 命令进入 Redis 容器后,就可通过 redis-cli 客户端连接上这个 Redis,然后执行 Redis 命令了。

docker exec -it myredis /bin/bash
redis-cli

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

到此为止,单机版的redis搞定啦!!!!

2、Redis 一主两从集群搭建

现要搭建一个“一主两从”的 Redis 集群。这三个容器的端口号都保持默认,但对外暴露出的端口号分别为 6381、6382、6383。其中,6381 的为 master,另外两个为 slave。

2.1 复制三份 redis.conf

现仍在前面的/root/redis 目录中完成配置。复制 redis.conf 并重命名为 redis1.conf,并在文件最后添加如下配置,以对外宣布当前 redis 的 IP 与端口。注意,该 IP 为 docker 宿主机的 IP,端口号为当前 redis 对外暴露的端口号。

复制 redis.conf 并重命名为 redis1.conf

cp redis.conf redis1.conf

修改redis1.conf

vim redis1.conf

最后加上两句语句如下:

slave-announce-ip 192.168.162.105
slave-announce-port 6381

同理redis2.conf redis3.conf 如下:

slave-announce-ip 192.168.162.105
slave-announce-port 6382
slave-announce-ip 192.168.162.105
slave-announce-port 6383

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

2.2 启动 master

首先启动 master,即启动 myredis-1 容器。

docker run --name myredis-1 \
-v /root/redis/redis1.conf:/etc/redis/redis.conf \
-v /root/redis/data/6381:/data \
-dp 6381:6379 \
redis:7.0 \
redis-server /etc/redis/redis.conf

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

2.3 启动 两个redis slave

在启动 slave 的命令中需要指出其 slaveof 于谁。

启动myredis-2:

docker run --name myredis-2 \
-v /root/redis/redis2.conf:/etc/redis/redis.conf \
-v /root/redis/data/6382:/data \
-dp 6382:6379 \
redis:7.0 \
redis-server /etc/redis/redis.conf --slaveof 192.168.162.105 6381

启动myredis-3:

docker run --name myredis-3 \
-v /root/redis/redis3.conf:/etc/redis/redis.conf \
-v /root/redis/data/6383:/data \
-dp 6383:6379 \
redis:7.0 \
redis-server /etc/redis/redis.conf --slaveof 192.168.162.105 6381

2.4 三者关系查看

查看这三个容器节点的 info replication,可以看到它们间的主从关系已经建立。

docker exec -it myredis-1 redis-cli info replication

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

docker exec -it myredis-2 redis-cli info replication

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

docker exec -it myredis-3 redis-cli info replication

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

2.5 数据测试

在 master 节点 myredis-1 中写入数据。

docker exec -it myredis-1 /bin/bash

redis-cli

set name tigerhhzz11
set name tigerhhzz11

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

这里可以新开一个连接窗口进行测试
在 slave 节点 myredis-2 与 myredis-3 节点中可读出数据。
docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

3、Redis 高可用集群搭建

主从集群存在的问题是,其容灾方式只能采用冷处理方案,无法在生产中使用。所以,这里要搭建一个“一主两从三哨兵”的高可用集群,以达到热处理的容灾方案。对于“一主两从”集群,仍使用前面的即可。下面直接搭建三个 Sentinel 节点的集群。这三个容器的端口号都保持默认,但对外暴露出的端口号分别为 26381、26382、26383。

3.1 复制三份 sentinel.conf

复制 sentinel.conf 文件并重命名为 sentinel1.conf。仅修改两处:

  • 指定其要监视的 master 及。
  • 指定当前 sentinel 对外宣布的 IP 与端口号。其中 IP 为 docker 宿主机的 IP,端口号为其
    对外暴露的端口号。

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

修改sentinel1.conf

vim sentinel1.conf

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

sentinel monitor mymaster 192.168.162.105 6381 2
sentinel announce-ip 192.168.162.105
sentinel announce-port 26381

同理,再复制并修改 sentinel2.conf。

```bash
sentinel monitor mymaster 192.168.162.105 6381 2
sentinel announce-ip 192.168.162.105
sentinel announce-port 26382

同理,再复制并修改 sentinel3.conf。

```bash
```bash
sentinel monitor mymaster 192.168.162.105 6381 2
sentinel announce-ip 192.168.162.105
sentinel announce-port 26383

3.2 启动 sentinel

启动三个 sentinel 容器。

docker run --name mysentinel-1 \
-v /root/redis/sentinel1.conf:/etc/redis/sentinel.conf \
-dp 26381:26379 \
redis:7.0 \
redis-sentinel /etc/redis/sentinel.conf

docker run --name mysentinel-2 \
-v /root/redis/sentinel2.conf:/etc/redis/sentinel.conf \
-dp 26382:26379 \
redis:7.0 \
redis-sentinel /etc/redis/sentinel.conf
docker run --name mysentinel-3 \
-v /root/redis/sentinel3.conf:/etc/redis/sentinel.conf \
-dp 26383:26379 \
redis:7.0 \
redis-sentinel /etc/redis/sentinel.conf

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

3.3 关系查看
docker exec -it mysentinel-1 redis-cli -h 192.168.162.105 -p 26381 info sentinel

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

以上命令的查看结果说明 sentinel 对 master 的监视成功,说明高可用集群搭建成功。连接任何一个 sentinel 容器节点查看到的信息与上面的都是相同的。

3.4 故障转移测试

为了验证高可用性,现将充当 master 的容器 myredis-1 停掉。

docker stop myredis-1

此时,再查看另外两个 redis 容器的状态数据,发现 myredis-2 成为了 myredis-3 的 slave,
即 myredis-3 成为了新的 master。

docker exec -it myredis-2 redis-cli info replication
docker exec -it myredis-3 redis-cli info replication

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群
此时再次 myredis-1 容器启动。

docker start myredis-1

再查看 myredis-1 的状态数据,发现其成为了 myredis-3 的 slave。

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群
docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

4、Redis 分布式系统搭建

Redis 集群的每个节点中的保存的数据都是相同的。而 Redis 分布式系统的节点中存放的数据可以是不同的。当有数据写入请求到达分布式系统后,系统会采用虚拟槽分区算法将数据写入到相应节点。

下面要搭建一个三主三从的 Redis 分布式系统。

序号 角色 容器名称 网络模式 暴露地址
1 master myredis-cluster-1 host 192.168.162.105:6381
2 master myredis-cluster-2 host 192.168.162.105:6382
3 master myredis-cluster-3 host 192.168.162.105:6383
4 slave myredis-cluster-4 host 192.168.162.105:6384
5 slave myredis-cluster-5 host 192.168.162.105:6385
6 slave myredis-cluster-6 host 192.168.162.105:6386
4.1 准备目录与配置文件

在/root 中 mkdir 一个名称为 cluster 的目录,并将前面的配置文/root/redis/redis.conf
复制到这里。

[root@docker ~]# mkdir cluster
[root@docker ~]# cd cluster
[root@docker cluster]# cp /root/redis/redis.conf redis.conf
[root@docker cluster]# ll

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

4.2 复制六份 redis.conf

复制 redis.conf 为 redis1.conf,并在其中将下面两个配置前的注释去掉。这两项配置,一个是用于开启 cluster 功能,即分布式系统功能;一个是指定其需要的配置文件名称。

cp redis.conf redis1.conf
vim redis1.conf

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

然后再以 redis1.conf 为模板复制出 5 份,分别为 redis2.conf、redis3.conf、redis4.conf、redis5.conf、redis6.conf。这 6 份配置文件内容完全相同。

[root@docker cluster]# ll
总用量 108
-rw-r--r--. 1 root root 106667 114 17:24 redis1.conf
[root@docker cluster]# cp redis1.conf redis2.conf
[root@docker cluster]# cp redis1.conf redis3.conf
[root@docker cluster]# cp redis1.conf redis4.conf
[root@docker cluster]# cp redis1.conf redis5.conf
[root@docker cluster]# cp redis1.conf redis6.conf
[root@docker cluster]# ll
总用量 756
-rw-r--r--. 1 root root 106667 114 17:28 redis1.conf
-rw-r--r--. 1 root root 106667 114 17:28 redis2.conf
-rw-r--r--. 1 root root 106667 114 17:28 redis3.conf
-rw-r--r--. 1 root root 106667 114 17:28 redis4.conf
-rw-r--r--. 1 root root 106667 114 17:28 redis5.conf
-rw-r--r--. 1 root root 106667 114 17:28 redis6.conf
-rw-r--r--. 1 root root 106667 114 17:24 redis.conf
[root@docker cluster]# 

4.3 启动 redis

启动前先删除所有运行的容器:

docker rm -f $(docker ps -qa)

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

启动 6 个 Redis 容器。

docker run --name myredis-1 --network host -v /root/cluster/redis1.conf:/etc/redis/redis.conf -v /root/cluster/data/6381:/data -d redis:7.0 redis-server /etc/redis/redis.conf --port 6381
docker run --name myredis-2 --network host -v /root/cluster/redis2.conf:/etc/redis/redis.conf -v /root/cluster/data/6382:/data -d redis:7.0 redis-server /etc/redis/redis.conf --port 6382
docker run --name myredis-3 --network host -v /root/cluster/redis3.conf:/etc/redis/redis.conf -v /root/cluster/data/6383:/data -d redis:7.0 redis-server /etc/redis/redis.conf --port 6383
docker run --name myredis-4 --network host -v /root/cluster/redis4.conf:/etc/redis/redis.conf -v /root/cluster/data/6384:/data -d redis:7.0 redis-server /etc/redis/redis.conf --port 6384
docker run --name myredis-5 --network host -v /root/cluster/redis5.conf:/etc/redis/redis.conf -v /root/cluster/data/6385:/data -d redis:7.0 redis-server /etc/redis/redis.conf --port 6385
docker run --name myredis-6 --network host -v /root/cluster/redis6.conf:/etc/redis/redis.conf -v /root/cluster/data/6386:/data -d redis:7.0 redis-server /etc/redis/redis.conf --port 6386
4.4 创建系统

6 个节点启动后,它们仍是 6 个独立的 Redis,通过 redis-cli --cluster create 命令可将 6个节点创建为一个分布式系统。–cluster replicas 1 指定每个 master 会带有一个slave 副本。

docker exec -it myredis-1 /bin/bash

redis-cli --cluster create --cluster-replicas 1 192.168.162.105:6381 192.168.162.105:6382 192.168.162.105:6383 192.168.162.105:6384 192.168.162.105:6385 192.168.162.105:6386

回车后即可看到如下的计划日志:
docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

键入 yes 后再回车,即可按照上面的计划完成系统创建。

4.5 查看节点信息

通过 cluster nodes 命令可以查看到系统中各节点的关系及连接情况。只要能看到每个节点给出 connected,就说明分布式系统已经成功搭建。

查看6383集群节点信息:

redis-cli -c -p 6383 cluster nodes

docker redis 集群,容器技术 Docker+K8S,docker,redis,java,redis集群

看到connected,就说明成功了搭建了三主三从的redis集群!!!(完毕)文章来源地址https://www.toymoban.com/news/detail-833543.html

到了这里,关于使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生-K8s-1】kubeadm搭建k8s集群(一主两从)完整教程及kubernetes简介

    🍁 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入!   Kubernetes(简称:k8s) 是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多

    2024年02月07日
    浏览(45)
  • Mysql主从数据库搭建(一主两从)

    目录 1、服务器规划 2、主从同步流程 3、主从搭建 3.1、master节点上配置文件修改 3.2、master节点创建同步用户和权限 3.3、slave1和slave2节点配置文件修改 3.4、slave1和slave2节点执行同步任务 3.5、解决虚拟机克隆导致mysql所有服务器uuid都一样的问题 4、bin-log相关说明 5、主从同步注

    2024年02月11日
    浏览(33)
  • MySQL:一主两从架构(读写分离)

    slave会从master读取binlog来进行数据同步 (1): master将数据改变记录到二进制日志binlog中; (2): slave上执行 start slave 命令后,slave会创建一个IO线程,用来连接master,请求master中的binlog; (3): 当slave连接master时,master会创建一个log dump线程,用于发送binlog内容。在读取binlog的内容的操

    2023年04月09日
    浏览(31)
  • MySQL8.xx一主两从复制安装与配置

    docker实战(一):centos7 yum安装docker docker实战(二):基础命令篇 docker实战(三):docker网络模式(超详细) docker实战(四):docker架构原理 docker实战(五):docker镜像及仓库配置 docker实战(六):docker 网络及数据卷设置 docker实战(七):docker 性质及版本选择 认知升维: 道、法、术、器、势 多台服务器间

    2024年02月13日
    浏览(32)
  • Kubernetes(k8s)上搭建一主两从的mysql8集群

    本文章视频教程地址:https://www.bilibili.com/video/BV1iw411e7ZE/ 首先你需要准备一个kubernetes集群和一台nfs服务器,为了方便,我就用 k8s-master 来做nfs服务器了。我的服务器IP地址和用途如图: IP地址 主机名 用途 192.168.1.160 k8s-master Kubernetes主服务器兼nfs服务器 192.168.1.161 K8s-node01 Ku

    2024年02月06日
    浏览(38)
  • docker 搭建mysql集群一主一从,两台机器

    一、准备两条机器,分别为IP1和IP2,其中IP1为主,IP2为从 二、在两台机器上分别拉取mysql镜像 三、在home目录下新建目录,分别为/home/mysql/data,/home/mysql/conf 1、在IP1主机下的/home/mysql/conf目录下新建my.cnf文件,内容为 2、在IP2从机的/home/mysql/conf目录下新建my.cnf文件,内容为 四、在

    2024年01月24日
    浏览(40)
  • 使用Docker搭建Redis主从集群

    欢迎来到 请回答1024 的博客 🍓🍓🍓欢迎来到 请回答1024的博客 关于博主 : 我是 请回答1024 ,一个追求数学与计算的边界、时间与空间的平衡,0与1的延伸的后端开发者。 博客特色 : 在我的博客中,开设了如下专栏( 点击可以进入专栏奥~ ): Java、MySQL、Redis、Spring、SpringB

    2024年04月24日
    浏览(31)
  • 使用docker搭建 redis cluster 集群

    目录 1.拉取redis镜像 2.创建network 3.创建redis配置文件 4.创建redis容器 5.创建Redis Cluster集群 6.测试 1.拉取redis镜像 2.创建network docker容器创建的应用会默认使用 bridge,但是每次重启docker此网络的ip会动态变更,因此需要我们自己手动创建一个固定的network 其它虚拟网卡相关命令

    2024年02月02日
    浏览(30)
  • 使用Docker-Compose搭建Redis集群

    3主+3从 由于仅用于测试,故我这里只用1台服务器进行模拟 redis列表 在server上创建一个目录用于存放redis集群部署文件。这里我放的路径为/root/redis-cluster 在/opt/docker/redis-cluster目录下创建redis-1,redis-2,redis-3,redis-4,redis-5,redis-6文件夹 注意:port值不能都为6379,根据上面redis列表设

    2024年02月15日
    浏览(29)
  • 远程服务器,使用docker搭建redis集群提示:SlaveConnectionPool no available Redis entries

    1、部署条件:         1.1 远程服务器         1.2 docker部署:参考 https://blog.csdn.net/qq_42971035/article/details/128171542  2、出现问题:         2.1 服务器部署服务,连接redis集群,会提示\\\"SlaveConnectionPool no available Redis entries\\\"。         2.2 本地连接远程服务器,提示\\\"connection 

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包