redis集群

本文详细介绍了Redis集群的功能,包括数据分布式存储、高可用性保障、分表机制等,并深入探讨了Redis集群与Docker的兼容性问题及解决方案。此外,还提供了启动、维护Redis集群的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  使用redis集群可以干什么?

1.可以将数据分布式地存储在多个redis节点。

2.部分节点不可用时,仍然可以保证节点的可用性。

 

  redis集群中节点对tcp端口的要求:

1.client与节点之间通信的接口,称为p1

2.节点之间通信的接口,称为p2。p2=p1+10000

 

  redis集群与docker的兼容性:

redis集群不支持端口remapped,为了使docker与redis兼容,需要将docker在host networking mode下工作(--net=host)。

 

  redis集群的分表

redis集群的分表没有使用一致性hash,而是将数据分布在16384个slot中,平均分布在集群中的多个节点。

好处:

  1.增加节点和删除节点只需要将slot在节点间移动即可,移动slot时,无需down机。

redis支持同一个命令的执行中,对属于同一个slot的多个key进行操作,从而保证事务性。

使用hash tag可以保证多个key同属于一个slot

hash tag案例,大括号内的内容相同,两个key在同一个slot中:

1. keyA{foo}

2. keyB{foo}

  redis集群的的主从模式

我们可以为redis的每个node设置slave,某个节点的master挂了,slave可用,则集群仍然可用。若某个节点的主从全部挂掉,那么系统不可用。

 

  redis无法保证数据的强一致性,因为redis采用了异步复制。

异步复制:redis client向master写入数据,master返回ok,然后将数据复制到slave。

若复制完成前,master挂掉,那么数据有可能丢失。

性能与强一致性不可兼得。redis为了性能,牺牲了强一致性。

即使redis node采用同步复制,也有可能导致数据丢失。

丢失案例:

redis集群包括node A,B,C,分别为maser

a,b,c为slave,client z向A写入数据,A还没有把数据复制到slave a。此时发生了网络隔离,a被选举为新的master,那么就会发生数据丢失。

 

启动一个redis集群:

方案1:创建n个文件夹,7000~700n 每个文件夹中新建一个配置文件:

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

 cd  700n

path/to/redis-server ./redis.conf

启动了n个实例后,

./redis-trib.rb create --replicas 1 host:port host1:port1 ... hostn:portn

如果首次运行,需要gem install redis

方案二:

用脚本启动:

create-cluster start 

create-cluster create

停止命令:

create-cluster stop

  

  redis重新分表:

./redis-trib.rb reshard --from <node-id> --to <node-id> --slots <number of slots> --yes <host>:<port>

  

  添加新节点: 

  

  添加空白节点: 

./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000

  添加空白节点后,可以通过重新分表,将一部分slot转移过去。

 

./redis-trib.rb add-node --slave 127.0.0.1:7006 127.0.0.1:7000

  将7006添加为某个slave最少的master的slave

 

./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000

  也可以将7006添加为某个master的slave

 

   删除node-id的节点,如果该节点是master,前提是改master必须是空的。

./redis-trib del-node 127.0.0.1:7000 `<node-id>`

  

  备份迁移:

登陆某个实例后,可以通过 cluster replicate master-node-id,将当前redis实例转移为指定master的slave

也可以通过配置文件,使得备份迁移自动完成,当某个master的备份挂掉后,可以通过自动将slave最多的master的slave转移给改节点

  

  更新节点:

更新slave,可以直接stop,更新后启动。

更新master,可以通过slave,使master failover,然后该master变为slave,然后完成更新。

 

  向cluster迁移

生成appendonly文件,然后启动cluster,使用生成的aof文件替换掉cluster的文件。

若原有redis有多key操作,而且key对应的值不在同一个节点上,那么不支持直接迁移。

 

  

 

  

 

  

 

 

 

 

 

 

 

 

 

 

 

    

 

转载于:https://www.cnblogs.com/swaggyC/p/6262537.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值