当前位置: 首页 > Linux

Redis集群搭建

时间:2023-04-06 11:10:53 Linux

Redis集群实现查看搭建redis,redis分片,linux中redissentry直接从后端数据库读取。Redis是一个很好的缓存工具。对于大型网站应用,热点数据量往往是巨大的,几十G到几百G很正常。由于内存大小的限制,使用一个Redis实例显然无法满足需求。这种情况下,就需要使用多个Redis作为缓存数据库。但是如何保证数据存储的一致性呢?这时候就需要搭建一个redis集群。采用合理的机制保证用户的正常访问需求。使用redis集群可以保证数据的分散存储和数据存储的一致性。并在内部实现了高可用机制。实现服务故障的自动迁移。1.1.2集群搭建方案主从划分:3主机3从,共6个端口划分7000-70051.2集群搭建1.2.1准备集群文件夹1.准备集群文件夹cd/usr/local/src/redismkdir集群2。在cluster文件夹下分别创建7000-7005文件夹cdclustersmkdir7000700170027003700470051.2.2复制配置文件说明:复制redis根目录将redis.conf文件复制到cluster/7000/下,原名保存。cd/usr/local/src/rediscpredis.confcluster/7000/1.2.3编辑配置文件1.记下本地绑定IP地址2.关闭保护模式3.修改端口号4.启动后台启动5.修改pid文件6.修改持久化文件路径7.设置内存优化策略8.关闭AOF模式9.打开集群配置10.打开集群配置文件11.修改集群超时时间1.2.4复制修改后的配置文件说明:将7000文件夹下的redis.conf文件复制到7001-7005分别cp7000/redis.conf7001/cp7000/redis.conf7002/cp7000/redis.conf7003/cp7000/redis.conf7004/cp7000/redis.conf7005/1.2.5批量修改说明:将7001-7005文件中的7000改为对应端口号的名称,修改vim7000/redis.conf时注意方向键的使用:%s/7000/7001/g表示将7000替换为7001g:表示全部替换Createstartupscriptvimstart.sh#!/bin/shredis-server7000/redis.conf&redis-server7001/redis.conf&redis-server7002/redis.conf&redis-server7003/redis.conf&redis-server7004/redis.conf&redis-server7005/redis.conf&2。编辑关闭的脚本vimshutdown.sh#!/bin/shredis-cli-p7000shutdown&redis-cli-p7001shutdown&redis-cli-p7002shutdown&redis-cli-p7003shutdown&redis-cli-p7004shutdown&redis-cli-p7005关机&3。启动redis节点shstart.sh4.检查redis节点是否正常启动1.2.7创建redis集群注意:这里的1表示每台host后面只有一个slave在任意目录下执行以下命令:#5.0版本使用C执行languageinternalmanagementclusterredis-cli--clustercreate--cluster-replicas1192.168.126.129:7000192.168.126.129:7001192.168.126.129:7002192.168.126.129:7003192.168.126.129:7004192.168.126.129:7005关于Redis集群失败说明如果redis集群搭搭失败,请按照以下步骤完成配置,前提条件:集群节点必须为null1)。关闭所有redis节点2).删除多余的配置文件dump.rdb/nodes.conf3).查看redis.conf配置文件参考文档...4)。重启redis节点5).执行构建命令1.2.8Redis集群高可用测试1.关闭redis主机。检查故障迁移是否自动实现。2、重新启动关闭的主机。检查是否可以实现自动挂载。一般情况下,可以实现主从挂载个别情况:宕机节点重启后可能挂载到其他master节点(7001-7002)正确操作API:#configureredisclusterredis.nodes=192.168.126.129:7000,192.168.126.129:7001,192.168.126.129:7002,192.168。126.129:7003,192.168.126.129:7004,192.168.126.129:7005//从配置文件中获取redis节点信息@Value("${redis.nodes}")privateStringnodes;//节点,节点,节点.....@BeanpublicJedisClusterjedisCluster(){SetnodeSet=newHashSet<>();String[]nodeArray=nodes.split(",");for(Stringnode:nodeArray){Stringhost=node.split(":")[0];intport=Integer.parseInt(node.split(":")[1]);HostAndPorthostAndPort=newHostAndPort(主机,端口);nodeSet.add(主机和端口);}返回新的JedisCluster(nodeSet);}如何访问集群中的数据1.3.3Redishashslot存储数据原理hashslotalgorithm分区算法说明:RedisCluster采用这种分区,所有的key根据hash函数(CRC16[key]%16384)映射到slots0-16383,共16384个slot,每个节点维护部分slots和映射到slots的key-value数据。根据主节点的数量,将区间平分。算法:哈希函数:Hash()=CRC16[key]%16384向redis集群插入数据时,key在前计算。然后将计算结果匹配到特定slot的区间,再将数据设置给管理slot的节点。面试题1).既然redis集群有16384个slot,那么只能存储16384个key吗?错误结论:分区只是碎片化,谁来管理数据。可以存储多少取决于内存的大小。哈希(密钥1)%16384=2000哈希(密钥2)%16384=20002)。通过redis-cli-p7000-7005Link任意节点都可以进行set操作报错从库无法写入3).通过redis-cli-p7000-7005链接任何主机都可以执行set操作错误数据存储严格按照分区算法完成。4).redis集群最多支持多少台主机?163845).搭建好redis集群后,如果关闭所有redis节点,再次重启,是否需要重新搭建集群?错误集群的状态已经写入nodes.conf文件。所以重启之后,集群就恢复了。知识点:Redis集群崩溃的条件是主机丢失,集群崩溃6).如果有1个master和1个slave,一共3组组成一个redis集群。问题:至少有几个redis节点宕机了。集群崩溃??2...7).如果有1个master和2个slave,一共3组组成一个redis集群。问题:至少有几个redis节点宕机了。集群崩溃??5台机器8).如果有1个master和1个slave,一共3组组成一个redis集群。问题:最多有多少个redis节点宕机。集群崩溃??4...Redis集群原理Redis集群高可用选择原理Redis的所有节点都会保存当前redis集群中的所有主从状态信息。并且每个节点都可以相互通信。当一个节点宕机时,集群中的其他节点通过PING-PONG检测机制检查Redis节点是否宕机。当超过半数节点认为宕机时,认为主节点宕机。同时,Redis剩余的主节点进入选举机制。投票给宕机主节点的slaves。实现故障迁移。Redis集群宕机条件特点:如果集群中主机宕机,slave可以继续提供服务。当它是slave时,它从其他主机借用冗余的slave,继续提供服务。如果主机宕机时没有可用的slave,集群就会崩溃。答:9个redis节点,节点宕机5-7次集群就会崩溃。关于Redis面试题(二)1.缓存穿透是什么概念:在高并发环境下,用户访问的数据不长时间不存在于数据库中,称为缓存穿透。原则:solution:单位时间内的IP请求数,用于IP限流。布隆过滤器(解决缓存穿透)布隆过滤器介绍上面是一个长二值向量和一系列随机映射函数。布隆过滤器可用于检索元素是否在集合中。它的优点是空间效率和查询时间都比一般算法好很多,缺点是存在一定的误识别率和删除难度。布隆过滤器算法可以记住这一点:如果布隆过滤器认为数据存在,那么数据可能存在。如果布隆过滤器认为数据不存在,那么数据一定不存在。算法优化说明:由于hash碰撞带来的问题,需要对算法进行优化,降低hash碰撞的概率。解决方案:增加二进制向量中的位数。8/16/32/1024...增加散列函数的数量。总结:适当增加二进制向量的位数和哈希函数的个数,可以有效降低哈希冲突的概率。Guava包谷歌大神手写布隆过滤器算法...布隆过滤器工作结构1.2什么是缓存击穿简介:由于一个热点数据在缓存中无效,导致大量用户直接访问数据库,导致数据库宕机.俗话说:趁他有病杀他命中率低。它直接导致用户访问数据库。处理方法:1.使用多级缓存2.不要设置相同的超时时间。10+随机数