Docker:创建主从复制的Redis集群

一、Redis集群

        在实际项目里,一般不会简单地只在一台服务器上部署Redis服务器,因为单台Redis服务器不能满足高并发的压力,另外如果该服务器或Redis服务器失效,整个系统就可能崩溃。项目里一般会用主从复制的模式来提升性能,用集群模式来提升吞吐量并提升可用性
本次将使用Docker容器来模拟服务器,用启动多个Docker容器的方法来模拟
“在多个服务器上安装Redis”的效果在实际项目里,一般不会简单地只在一台服务器上部署Redis服务器,因为单台Redis服务器不能满足高并发的压力,另外如果该服务器或Redis服务器失效,整个系统就可能崩溃。项目里一般会用主从复制的模式来提升性能,用集群模式来提升吞吐量并提升可用性
本次将使用Docker容器来模拟服务器,用启动多个Docker容器的方法来模拟
“在多个服务器上安装Redis”的效果在实际项目里,一般不会简单地只在一台服务器上部署Redis服务器,因为单台Redis服务器不能满足高并发的压力,另外如果该服务器或Redis服务器失效,整个系统就可能崩溃。项目里一般会用主从复制的模式来提升性能,用集群模式来提升吞吐量并提升可用性
本次将使用Docker容器来模拟服务器,用启动多个Docker容器的方法来模拟
“在多个服务器上安装Redis”的效果

二、基于主从复制模式的集群


        在主从复制模式的集群里,主节点一般是一个,从节点一般是两个或多个,写入主节点的数据会被复制到从节点上,这样一旦主节点出现故障,应用系统就能切换到从节点去读写数据,提升系统的可用性。
        再采用主从复制模式里默认的读写分离机制,就能提升系统的缓存读写性能。在实际应用中,如果有相应的设置,在向一台Redis服务器里写数据后,这个数据可以复制到另外一台(或多台) Redis服务器,这里数据源服务器叫主服务器(Master Server),复制数据目的地所在的服务器叫从服务器(Slave Server) 。

三、主从复制模式的优势

可以把写操作集中到主服务器上,把读操作集中到从服务器上,以提升读写性能
由于出现了数据备份,因此能提升数据的安全性,比如当主Redis服务器失效后,能很快切换到从服务器上读数据。 

四、通过命令创建redis集群

4.1 用命令搭建主从集群

        这里将用Docker容器来搭建一主二从模式的集群,在配置主从关系时,需要在从节点上使用slaveof命 令,具体的步骤如下。

4.1.1 创建主redis节点(master)

打开一个命令窗口,在其中运行如下命令创建一个名为redis-master的Redis容器。注意,它的端口是 6379。

docker run -itd --name redis-master -p 6379:6379 redis:6.2.13

4.1.2  创建从节点(slavel)

新开一个命令窗口,在其中运行如下命令创建一个名为redis-slave1的容器。注意,它的端口是6380。 这里是在一台电脑上运行,所以用端口号来区别一台主Redis容器和另外两台从Redis容器。在真实项目 里,多台Redis会部署在不同的服务器上,所以可以都用6379端口。

docker run -itd --name redis-slave1 -p 6380:6380 redis:6.2.13
docker run -itd --name redis-slave2 -p 6381:6381 redis:6.2.13

4.1.3 查看redis主节点ip(容器内部ip)

  回到包含redis-master容器的命令窗口,在其中运行docker inspect redis-master命令,查看redis master容器的信息 

  在其中能通过IPAddress项看到该容器的IP地址,这里是172.17.0.2。在真实项目里,Redis服务器所在 的IP地址是固定的,而通过Docker容器启动的Redis服务器的IP地址是动态的,所以这里要用上述命令来 获取IP地址。

docker inspect redis-master | grep IPAddress

4.1.4 进入redis主节点,可以查看redis状态(例如:是不是主节点,有几个从节点等) 

docker exec -it redis-master /bin/bash
info replication

通过info replication命令查看当前的主从模式状态,能看到如下所示的部分结果。 

role:master表示当前redis-master容器在主从模式里的角色是“主服务器”。 connected_slaves表示当前该主服务器没有携带从服务器。

 

 4.1.5 进入redis从节点,将此节点设置为从节点

再到redis-slave1容器的命令窗口里,通过docker exec -it redis-slave1/bin/bash命令进入容器的命令行 窗口

docker exec -it redis-slave1 /bin/bash

  由于此时还没有通过命令行设置主从模式,因此输出结果里依然能看到当前服务器是“主服务器”,同时 没有携带从服务器。 在redis-slave1容器的命令窗口里运行如下的slaveof命令,指定当前Redis服务器为从服务器。该命令的 格式是slaveof IP地址端口号,这里是指向172.17.0.2:6379所在的主服务器。 

slaveof 172.17.0.2 6379

 

主节点 

至此,配置完成一主二从模式的主从模式。 注:现在没有配置文件的情况下,从redis的默认端口仍然是6379,即使我们对端口做了映射,因此我们需要使用指定配置文件的方式,创建redis集群

