HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    redis集群是什么(redis集群有啥用)

    发布时间:2023-04-03 16:13:31     稿源: 创意岭    阅读: 113        当前文章关键词排名出租

    大家好!今天让创意岭的小编来大家介绍下关于redis集群是什么的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    redis集群是什么(redis集群有啥用)

    一、redis主从、哨兵、集群的区别

    通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。

    哨兵的作用是监控主从,主从切换的。可以是一主多从,不过数据都是冗余存储的,每个主从节点存储的数据都是一样的。

    是将数据分片存储,每个节点存储一部分数据,从而达到分布式集群的目的。

    二、redis-cluster和redis是一个东西么

    1.Redis Cluster总览

    1.1 设计原则和初衷

    在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子。最核心的目标有三个:

    性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P而非Proxy方式、异步复制、客户端重定向等设计,而牺牲了部分的一致性、使用性。

    水平扩展:集群的最重要能力当然是扩展,文档中称可以线性扩展到1000结点。

    可用性:在Cluster推出之前,可用性要靠Sentinel保证。有了集群之后也自动具有了Sentinel的监控和自动Failover能力。

    1.2 架构变化与CAP理论

    Redis Cluster集群功能推出已经有一段时间了。在单机版的Redis中,每个Master之间是没有任何通信的,所以我们一般在Jedis客户端或者Codis这样的代理中做Pre-sharding。按照CAP理论来说,单机版的Redis属于保证CP(Consistency & Partition-Tolerancy)而牺牲A(Availability),也就说Redis能够保证所有用户看到相同的数据(一致性,因为Redis不自动冗余数据)和网络通信出问题时,暂时隔离开的子系统能继续运行(分区容忍性,因为Master之间没有直接关系,不需要通信),但是不保证某些结点故障时,所有请求都能被响应(可用性,某个Master结点挂了的话,那么它上面分片的数据就无法访问了)。

    有了Cluster功能后,Redis从一个单纯的NoSQL内存数据库变成了分布式NoSQL数据库,CAP模型也从CP变成了AP。也就是说,通过自动分片和冗余数据,Redis具有了真正的分布式能力,某个结点挂了的话,因为数据在其他结点上有备份,所以其他结点顶上来就可以继续提供服务,保证了Availability。然而,也正因为这一点,Redis无法保证曾经的强一致性了。这也是CAP理论要求的,三者只能取其二。

    关于CAP理论的通俗讲解,请参考我的译文《可能是CAP理论的最好解释 》。简单分析了Redis在架构上的变化后,咱们就一起来体验一下Redis Cluster功能吧!

    2.Redis集群初探

    Redis的安装很简单,以前已经介绍过,就不详细说了。关于Redis Cluster的基础知识之前也有过整理,请参考《Redis集群功能预览》。如果需要全面的了解,那一定要看官方文档Cluster Tutorial,只看这一个就够了!

    2.1 集群配置

    要想开启Redis Cluster模式,有几项配置是必须的。此外为了方便使用和后续的测试,我还额外做了一些配置:

    绑定地址:bind 192.168.XXX.XXX。不能绑定到127.0.0.1或localhost,否则指导客户端重定向时会报”Connection refused”的错误。

    开启Cluster:cluster-enabled yes

    集群配置文件:cluster-config-file nodes-7000.conf。这个配置文件不是要我们去配的,而是Redis运行时保存配置的文件,所以我们也不可以修改这个文件。

    集群超时时间:cluster-node-timeout 15000。结点超时多久则认为它宕机了。

    槽是否全覆盖:cluster-require-full-coverage no。默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no

    后台运行:daemonize yes

    输出日志:logfile “./redis.log”

    监听端口:port 7000

    配置好后,根据我们的集群规模,拷贝出来几份同样的配置文件,唯一不同的就是监听端口,可以依次改为7001、7002… 因为Redis Cluster如果数据冗余是1的话,至少要3个Master和3个Slave,所以我们拷贝出6个实例的配置文件。为了避免相互影响,为6个实例的配置文件建立独立的文件夹。

    [root@8gVm redis-3.0.4]# pwd

    /root/Software/redis-3.0.4

    [root@8gVm redis-3.0.4]# tree -I "*log|nodes*" cfg-cluster/

    cfg-cluster/

    ├── 7000

    │ └── redis.conf.7000

    ├── 7001

    │ └── redis.conf.7001

    ├── 7002

    │ └── redis.conf.7002

    ├── 7003

    │ └── redis.conf.7003

    ├── 7004

    │ └── redis.conf.7004

    └── 7005

    └── redis.conf.7005

    6 directories, 6 files

    2.2 redis-trib管理器

    Redis作者应该是个Ruby爱好者,Ruby客户端就是他开发的。这次集群的管理功能没有嵌入到Redis代码中,于是作者又顺手写了个叫做redis-trib的管理脚本。redis-trib依赖Ruby和RubyGems,以及redis扩展。可以先用which命令查看是否已安装ruby和rubygems,用gem list –local查看本地是否已安装redis扩展。

    最简便的方法就是用apt或yum包管理器安装RubyGems后执行gem install redis。如果网络或环境受限的话,可以手动安装RubyGems和redis扩展(国外链接可能无法下载,可以从CSDN下载):

    [root@8gVm Software]# wget https://github.com/rubygems/rubygems/releases/download/v2.2.3/rubygems-2.2.3.tgz

    [root@8gVm Software]# tar xzvf rubygems-2.2.3.tgz

    [root@8gVm Software]# cd rubygems-2.2.3

    [root@8gVm rubygems-2.2.3]# ruby setup.rb --no-rdoc --no-ri

    [root@8gVm Software]# wget https://rubygems.org/downloads/redis-3.2.1.gem

    [root@8gVm Software]# gem install redis-3.2.1.gem --local --no-rdoc --no-ri

    Successfully installed redis-3.2.1

    1 gem installed

    2.3 集群建立

    首先,启动我们配置好的6个Redis实例。

    [root@8gVm redis-3.0.4]# for ((i=0; i<6; ++i))

    > do

    > cd cfg-cluster/700$i && ../../src/redis-server redis.conf.700$i && cd -

    > done

    此时6个实例还没有形成集群,现在用redis-trb.rb管理脚本建立起集群。可以看到,redis-trib默认用前3个实例作为Master,后3个作为Slave。因为Redis基于Master-Slave做数据备份,而非像Cassandra或Hazelcast一样不区分结点角色,自动复制并分配Slot的位置到各个结点。

    [root@8gVm redis-3.0.4]# src/redis-trib.rb create --replicas 1 192.168.1.100:7000 192.168.1.100:7001 192.168.1.100:7002 192.168.1.100:7003 192.168.1.100:7004 192.168.1.100:7005

    >>> Creating cluster

    Connecting to node 192.168.1.100:7000: OK

    Connecting to node 192.168.1.100:7001: OK

    Connecting to node 192.168.1.100:7002: OK

    Connecting to node 192.168.1.100:7003: OK

    Connecting to node 192.168.1.100:7004: OK

    Connecting to node 192.168.1.100:7005: OK

    >>> Performing hash slots allocation on 6 nodes...

    Using 3 masters:

    192.168.1.100:7000

    192.168.1.100:7001

    192.168.1.100:7002

    Adding replica 192.168.1.100:7003 to 192.168.1.100:7000

    Adding replica 192.168.1.100:7004 to 192.168.1.100:7001

    Adding replica 192.168.1.100:7005 to 192.168.1.100:7002

    ...

    Can I set the above configuration? (type 'yes' to accept): yes

    >>> Nodes configuration updated

    >>> Assign a different config epoch to each node

    >>> Sending CLUSTER MEET messages to join the cluster

    Waiting for the cluster to join....

    >>> Performing Cluster Check (using node 192.168.1.100:7000)

    ...

    [OK] All nodes agree about slots configuration.

    >>> Check for open slots...

    >>> Check slots coverage...

    [OK] All 16384 slots covered.

    至此,集群就已经建立成功了!“贴心”的Redis还在utils/create-cluster下提供了一个create-cluster脚本,能够创建出一个集群,类似我们上面建立起的3主3从的集群。

    三、如何安装Redis集群

    创建目录,copy配置文件

    如何安装Redis集群

    修改配置文件

    按照此方式修改7001~7005的配置文件,注意修改端口号。

    如何安装Redis集群

    启动各个实例

    如何安装Redis集群

    创建集群

    现在我们已经有了六个正在运行中的 Redis 实例, 接下来我们需要使用这些实例来创建集群, 并为每个节点编写配置文件。

    通过使用 Redis 集群命令行工具redis-trib,编写节点配置文件的工作可以非常容易地完成redis-trib位于Redis 源码的src文件夹中,它是一个 Ruby 程序,这个程序通过向实例发送特殊命令来完成创建新集群,检查集群,或者对集群进行重新分片(reshared)等工作。

    我们需要执行以下命令来创建集群:

    [root@localhost src]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

    /usr/bin/env: ruby: No such file or directory

    如何安装Redis集群

    系统中没有安装ruby,所以报上面的错误。

    先安装ruby

    [root@localhost yum.repos.d]# yum install ruby

    [root@localhost yum.repos.d]# yum install rubygems

    [root@localhost yum.repos.d]# gem install redis

    Successfully installed redis-3.2.2

    1 gem installed

    Installing ri documentation for redis-3.2.2...

    Installing RDoc documentation for redis-3.2.2...

    如何安装Redis集群

    再次创建集群

    [root@localhost src]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

    Redis自动选择主从

    如何安装Redis集群

    连接集群

    redis-cli 也可以作为集群的客户端工具,要想访问集群,只需连接任意一个redis实例即可。使用-c参数

    [root@localhost bin]# ./redis-cli -c -p 7000

    总结

    set 命令写数据,集群将数据写到7001实例上,当你使用get命令获取数据时,客户端即自动切换到7001端口。

    redis-cli对集群的支持是非常基本的, 所以它总是依靠 Redis 集群节点来将它转向(redirect)至正确的节点。一个真正的(serious)集群客户端应该做得比这更好: 它应该用缓存记录起哈希槽与节点地址之间的映射(map), 从而直接将命令发送到正确的节点上面。

    四、

    以上就是关于redis集群是什么相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    录屏大师视频不在rec

    reality中文谐音歌词(reality中文谐音首歌)

    智能机器人ChatGPT官网(howαreyou智能机器人)

    庭院景观设计经典案例(庭院景观设计经典案例分享)

    零基础英语app排行榜(零基础英语app排行榜免费)