Redis集群(主从)

1.主从集群

集群结构:

一.单机安装redis
1.上传压缩包并解压,编译

tar -xzf redis-6.2.4.tar.gz
cd redis-6.2.4
make && make install
2.修改redis.config的配置并启动redis
# 绑定地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问
bind 0.0.0.0
# 保护模式,关闭保护模式
protected-mode no
# 数据库数量,设置为1
databases 1
redis-server redis.conf
二.准备实例和配置

要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。

1.创建目录

我们创建三个文件夹,名字分别叫7001、7002、7003:

# 进入/tmp目录
cd /tmp
# 创建目录
mkdir 7001 7002 7003
2.恢复原始配置
# 开启RDB
# save ""
save 3600 1
save 300 100
save 60 10000# 关闭AOF
appendonly no
3.拷贝配置文件到每个实例目录
# 方式一:逐个拷贝
cp redis-6.2.4/redis.conf 7001
cp redis-6.2.4/redis.conf 7002
cp redis-6.2.4/redis.conf 7003# 方式二:管道组合命令,一键拷贝
echo 7001 7002 7003 | xargs -t -n 1 cp redis-6.2.4/redis.conf
4.修改每个实例的端口、工作目录

修改每个文件夹内的配置文件,将端口分别修改为7001、7002、7003,将rdb文件保存位置都修改为自己所在目录(在/tmp目录执行下列命令):

sed -i -e 's/6379/7001/g' -e 's/dir .\//dir \/tmp\/7001\//g' 7001/redis.conf
sed -i -e 's/6379/7002/g' -e 's/dir .\//dir \/tmp\/7002\//g' 7002/redis.conf
sed -i -e 's/6379/7003/g' -e 's/dir .\//dir \/tmp\/7003\//g' 7003/redis.conf
5.修改每个实例的声明IP        

虚拟机本身有多个IP,为了避免将来混乱,我们需要在redis.conf文件中指定每一个实例的绑定ip信息

# 逐一执行
sed -i '1a replica-announce-ip ip' 7001/redis.conf
sed -i '1a replica-announce-ip ip' 7002/redis.conf
sed -i '1a replica-announce-ip ip' 7003/redis.conf
三.开启主从关系
一.启动三个redis实例
# 第1个
redis-server 7001/redis.conf
# 第2个
redis-server 7002/redis.conf
# 第3个
redis-server 7003/redis.conf

一键停止:

printf '%s\n' 7001 7002 7003 | xargs -I{} -t redis-cli -p {} shutdown

现在三个实例还没有任何关系,要配置主从可以使用replicaof 或者slaveof(5.0以前)命令。

有临时和永久两种模式:

  • 修改配置文件(永久生效)

    • 在redis.conf中添加一行配置:slaveof <masterip> <masterport>

  • 使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效):

slaveof <masterip> <masterport>

在5.0以后新增命令replicaof,与salveof效果一致。

二.slaveof命令连接

连接7002与7003端口,并与7001做连接

# 连接 7002
redis-cli -p 7002
# 执行slaveof
slaveof ip 7001

连接7001接口查看状态

# 连接 7001
redis-cli -p 7001
# 查看状态
info replication

三.测试:

可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。

四:数据同步原理(全量同步,增量同步)

master通过Replication Idoffset来判断是否为第一次同步数据

Replication Id:简称replid,是数据集的标记,id一致表示是同一数据集,每一个master都有唯一的replid,slave会继承master节点的replid。

offset:偏移量,记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset,如果slave的offset小于master的offset,说明slave数据落后master,需要更新。

因此slave做数据同步,必须向master声明自己的replication id和offset,master才可以判断到底需要同步那些数据。

增量同步:将repl_baklog与offset之间记录的命令发送给slave去同步数据。

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

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

相关文章

Tomcat布署及优化-----JDK和Tomcat

1.Tomcat简介 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器&#xff0c;Tomcat 属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试 JSP 程序的首选。一般来说&…

C++ //练习 10.2 重做上一题,但读取string序列存入list中。

C Primer&#xff08;第5版&#xff09; 练习 10.2 练习 10.2 重做上一题&#xff0c;但读取string序列存入list中。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /******************************************************…

Vue前端加密后的数据发送到服务器端

首先&#xff0c;定义了一个名为 PUBLIC_KEY 的公钥和一个名为 PRIVATE_KEY 的私钥。然后&#xff0c;通过 JSEncrypt 创建了两个实例 encrypt 和 decrypt&#xff0c;分别用于加密和解密操作。 对于加密操作&#xff0c;调用了 encrypt.setPublicKey() 方法设置公钥&#xff…

升级Centos7的openssh到openssh-9.6p1版本 shell脚本 漏扫整改

升级Centos7的openssh到openssh-9.6p1版本 shell脚本 漏扫整改 #!/bin/bash# 声明: 该脚本适用于升级Centos7的openssh到openssh-9.6p1版本# 定义源码包版本号 OPENSSH_VERSIONopenssh-9.6p1 OPENSSL_VERSIONopenssl-3.2.1 ZILB_VERSIONzlib-1.3.1# 安装编译环境 yum -y insta…

【前端面试题5】利用 border 属性画一个三角形

