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

news2024/11/16 13:46:02

一、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.coloradmin.cn/o/1130360.html

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

相关文章

基于数字电路交通灯信号灯控制系统设计-单片机设计

**单片机设计介绍,1617基于数字电路交通灯信号灯控制系统设计(仿真电路,论文报告 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序文档 六、 文章目录 一 概要 交通灯控制系统在城市交通控制中发挥着重要的作用&#xf…

谷粒商城一

谷粒商城一 1. 项目介绍1.1 微服务架构图1.2 微服务划分图 2. 项目环境搭建2.1 虚拟机搭建环境2.2 Linux 安装 docker、配置镜像加速2.3 Docker 配置 MySQL、设置自启动2.3.1 安装 MySQL5.72.3.2 修改 mysql 配置文件 2.4 Docker 配置 Redis 并设置持久化2.5 安装 jdk Maven 镜…

接口自动化测试_L4

目录: 接口加密与解密 ​​​​​​​环境准备原理实战练习多套被测环境 ​​​​​​​多环境介绍多套被测环境切换的意义和价值实现目标实现方案-环境管理环境切换通过环境变量进行切换使用命令行进行切换多响应类型封装设计 ​​​​​​​​​​​​​​多协议…

解决LOGITECH 罗技驱动 MAC版出现的一些问题汇总!

安装前将之前的安装文件清理干净!!!!! 罗技驱动最新安装包下载 我的鼠标是G304 1. 驱动安装一直卡在99% 运行官方下载的安装程序,卡住后关掉窗口。 在终端中执行以下命令: sudo /Users/用户名…

HarmonyOS第一课运行Hello World

前言 俗话说,工欲善其事必先利其器。鸿蒙第一课,我们先从简单的Hello World运行说起。要先运行Hello World,那么我们必须搭建HarmonyOS的开发环境。 下载与安装DevEco Studio 在HarmonyOS应用开发学习之前,需要进行一些准备工作&a…

FoLR:Focus on Local Regions for Query-based Object Detection论文学习笔记

论文地址:https://arxiv.org/abs/2310.06470 自从DETR问询式检测器首次亮相以来,基于查询的方法在目标检测中引起了广泛关注。然而,这些方法面临着收敛速度慢和性能亚优等挑战。值得注意的是,在目标检测中,自注意力机制…

NanoPC-T4 RK3399:DTS之io-domain,FAN

前言: 之后所有改动均是基于rk3399-evb.dts修改以满足NanoPC-T4功能正常。 NanoPC-T4开发板上有一片散热风扇,本章将讲述使风扇正常工作起来的多种方法。 一:硬件分析 GPIO4_C6/PWM1:实际控制风扇引脚,GPIO与PWM复用 输入高电平1:FAN2pin电路导通,风扇转动 输入低电…

dc8靶机攻略

dc8 扫描 渗透 先访问主页探查 该主页的url看似存在sql注入 断点注入一下看看有没有报错 发现报错,存在sql注入 使用sqlmap 爆库 sqlmap -u http://10.4.7.151 -current-db爆表 sqlmap -u http://10.4.7.151/?nid2 --tables -D "d7db"发现user表 …

【Unity3D】Unity与Android交互

1 Unity 发布 apk 1.1 安装 Android Build Support 在 Unity Hub 中打开添加模块窗口,操作如下。 选择 Android Build Support 安装,如下(笔者这里已安装过)。 创建一个 Unity 项目,依次点击【File→Build Settings→…

Office技巧(持续更新)(Word、Excel、PPT、PowerPoint、连续引用、标题、模板、论文)

1. Word 1.1 标题设置为多级列表 选住一级标题,之后进行“定义新的多级列表” 1.2 图片和表的题注自动排序 正常插入题注后就可以了。如果一级标题是 “汉字序号”,那么需要对题注进行修改: 从原来的 图 { STYLEREF 1 \s }-{ SEQ 图 \* A…

3,4,6,9,?,18

3,4,6,9,?,18 逐步变大的递增数组 分析一: 3 6 -1 4 x 2 4 9 -1 6 x 2 6 ? -1 9 x 2 ? 13 9 18 -1 ? x 2 ? 13 分析二: 4 - 3 1 6 - 4 2 9 - 6 3 ?- 9 4 …

CPU眼里的C/C++: 1.3 汇编级单步调试函数执行过程

1. 目的 2. 基于 GDB 的汇编级单步调试 原始代码 #include <stdio.h>long test() {long a 1;a 2;return a; }int main() {int ret test();printf("test return %d\n", ret);return 0; }关键 gdb 命令 si 指令执行汇编级的单步调试info registers 读取寄…

黑豹程序员-架构师学习路线图-百科:API接口测试工具Postman

文章目录 1、为什么要使用Postman&#xff1f;2、什么是Postman&#xff1f; 1、为什么要使用Postman&#xff1f; 目前我们开发项目大都是前后端分离项目&#xff0c;前端采用h5cssjsvue基于nodejs&#xff0c;后端采用java、SpringBoot、SSM&#xff0c;大型项目采用SpringC…

设计模式(五)—— 建造者模式/生成器模式

先简单记一下&#xff0c;以后再来认真写 还是造房子那个例子&#xff0c;一个房子分为①打地基 ② 砌墙 ③封顶三步&#xff0c;如果不用设计模式去写的话。就是一个超类&#xff0c;然后多个子类继承超类去重写 但是这样有两个缺点&#xff1a; &#xff08;1&#xff09;产…

centos服务器搭建安装Gitlab教程使用教程

1、更新服务器&#xff1a; sudo yum update -y && sudo yum upgrade -y 2、下载Gitlab的RPM包 https://packages.gitlab.com/gitlab/gitlab-cece表示开源el表示centos 选64位el8对应CentOS8 本教程以centos8为例&#xff0c;在服务器中&#xff0c;下载centos8的…

JS操作DOM及CSS

JS创造于1994年&#xff0c;其目的是为浏览器显示的文档赋予动态行为。 1 Web编程基础 本节讲解如何编写Web应用中的js程序&#xff0c;如果将这些程序加载到浏览器&#xff0c;以及如何获取输入、产出输出&#xff0c;如何运行响应事件的异步代码。 1.1 js 脚本 虽然现在不…

2023 10月最新Vmd 下载安装教程,WindowsLinux

文章目录 下载Vmdwindows版本安装LINUX版本安装 下载Vmd 谷歌搜索VMD 点击左下角download VMD 可选择对应版本 注&#xff1a;点击后会出现输入用户名和密码&#xff0c;由于我已注册&#xff0c;界面不见了&#xff0c;所以直接描述一下。 输入用户名和密码然后会出现让登记…

(ubuntu)安装nginx

文章目录 前言回顾Linux命令在线安装&#xff1a;相关命令&#xff1a;相关路径常用配置&#xff1a; 卸载nginxbug相关: 前言 提示&#xff1a;别再问我的规划是什么了&#xff1a;呼吸&#xff0c;难道不算一个吗&#xff1f; --E.M齐奥朗 回顾Linux命令 # 查看当前进程的所…

Boundary-Aware RGBD Salient Object Detection With Cross-Modal Feature Sampling

方法 体会 实验做得比较详细&#xff0c;但未公布代码

面试题总结 20231024

1.桶排序的应用案例&#xff1a;上亿元素排行榜 step1: 桶排序本质是一种分治算法 step2:每个桶都代表了一个元素的范围 step3:每个桶中的元素都排好序后&#xff0c;取出来&#xff0c;这样子就有序了 2.简述你们框架中用到的线程模型 1.actor思想(单线程处理) 2.xdb加锁(类…