4.1.6 测试 

        到redis-master容器所在的命令行窗口运行set name renge后,再到两台从服务器里运行get name命 令,就能看到返回值。 这说明主从模式配置成功,主服务器里的数据会自动同步到各从服务器上。

五、通过配置搭建主从redis集群 

  在项目里除了可以用slaveof命令搭建主从模式的集群外,还可以用配置参数的方式来搭建,具体的步骤 如下。

搭建主服务器redis-master的命令不变,并且还是用6379端口。 用

docker run -itd --name redis-master -p 6379:6379 redis:6.2.13

docker inspect redis-master命令确认该Redis服务器所在容器的IP地址依然是172.17.0.2。 在/opt/server下编写配置文件redisSlave1.conf,并在其中编写如下内容。

port 6380

slaveof 172.17.0.2 6379

通过第1行的命令设置该Redis的端口为6380,通过第2行的slaveof配置把该Redis服务器设置成“从模 式”,并连接到redis-master所在的主服务器上。 在新的命令窗口里运行如下的命令,创建名为redis-slave1的Redis服务器。该服务器的工作端口是 6380,并且用redis-server后的参数指定在启动Redis服务器时加载redisSlave1.conf配置文件。

docker run -itd --name redis-slave1 -v /opt/redisSlave1.conf:/redisConfig/redisSlave1.conf -p 6380:6380 redis:6.2.13 redis-server /redisConfig/redisSlave1.conf

随后通过docker exec -it redis-slave1 /bin/bash命令进入到该容器的命令行

docker exec -it redis-slave1 /bin/bash

由于Redis工作端口已经变成6380(配置文件中指定了端口),所以需要通过redis-cli -h 127.0.0.1 -p 6380命令进入Redis客户端。在其中运行info replication命令 以同样的方式创建redis-slave2,将端口绑定到6381即可

六、配置读写分离效果

在上文里配置的redis-slave1和redis-slave2这两台从服务器里运行info replication命令,还能看到
“slave_read_only:1”这项配置,说明从服务器默认是“只读”的。


到redis-slave1的Redis客户端命令行里输入set val 1,就会看到如下面第2行所示的错误,从而能进一步
验证该Redis服务器的“只读”属性。


对于Redis从服务器而言,建议采用默认的“只读”配置,因为在项目里一般不会向作为数据同步目的地的
“从服务器”上写数据。如果业务上确实需要,可以通过如下步骤设置“可读可写”的效果。
在上文提到的redisSlave2.conf配置文件里再加入一行“slave-read-only no”的配置,指定该服务器可读可写。
 

七、用心跳机制提高主从复制的可靠性

在Redis主从复制模式里,如果主从服务器之间有数据同步的情况,那么从服务器会默认以一秒一次的频 率向主服务器发送REPLCONF ACK命令,依次来确保两者间连接通畅。这种定时交互命令确保连接的机 制就叫“心跳”机制。 在上文开启的redis-master这个主服务器的命令行里,运行info replication命令,就能看到它从属服务 器的“心跳”状况。 通过lag表示该从属服务器发送REPLCONF ACK命令的时间,这里均是1秒,表示两台从服务器和主服务 器的连接均属通畅。 这里大家可以想象一下,如果从服务器宕机,那么主从复制就没有意义了。对此,可以通过如下的步骤 来关联心跳机制和主动复制的动作。 在/usr/server下新建redisMaster.conf文件,在其中编写如下的代码。

min-slaves-to-write 2

min-slaves-max-lag 15

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CouchDB简单入门

CouchDB 1.curl命令 RESTful 新增:POST请求修改:PUT请求删除:DELETE请求查找:GET请求 查看数据库有哪些 curl -X GET http://admin:123456localhost:5984/_all_dbsadmin: 用户名 123456:改成自己密码 创建数据库 curl -X PU…

《语音优先》智能语音技术驱动的交互界面设计与语音机器人设计(译者序)...

“言为心声,语为心境”,语言与对话是我们沟通与协作的重要方式。而智能语音技术是一种基于人工智能和自然语言处理技术的语音交互技术。它可以通过语音识别技术将用户的语音指令转换为文本,然后通过自然语言处理技术对文本进行分析和理解,最终…

WIN11+OPENCV4.8 编译及下载失败处理方法

1. 基础准备 1. 下载Opencv和Contrib库 Opencv:Releases opencv/opencv GitHub Contrib:Tags opencv/opencv_contrib GitHub 2. 安装Visual Studio 或 MinGW64 MinGW:Tags opencv/opencv_contrib GitHub 这里安装1.12.0 MinGW 。 以…

flutter 使用FlutterJsonBeanFactory工具遇到的问题

如下图,使用FlutterJsonBeanFactory工具生成的数据类 但是其中 生成的 import package:null/,导致的错误:Target of URI doesn’t exist: ‘package:null/generated/json/asd.g.dart’ 尝试过的方法: 手动添加包名,…

【计算机网络笔记】网络应用进程通信

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

allegro中shape的一些基本操作(三)——挖空铜皮(shape)、删除孤岛

