Redis集群环境搭建

Redis集群环境搭建

Redis主从复制

概念

主从复制是指将一台Redis服务器的数据,复制到其他的Redis服务器,前者称为主节点(master/leader),后者称为从节点(slave/followe);数据的复制是单向的,只能从主节点到从节点,以Master写为主,Slave以读为主

默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点,但是一个从节点只能有一个主节点。主从复制的作用主要包括:

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  2. 故障恢复:当主节点出现问题时。可以由从节点提供服务,实现故障的快速恢复,实际上是一种服务的冗余
  3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器的负载,尤其是在写多读少的情况下,通过多个节点分担负载,可以大大提高Redis服务器的并发量
  4. 高可用:除了上述作用外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础

一般来说,要将Redis运用于工程项目中,只使用一台Redis是万万不能的,原因如下:

  1. 从结构上,单个Redis服务器发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大
  2. 从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量256G,也不能将所有内存用做Redis的存储服务,一般来说,单台Redis最大使用内存不应该超过20G

一般类似于电商网站上的商品,都是一次上传,无数次浏览的,也就是读多写少。对于这种场景可以使用以下架构设计:

在这里插入图片描述

环境配置

# 只配置从库,不用配置主库,因为redis默认每个节点都是master
127.0.0.1:6379> info replication	#查看当前库的信息
# Replication
role:master	#角色master
connected_slaves:0	#从库数量为0
master_replid:d4486b0339829fff1d75d3b082083753834e3c55
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

复制三个配置文件,然后修改对应的信息

# 79 80 81 对应的是端口号(6379 6380 6381)
[root@VM-4-17-centos redisconfig]# cp redis.conf redis79.conf
[root@VM-4-17-centos redisconfig]# cp redis.conf redis80.conf
[root@VM-4-17-centos redisconfig]# cp redis.conf redis81.conf
[root@VM-4-17-centos redisconfig]# vim redis79.conf#修改这些东西即可
dbfilename dump6381.rdb	#RDB文件名字
logfile "6381.log"	日志文件名
pidfile /var/run/redis_6381.pid pid文件名
port 6381	端口
# 依次启动三个服务后查看redis进程
[root@VM-4-17-centos bin]# redis-server redisconfig/redis81.conf
[root@VM-4-17-centos bin]# ps -ef | grep redis
root     29572     1  0 09:57 ?        00:00:00 redis-server 127.0.0.1:6379
root     29597     1  0 09:57 ?        00:00:00 redis-server 127.0.0.1:6380
root     29630     1  0 09:58 ?        00:00:00 redis-server 127.0.0.1:6381
root     29654 28611  0 09:58 pts/3    00:00:00 grep --color=auto redis

一主二从

默认情 况下,每台Redis服务器都是主节点,一般只要配置从节点即可

# 连接80客户端
[root@VM-4-17-centos bin]# redis-cli -p 6380
127.0.0.1:6380> ping
PONG
127.0.0.1:6380> info replication
# Replication
role:master	#主节点
connected_slaves:0
master_replid:115cb18c414d42087891ba03ae8cb29f55c4af7a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# 用slaveof命令进行配置
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6380> info replication
# Replication
role:slave	#从节点
master_host:127.0.0.1
master_port:6379	#主节点端口
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:1aa4607c8f616befc56059c548b59921c34b8eba
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14# 在主节点中可以查看到从节点
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=98,lag=0	#从节点的信息
master_replid:1aa4607c8f616befc56059c548b59921c34b8eba
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:98

在这里插入图片描述

这里的修改是通过命令进行主从节点的配置,服务器重启之后就会失效,一般在实际开发环境都是通过配置文件进行修改。

在这里插入图片描述

