百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

搭建Redis集群(redis5.0.8集群搭建)

mhr18 2024-11-04 12:46 37 浏览 0 评论

  • 高速缓存利用内存保存数据,读写速度远超硬盘
  • 高速缓存可以减少I/O操作,降低I/O压力

比如在微信里发红包,一群人抢红包,发红包抢红包就用到了告诉缓存,如果不使用告诉缓存,发红包这条记录就要写入到数据库中,其他人去抢红包的时候发起抢红包的请求,服务器就要去读取数据库的这条红包记录,然后大家一起瓜分红包的金额,试想象下,春节期间几亿人发红包几亿人抢红包,就会对数据库压力非常大,如果真把发红包抢红包的记录写到数据库中,给用户的体验就不太好。如果使用高速缓存,发的红包保存到高速缓存中,其他人在抢红包的时候发起请求,服务器只需要到高速缓存里读写数据就可以了,不需要走数据库,减少了很多的I/O操作。

再比如打开手机淘宝APP,有些数据就是从缓存里面加载的,有些数据是从数据库中加载的,比如有些促销秒杀的热门商品,就可以将它们保存到高速缓存中,在加载的时候速度还是比较快的,另外淘宝还有基于大数据的内容推荐商品,这些商品并不是共性的商品,只是我们个人喜欢的商品,这些商品就可以从数据库中读取,所以淘宝首页的展示信息一部分是从告诉缓存中读取的,有一部分是从数据库中读取的。当然高速缓存不一定是 Redis,也可以是其他的产品。

Redis介绍

  • Redis是Vmware开发的开源免费KV型NoSQL缓存产品
  • Redis具有很好的性能,最多可以提供10万次/秒的读写
  • 目前新浪微博团队组建了世界上最大规模的Redis集群

Redis集群介绍

Redis目前的集群方案分为以下几种:

  1. RedisCluster: 官方推荐,没有中心节点

什么叫没有中心节点?

之前使用的pxc集群,pxc集群就没有中心节点,比如数据库集群里面有一部分节点挂掉了,那么剩余的节点如果超过半数,就要选出一个主节点,其他节点和这个主节点进行同步数据,注意这个主节点不是中心节点,这个主节点只是说保存的数据是最新的并且保存的数据最多,集群中剩余的节点就跟主节点同步数据,同步数据之后主节点就自动消失了,集群中就没有主节点了,所以主节点不是中心节点,这个RedisCluster类似。

  1. Codis: 中间件产品,存在中心节点

Codis是360公司推出的Redis集群方案,它是存在中心节点的,中心节点一旦挂掉之后,整个Redis集群就不能用了

  1. Twemproxy: 中间件产品,存在中心节点

也是中心节点一旦挂掉之后,整个Redis集群就不能用了

RedisCluster

  • 无中心节点,客户端与Redis集群中任何节点直连,不需要中间代理层, Redis集群中每个节点都是可读可写的
  • 数据可以被分片存储

RedisCluster存储数据是分片存储的,就是每一个节点存储的数据都是不一样的,假设现在Redis集群有三个节点A,B,C,现在我存储很多数据到集群中,A,B,C三个节点存储的数据都是不一样的,也就是要存储的数据要被切分存储到不同的Redis节点上面,如果这种情况下ABC任何一个节点挂掉,是不是就损失了一部分数据呢,对,确实是这样子的。

为了避免这种情况,就需要为ABC三个节点分别设置冗余节点,就是备份,A节点挂掉之后有冗余节点可以使用,所以不会出现A节点挂掉之后数据就没有了,冗余节点可以继续的提供A节点的服务,此时数据还在。

  • Redis集群管理方便,后续可自行增加或摘除已存在节点

RedisCluster 示意图

上图中使用了三节点Redis构成了一个Redis集群,但是为了避免某一个节点出现故障数据丢失,又为三个节点配置了冗余节点,所以算下来整个RedisCluster用到了6个节点的Redis,我们正常执行业务操作的Redis节点叫做Master节点,也叫做主节点,与Master节点进行数据同步的节点叫做Slave节点,也叫做从节点。

主从同步

  • Redis集群中的数据库复制是通过主从同步来实现的
  • 主节点(Master)把数据分发给从节点(Slave)


Redis 集群数据采用的是切分存储,也就是集群中每一个Redis节点存储的数据都不相同,一旦Redis节点挂掉,那么它存储的数据也就丢失了,为了避免这种情况就需要引入冗余节点,Master和Slave节点之间的数据是实时同步的。当Master节点挂掉之后,可以使用Slave节点继续开展业务,这就是主从同步的好处。

Redis集群高可用

  • Redis集群中应该包含奇数个Master,至少应该有3个Master

因为Redis集群和PXC集群都有选举机制,当集群中的大部分节点挂掉了,也就是说超过一半节点挂掉,剩余的节点是无法进行选举然后组成新的集群的。如果采用两个Master节点去构建一个集群,如果一个Master挂掉,那么剩余的节点数量没有出超过一半,那么Redis集群就不可用了,如果三个节点的Master,挂掉一个还剩两个,还可以进行选举,还可以组成一个新的集群。

  • Redis集群中每个Master都应该有Slave