挖空铜皮(shape) 去除孤岛shape 挖空铜皮(shape) 我们在有的时候需要考虑分布电容的对信号完整性的影响,所以需要在整个铜皮的中间挖掉一块铜皮。 这三个分别对应挖不规则铜皮、矩形铜皮、圆形铜皮 例如&#xff1a…

MySQL数据库(二)

文章目录 MySQL数据库一、字符编码与配置文件二、存储引擎1.如何查看存储引擎2.重要的存储引擎MyISAMInnoDBMEMORYBlackHole演示 三、创建表的完善语法四、字段类型之整型整型分类及存储范围 五、字段类型之浮点型六、字段类型之字符类型1.研究两者区别2.严格模式3.研究定长、不…

读高性能MySQL(第4版)笔记19_云端和合规性

1. 如何构建数据库环境 1.1. 托管MySQL 1.2. VM上构建 1.3. 天下没有免费的午餐,每一个选择都伴随着一系列的权衡 2. 托管MySQL 2.1. 服务商提供了一个可访问的数据库设置程序,而不需要用户深入了解MySQL的具体细节 2.2. 使用托管MySQL将缺乏很多的…

中国艺术孙溟㠭篆刻《绕绕》

孙溟展先生现在的这方篆刻作品,没有使用大篆和小篆文字来篆刻,彰显篆刻的金石魅力。一改以往的不同,以圆形组合设计,用篆刻的刀法刻出,即体现篆刻的美,又达到了作者想表达的感情。这方篆刻作品溟展先生起名…

2023/10/23 mysql学习

数据库修改 show databases; 展示所有数据库 create database 数据库名; 创建数据库 create database if not exists 数据库名; 如果未创建过当前数据库名则创建 drop database 数据库名; drop database if exists 数据库名;用法和创建类似 删除数据库 use 数据库名; 跳…

nodejs+vue备忘记账系统-计算机毕业设计

本文首先介绍了备忘记账系统管理技术的发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章…

Plooks大型视频在线一起看网站源码

在前段时间,因为想和异地的朋友一起看电影,但是发现有电影的地方没有一起看功能,有一起看功能的视频网站没有电影,所以就想自己做一个一起看网站,于是就有了Plooks。 Plooks是一个完整的视频网站,其中包括…

SpringBoot Web请求响应

目录 前言请求PostmanPostman使用 简单参数原始方式接收普通参数SpringBoot方式接收普通参数参数名不一致问题 实体参数简单实体参数复杂实体对象 数组集合参数数组参数集合参数 日期参数JSON参数路径参数 响应ResponseBody统一响应结果请求响应案例案例需求与准备工作案例实现…

Rust所有权

文章目录 什么是所有权Stack vs Heap所有权规则变量作用域String类型内存与分配所有权与函数 引用与借用可变引用悬垂引用引用的规则 切片字符串切片其他类型的切片 什么是所有权 什么是所有权 所有程序在运行时都必须管理其使用计算机内存的方式: 一些语言中具有垃…

Mr.Alright---MTK安卓13 抬手亮屏功能的逻辑

该功能在系统设置-显示-拿起设备时唤醒 alps\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\display\LiftToWakePreferenceController.javapublic boolean isAvailable() {SensorManager sensors (SensorManager) mContext.getSystemServ…

分库分表-ShardingSphere 4.x(2)

❤️作者简介:2022新星计划第三季云原生与云计算赛道Top5🏅、华为云享专家🏅、云原生领域潜力新星🏅 💛博客首页:C站个人主页🌞 💗作者目的:如有错误请指正,将…

小知识(6) el-table表格选中行和回显行(vue3)

el-table表格选中行和回显行 官方文档说明 https://element-plus.org/zh-CN/component/table.html#table-%E6%96%B9%E6%B3%95 环境&#xff1a;vue3element-plus 选中行selection <el-table ref"baseTableRef" row-key"id" border :selection"tr…

SpringBoot整合XXL-JOB详解

❤️作者简介&#xff1a;2022新星计划第三季云原生与云计算赛道Top5&#x1f3c5;、华为云享专家&#x1f3c5;、云原生领域潜力新星&#x1f3c5; &#x1f49b;博客首页&#xff1a;C站个人主页&#x1f31e; &#x1f497;作者目的&#xff1a;如有错误请指正&#xff0c;将…

12.4 组播鼠标批量执行

组播模式相比单播模式可以提高网络的效率和带宽利用率&#xff0c;因为组播数据包只需要发送一次&#xff0c;就可以被多个接收者接收&#xff0c;而不需要每个接收者都单独发送一份数据包。这在需要同时向多个接收者发送相同数据的场景下特别有用&#xff0c;如视频会议、在线…

矢量图形编辑软件 illustrator 2023 mac 中文软件特点

illustrator 2023 mac是一款矢量图形编辑软件&#xff0c;用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator 2023 mac软件特点 矢量图形&#xff1a;illustrator创建的图形是矢量图形&#xff0c;可以无限放大而不失真&#xff0c;这与像素图形编辑软…