# 主机可以写,从机只能读不能写,主机中的所有信息和数据都会自动同步到从机
# 主机设置一个key
127.0.0.1:6379> set k1 v1
OK
# 在两个从机都能读到
127.0.0.1:6380> get k1
"v1"
127.0.0.1:6381> get k1
"v1"# 尝试在从机设置一个key
127.0.0.1:6380> set k2 v2
(error) READONLY You can't write against a read only replica.
# 我们现在将主机断掉
127.0.0.1:6379> shutdown
not connected> exit#然后再查看从机的信息
127.0.0.1:6380> info replication
# Replication
role:slave	#还是一个从节点(后面更新哨兵模式的时候会说到)
master_host:127.0.0.1
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1172
master_link_down_since_seconds:95
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:1aa4607c8f616befc56059c548b59921c34b8eba
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1172
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1172
# 将一个从机断掉再重启
127.0.0.1:6380> shutdown
not connected> exit
[root@VM-4-17-centos bin]# redis-server redisconfig/redis80.conf 
[root@VM-4-17-centos bin]# redis-cli -p 6380
127.0.0.1:6380> ping
PONG
127.0.0.1:6380> info replication
# Replication
role:master	#又变成了主机,这个是因为我们没有走配置文件
connected_slaves:0
master_replid:b70f9cbf316e5b4ab8e465794538f9051d6d8c56
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0# 这个时候我们在79这个台机器上设置一个key
127.0.0.1:6379> set k2 v2
OK
# 80上拿不到,因为这时候它已不是79的从机
127.0.0.1:6380> get k2
(nil)# 再将80设置为79的从机
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:192
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:fce6232ffa0779d9479f4b13d6ce60e1cb3bd46c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:192
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:179
repl_backlog_histlen:14
127.0.0.1:6380> get k2	#顺利拿到k2的值
"v2"

复制原理

  1. Slave启动成功连接到Master后会发送一个sync命令
  2. Master接到命令,后台启动存盘进程,同时收集所有收到的用于修改数据集命令,在后台进程执行完毕之后,Master将传送整个数据文件到Slave,并完成一次全量同步

这里有个复制的概念,全量复制和增量复制

全量复制:slave重启之后将master发送的数据文件加载到内存中

增量复制:Master将新的所有收集到的修改命令依次传给slave(连接到master之后进行的命令传递)

只要是重新连接master,就会进行一次全量复制

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

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

相关文章

学成在线: 新增/修改课程计划

新增/修改课程计划(同接口) 界面原型 第一步: 在课程计划界面,点击添加章新增第一级课程计划,点击添加小节可以向某个第一级课程计划下添加小节 新增章/节成功后会自动发起请求刷新课程计划列表并且把新增的课程计划信息添加到数据库当中,新增的课程计划自动排序到最后 第二…

CentOS 8 下载

https://mirrors.bfsu.edu.cn/centos/8-stream/isos/x86_64/ 下载地址: https://mirrors.bfsu.edu.cn/centos/8-stream/isos/x86_64/CentOS-Stream-8-x86_64-latest-dvd1.iso

喜报|博睿数据算力调度可观测平台荣获信通院“算力服务领航者计划”优秀案例

近日,中国通信标准化协会云计算标准和开源推进委员会2023年度工作总结会暨算力服务工作组成果发布会在京举行。会上,“2023年算力服务领航者计划优秀案例名单”正式公布,博睿数据的核心产品算力调度可观测平台 Bonree ONE成功入选&#xff0c…

数据结构----队列(Queue)的概念、队列的使用、模拟实现队列、循环队列、模拟实现循环队列、双端队列、模拟实现双端队列

文章目录 1 概念2 队列的使用3 队列模拟实现4 循环队列4.1 循环队列 概念4.1 循环队列模拟实现 5. 双端队列 (Deque)6 用队列实现栈7 用栈实现队列 1 概念 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有…

LeetCode:283. 移动零

283. 移动零 1)题目2)代码方法一:两层for循环方法二:使用双指针 3)结果方法一结果方法二结果 1)题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的…

QT研究笔记(一)windows 开发环境安装部署

一、Qt 是什么? Qt 是一个跨平台的应用程序开发框架,最初由挪威的 Trolltech 公司开发,并于2008年被诺基亚收购。后来,Qt 框架由 Digia 公司接手,并在2012年成立了 The Qt Company。Qt 提供了一套丰富的工具和类库&am…

如何学习亚马逊、速卖通和阿里国际站等平台的测评自养号技术?

由于近年来各大平台纷纷开展开店政策,并得到国家对跨境电商的大力支持,吸引了众多中国卖家加入其中,每年呈逐渐增长的趋势。然而,与国内的淘宝、京东等平台不同,亚马逊并没有实时通讯工具和客服,卖家在购买…

OceanBase 4.2.2 GA 发布,全新特性快速预览!