如果客户端连接到第一个Master,并向第一个Master写入数据,数据应该切分到哪个Master节点上,如果就是存储到第一个Master节点上就进行保存,保存后就会到对应的Slave节点。如果经过计算发现数据不应该存储到当前的Master(第一个),那么这个Master就会把数据发送到对应的Master存储,然后经过复制对应的Slave也会同步数据,所以在Redis集群里面通过客户端连接任意任何Master节点都可以读写数据,不管数据应该保存到这个Master上还是其他的Master上,正常向这个Master写入数据就可以了。

配置RedisCluster集群

  • 安装Redis镜像
docker pull yyyyttttwwww/redis
docker pull redis
  • 创建net2网络
docker network create --subnet=172.19.0.0/16 net2
  • 创建Redis容器
docker run -it -d --name r1 -p 5001:6379 --net=net2 --ip 172.19.0.2 redis bash

这里并不是容器启动了,redis就启动,还要进入容器进行设置才能启动redis

  • 进入容器
docker exec -it r1 bash
  • 配置Redis节点

进入容器后需要修改Redis配置文件,修改Redis配置文件后Redis才可以启动,因为Redis默认是关闭了RedisCluster集群功能,然后启动redis才能加入到集群里

配置文件所在路径 /usr/redis/redis.conf

daemonize yes                   #以后台进程运行
cluster-enabled yes             #开启集群
cluster-config-file nodes.conf  #集群配置文件,一旦搭建起RedisCluster集群,集群里的一些节点信息保存在什么文件里面,文件名随便取,这里取的nodes.conf
cluster-node-timeout 15000      #超时时间 集群内部节点和节点连接超时时间
appendonly yes                  #开启AOF模式 Redis开启日志功能 一旦宕机可以通过AOF日志恢复Redis数据
  • 打开配置文件
vi /usr/redis/redis.conf
  • 找到上面的配置项并修改保存退出
  • 启动Redis,首先进入Redis所在目录
cd /usr/redis/src
./redis-server ../redis.conf

到这里第一个redis节点就已经启动成功

创建r2节点

docker run -it -d --name r2 -p 5002:6379 --net=net2 --ip 172.19.0.3 redis bash
#进入r2节点
docker exec -it r2 bash
#配置
vi /usr/redis/redis.conf
cd /usr/redis/src
./redis-server ../redis.conf

创建r4节点

docker run -it -d --name r4 -p 5004:6379 --net=net2 --ip 172.19.0.5 redis bash
#进入r4节点
docker exec -it r4 bash
#配置
vi /usr/redis/redis.conf
cd /usr/redis/src
./redis-server ../redis.conf

创建r5节点

docker run -it -d --name r5 -p 5005:6379 --net=net2 --ip 172.19.0.6 redis bash
#进入r5节点
docker exec -it r5 bash
#配置
vi /usr/redis/redis.conf
cd /usr/redis/src
./redis-server ../redis.conf

创建r6节点

docker run -it -d --name r6 -p 5006:6379 --net=net2 --ip 172.19.0.7 redis bash
#进入r6节点
docker exec -it r6 bash
#配置
vi /usr/redis/redis.conf
cd /usr/redis/src
./redis-server ../redis.conf

安装redis-trib.rb

cp /usr/redis/src/redis-trib.rb /usr/redis/cluster/
cd /usr/redis/cluster
apt-get install ruby
apt-get install rubygems
gem install redis

创建Redis集群

docker exec -it r1 bash
cd /usr/redis
mkdir cluster && cd cluster
cp src/redis-trib.rb ./cluster/
cd cluster
./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379

–replicas 1参数表示为每个主节点创建一个从节点

到这里redis集群已经成功创建出来了,下面通过客户端去连接集群,有6个redis节点,它们都含有redis客户端,所以可以任意访问一个redis节点,下面访问的r1节点

连接集群

  • 进入r1容器
docker exec -it r1 bash
  • 连接
/usr/redis/src/redis-cli -c

-c 表示连接redis-cluster

  • 测试
set a 10
get a

经过redis计算,这个数据存入到了 172.19.0.4 这个节点上

这个redis集群是由6个节点组成,3个Master,3个Slave,经过计算这个 172.19.0.4 应该是第三个 Master,因为当前的节点是 172.19.0.2

  • 挂掉 172.19.0.4 Master节点,由Slave节点接替Master
docker pause r3
  • 退出刚才的客户端,因为连接的r3的节点,所以需要先退出,然后再通过客户端连接redis集群
exit
/usr/redis/src/redis-cli -c

会看到这个节点 172.19.0.4 已经挂掉了,但是没有关系,这个节点之前是Master,现在还有 Slave 节点可以使用,这个 slave 节点是 172.19.0.7,之前是 Slave,现在已经升级成 Master 节点了

  • 读取数据测试
get a

成功读取。

  • 将 r3 节点恢复
docker unpause r3

重新退出然后连接redis,执行 cluster nodes

会看到 172.19.0.4 这个节点被降级到 salve 了

相关推荐

【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...

Pure Storage推出统一数据管理云平台及新闪存阵列

PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...

对Java学习的10条建议(对java课程的建议)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!

官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...

JDK21有没有什么稳定、简单又强势的特性?

佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...

「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了

在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...

Java面试题及答案最全总结(2025版)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...

数据库日常运维工作内容(数据库日常运维 工作内容)

#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...

分布式之系统底层原理(上)(底层分布式技术)

作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...

oracle 死锁了怎么办?kill 进程 直接上干货

1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

取消回复欢迎 发表评论: