发布网友 发布时间:2022-04-24 00:09
共1个回答
热心网友 时间:2022-04-14 07:19
1.RedisCluster总览1.1设计原则和初衷在官方文档ClusterSpec中,作者详细介绍了Redis集群为什么要设计成现在的样子。最核心的目标有三个:性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P而非Proxy方式、异步复制、客户端重定向等设计,而牺牲了部分的一致性、使用性。水平扩展:集群的最重要能力当然是扩展,文档中称可以线性扩展到1000结点。可用性:在Cluster推出之前,可用性要靠Sentinel保证。有了集群之后也自动具有了Sentinel的监控和自动Failover能力。1.2架构变化与CAP理论RedisCluster集群功能推出已经有一段时间了。在单机版的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在架构上的变化后,咱们就一起来体验一下RedisCluster功能吧!2.Redis集群初探Redis的安装很简单,以前已经介绍过,就不详细说了。关于RedisCluster的基础知识之前也有过整理,请参考《Redis集群功能预览》。如果需要全面的了解,那一定要看官方文档ClusterTutorial,只看这一个就够了!2.1集群配置要想开启RedisCluster模式,有几项配置是必须的。此外为了方便使用和后续的测试,我还额外做了一些配置:绑定地址:bind192.168.XXX.XXX。不能绑定到127.0.0.1或localhost,否则指导客户端重定向时会报”Connectionrefused”的错误。开启Cluster:cluster-enabledyes集群配置文件:cluster-config-filenodes-7000.conf。这个配置文件不是要我们去配的,而是Redis运行时保存配置的文件,所以我们也不可以修改这个文件。集群超时时间:cluster-node-timeout15000。结点超时多久则认为它宕机了。槽是否全覆盖:cluster-require-full-coverageno。默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no后台运行:daemonizeyes输出日志:logfile“./redis.log”监听端口:port7000配置好后,根据我们的集群规模,拷贝出来几份同样的配置文件,唯一不同的就是监听端口,可以依次改为7001、7002…因为RedisCluster如果数据冗余是1的话,至少要3个Master和3个Slave,所以我们拷贝出6个实例的配置文件。为了避免相互影响,为6个实例的配置文件建立独立的文件夹。[root@8gVmredis-3.0.4]#pwd/root/Software/redis-3.0.4[root@8gVmredis-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.70056directories,6files2.2redis-trib管理器Redis作者应该是个Ruby爱好者,Ruby客户端就是他开发的。这次集群的管理功能没有嵌入到Redis代码中,于是作者又顺手写了个叫做redis-trib的管理脚本。redis-trib依赖Ruby和RubyGems,以及redis扩展。可以先用which命令查看是否已安装ruby和rubygems,用gemlist–local查看本地是否已安装redis扩展。最简便的方法就是用apt或yum包管理器安装RubyGems后执行geminstallredis。如果网络或环境受限的话,可以手动安装RubyGems和redis扩展(国外链接可能无法下载,可以从CSDN下载):[root@8gVmSoftware]#wget/rubygems/rubygems/releases/download/v2.2.3/rubygems-2.2.3.tgz[root@8gVmSoftware]#tarxzvfrubygems-2.2.3.tgz[root@8gVmSoftware]#cdrubygems-2.2.3[root@8gVmrubygems-2.2.3]#rubysetup.rb--no-rdoc--no-ri[root@8gVmSoftware]#wgetcreate-cluster下提供了一个create-cluster脚本,能够创建出一个集群,类似我们上面建立起的3主3从的集群。