集群维护(重分配哈希槽)、移除,添加节点护、Redis集群扩展、twemproxy实现hash分片

对集群维护调整数据的存储,就是对slot哈希槽和节点的调整。Redis内置的集群支持动态调整,可以在集群不停机的情况下,改变slot、添加或删除节点。
    ps -ef | grep redis
    ./redis-cli -p 7001 cluster nodes (查看集群信息)
#分片重哈希,可以连接任意节点,对哈希槽进行重分配
    #cd /root/redis-4.0.14/src/
    ./redis-trib.rb reshard 192.168.200.130:7001

#执行命令,提示需要移动多少个hash槽,直接输入要移动的hash槽数量即可,例如我们移动1000个
    How many slots do you want to move (from 1 to 16384)?1000

#提示接受的节点id是多少,我们使用7002接受1000个hash槽,填写对应节点的id
    #cd /usr/local/redis/bin/
    #./redis-cli -p 7001 cluster nodes | grep master    查看节点ID
    What is the receiving node ID? 415c333c2817f12c6724f4f54177ac6a9cc2c63f

#提示移出hash槽的节点id,all表示所有节点都移出插槽,也可以填写单独节点id,最后键入done
#我们测试all
    Please enter all the source node IDs
        Type 'all' to use all the nodes as source nodes for the hash slots.
        Type 'done' once you entered all the source nodes IDs.
    Source node #1:all

#最后,要我们确认是否确认这样进行重哈希,填写yes
    Do you want to proceed with the proposed reshard plan (yes/no)? yes
#检验是否重分配了哈希槽(查看集群信息)
./redis-cli -p 7001 cluster nodes
    0-5460 ——>  0-5961


移除节点(命令的第一个参数是任意节点的地址,第二个是想要移除的节点id)
#移除的主节点不能有插槽,不能有数据,需要将这个节点的数据重新分片到其他主节点上,而从节点可以直接移除
#查看节点信息(1.cd /root/redis-4.0.14/src/    2.cd /usr/local/redis/bin/):./redis-cli -p 7001 cluster nodes
#操作集群软件(cd /root/redis-4.0.14/src/):./redis-trib.rb del-node 192.168.200.130:7005 8108065786277abc42a3b68a3245c6ed2730c8a5

添加节点
#添加节点前需保证新的节点是一个干净的,空的redis,主要就是要删除持久化文件和节点配置文件:cd /usr/local/redis/cluster/node5
rm -rf appendly.aof
rm -rf dump.rdb
rm -rf nodes.conf

#添加新的主节点(新节点默认没有哈希槽,需要手动分配哈希槽)  cd /root/redis-4.0.14/src/
./redis-trib.rb add-node 192.168.200.130:7005 192.168.200.130:7001

#添加新的从节点(从节点,集群默认自动分配对应的主节点)  cd /root/redis-4.0.14/src/
./redis-trib.rb add-node --slave 192.168.200.130:7005 192.168.200.130:7001


#集群连接(cd /usr/local/redis/cluster/node5)
./redis-cli -h 192.168.200.130 -p 7001 -c

Redis集群扩展
1.Redis Cluster内置集群,Redis3.0才推出的实现方案。在3.0之前是没有内置集群的,由于历史原因,很多公司没有切换到内置集群方案,其原理就是集群方案的核心。
2.网络通讯问题:
    作为无中心节点的集群架构,依靠Gossip协议(谣言传播)协同自动化修复集群的状态。但Gossip有消息延时和消息冗余的问题,在集群节点数量过多的时候,节点间需要不断进行PING/PONG通讯,不必须要的流量占用了大量的网络资源。虽然redis4.0对此进行了优化,但这个问题仍然存在
3.数据迁移问题
    redis cluster可以进行节点的动态扩容缩容,在扩缩容的时候,就需要进行数据迁移。
    redis为了保证迁移的一致性,迁移所有操作都是同步操作,执行迁移时,两端的redis均会进入时长不等得到阻塞状态。对于小key,该时间可以忽略不计,但一旦key的内存使用过大,严重的时候会触发集群的故障转移,造成不必要的切换。

PS:以上说明只学习redis cluster并不够,还需要学习新的集群方案

twemproxy实现hash分片(自定义哈希分片)
Sharding的基本思想就是把一个数据库切分成多个部分放到不同的数据库上

twemproxy主要的角色是代理服务器的作用,是对数据库进行分片操作。twemproxy的分片保证需要存储的数据散列存放在集群的节点上,尽量做到平均分布。如何实现——一致性哈希算法


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值