在 2023 年度发布会上,OceanBase 沿着“一体化”产品战略思路,发布了一体化数据库的首个长期支持版本 4.2.1 LTS。作为 4.0 系列的首个 LTS 版本,该版本的定位是支撑客户关键业务稳定长久运行,我们非常认真的打磨了这个版本&#…

代码随想录算法训练营Day46|139.单词拆分、多重背包理论基础、背包问题总结

目录 139.单词拆分 方法一:回溯法 算法实现 方法二:背包问题 算法实现 多重背包理论基础 思路 算法实现 背包问题总结 前言 背包递推公式 遍历顺序 0-1背包 完全背包 139.单词拆分 题目链接 文章链接 方法一:回溯法 在回溯专题…

XXE基础知识整理(附加xml基础整理)

全称:XML External Entity 外部实体注入攻击 原理 利用xml进行读取数据时过滤不严导致嵌入了恶意的xml代码;和xss原理雷同 危害 外界攻击者可读取商户服务器上的任意文件; 执行系统命令; 探测内网端口; 攻击内网网站…

【八大排序】冒泡排序 | 快速排序 + 图文详解!!

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C语言进阶之路 🌅 有航道的人,再渺小也不会迷途。 文章目录 交换排序一、冒泡排序1.1 算法步骤 动图演示1.2 冒泡排序的效率分析1.3 代码实现1.4 …

JavaScript阻止浏览器默认行为

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 浏览器对一些事件具有默认行为,例如点击链接时跳转页面,提交表单时发…

哈希表——C++

目录 一、首先使用拉链法: 二、开放寻址法 三、字符串哈希 1.具体如何使用进制的方式来存储字符前缀的可以看这个y总的这个图 2.接下来说一说算某个中间的区间的字符串哈希值 哈希表是一种数组之间互相映射的数据结构,比如举个简单的例子一个十个的数…

ArrayList常见问题

ArrayList 1、ArrayList底层的实现原理是什么 2、ArrayList list new ArrayList(10)中的list扩容几次 3、如何实现数组和list之间的转换 4、ArrayList和LinkedList的区别是什么

办公软件巨头CCED、WPS面临新考验,新款办公软件异军突起

办公软件巨头CCED、WPS的成长经历 众所周知,CCED和WPS在中国办公软件领域树立了两大知名品牌的地位。然而,它们的成功并非一朝一夕的成就,而是历经了长时间的发展与积淀。 在上世纪80年代末至90年代初,CCED作为中国大陆早期的一款…

java大学生科研创新项目在线管理系统 springboot+vue

预期成果: (1)实现一个完整的大学生科创项目在线管理系统的设计与实现,可以运行演示。 (2)预计本系统的页面完整,页面所有文字和图片无漏字、错字、重叠不显示的现象,页面所有链接和…

Unity Meta Quest MR 开发(三):Scene API 配置+实现虚拟与现实之间的碰撞

文章目录 📕教程说明📕 Scene 配置⭐开启场景理解功能和应用访问空间数据的权限⭐OVRSceneManager⭐制作 Plane Prefab 和 Volume Prefab⭐运行场景⭐添加透视材质 📕虚拟与现实物体的碰撞(弹球 Demo)📕Mes…

web前端--------渐变和过渡

线性渐变,是指颜色沿一条直线进行渐变,例如从上到下、从左到右。 当然,CSS中也支持使用角度来设置渐变的方向,角度单位为deg。 0deg,为12点钟方向,表示从下到上渐变。 90deg,为3点钟方向&…

Android13源码下载及全编译流程

目录 一、源码下载 1.1、配置要求 1.1.1、硬件配置要求 1.1.2、软件要求 1.2、下载环境搭建 1.2.1、依赖安装 1.2.2、工具安装 1.2.3、git配置 1.2.4、repo配置 1.3、源码下载 1.3.1、明确下载版本 1.3.2、替换为清华源 1.3.3、初始化仓库并指定分支 1.3.4、同步全部源码 二、…

【24美赛思路已出】2024年美赛A~F题解题思路已出 | 无偿自提

A题:资源可用性和性别比例 问题一: 涉及当灯鱼种群的性别比例发生变化时,对更大的生态系统产生的影响。为了分析这个问题,可以采用以下的数学建模思路:建立灯鱼种群模型: 首先,建立一个灯鱼种群…