举例1&#xff1a;利用 border 属性画一个三角形&#xff08;小技巧&#xff09; 完整代码如下&#xff1a; div{width: 0;height: 0;border: 50px solid transparent;border-top-color: red;border-bottom: none; }步骤如下&#xff1a; &#xff08;1&#xff09;当我们设…

【QT+QGIS跨平台编译】之五十六:【QGIS_CORE跨平台编译】—【qgsmeshcalclexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

Android 拍照本地图片选择框架适配

前言 通常技术方案的选择、会带来后续一些不可控的东西&#xff0c;这也是没法避免的&#xff0c;程序开发者中同时面对、测试、领导、产品各种要求。同时在网络上查找的资料也只是很旧的&#xff0c;不一定适合新设备&#xff0c;需要推倒重新弄 1、解决方案通过意图选择器做…

day6 数组 嵌套循环

1&#xff1a;打印杨辉三角 91 int arr[6][6];92 int i,j0;93 for(i0;i<6;i)94 {95 for(j0;j<i;j) 96 {97 if(j0||ij)98 {99 arr[i][j]1; …

2024-3-4 如何写出具有python风格的代码

写出具有python风格的代码 什么是python风格如何写出具有python风格的自定义数据类型 什么是python风格 python风格是指自定义的数据类型表现得得与内置类型一样。比如&#xff0c;我创建了一个类&#xff0c;它的实例不用调用类的方法就可以实现迭代、切片&#xff0c;可以直…

推特API(Twitter API)对接说明,用户code To Token换取

前期准备 提前准备、说明&#xff1a;目前对接推特api开发门户分为3个版本&#xff0c;分别是免费的&#xff0c;100美金一个月的基础版以及5000美金一个月的企业版&#xff0c;免费的目前就两个接口可以调用&#xff0c;所以想要对接和使用推特最基本的也需要付100美元一个月…

百度百科人物创建要求是什么?

百度百科作为我国最大的中文百科全书&#xff0c;其收录的人物词条要求严谨、客观、有权威性。那么&#xff0c;如何撰写一篇高质量的人物词条呢&#xff1f;本文伯乐网络传媒将从内容要求、注意事项以及创建流程与步骤三个方面进行详细介绍。 一、内容要求 1. 基本信息&#…

什么是 web 应用的 type-ahead search help

在 Web 前端设计领域&#xff0c;type-ahead search help&#xff08;又称为自动完成或即时搜索&#xff09;是一种用户界面功能&#xff0c;它能够在用户输入搜索词的同时&#xff0c;实时提供搜索建议或结果。这种功能极大地提升了用户体验&#xff0c;因为它可以帮助用户快速…

LeetCode每日一题【c++版】- 用队列实现栈与用栈实现队列

用队列实现栈 题目描述 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶。int pop() 移除…

Studio One 6永久激活版 附完整图文安装破解教程

Studio One 6是一款功能强大的音乐制作和录音软件&#xff0c;专为Mac操作系统设计。它提供了多轨录音和混音、MIDI音乐制作、实时效果和处理、VST插件支持以及高级编辑和编排等丰富的功能。无论是专业音乐制作人还是音乐爱好者&#xff0c;都可以使用Studio One 6来创建和编辑…

程序员英语词汇宝典(建议收藏)

很多小伙伴说&#xff0c;英文不好能不能学习编程&#xff0c;我个人的看法是英文不好&#xff0c;并不影响你学习编程&#xff0c;但有可能会影响到你的编程上限&#xff0c;因为一些最新的文档都是英文的。如果你想成为一个编程大牛&#xff0c;那么英文还是很有必要的。今天…

cocos-lua定时器用法

本文介绍cocos-lua(非Quick-cocos)的定时器用法 定时器按是否会随节点销毁&#xff0c;可分为节点调度器和全局调度器 一.节点调度器 frameworks\cocos2d-x\cocos\scripting\lua-bindings\script\cocos2d\deprecated.lua中实现了了schedule和 performWithDelay 1.1.schedul…

基础真空技术外国文献Fundamentals of Vacuum Technology

基础真空技术外国文献Fundamentals of Vacuum Technology

道路积水监测站——确保道路畅通和行车安全

TH-JS1道路积水监测站是一种专门用于监测城市道路积水情况的设备&#xff0c;旨在保障城市道路安全和防止水患对交通造成的不利影响。这些监测站通过实时检测和记录道路积水数据&#xff0c;为城市管理部门提供重要信息&#xff0c;以便及时采取应对措施&#xff0c;确保道路畅…

vue diff算法介绍

Vue.js 的 diff 算法是一种用于虚拟 DOM 比较的高效算法&#xff0c;其核心目的是在数据变更时&#xff0c;能够最小化 DOM 操作&#xff0c;提高更新性能。以下是关于 Vue diff 算法的介绍&#xff1a; 1. 算法目标&#xff1a; Vue 的 diff 算法旨在比较新旧虚拟节点&#…

990-29产品经理:IT risk management process IT风险管理流程

IT risk management process IT风险管理流程 In business, IT risk management entails a process of identifying, monitoring and managing potential information security or technology risks with the goal of mitigating or minimising their negative impact. Exampl…