博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis cluster节点的添加与删除(2)
阅读量:4290 次
发布时间:2019-05-27

本文共 2053 字,大约阅读时间需要 6 分钟。

对于上一篇已经分析来redis cluster基本的搭建和讲解

  • 添加新的master
redis-trib.rb add-node 192.168.1.107:7007 192.168.1.107:7001将一个新的配置好的7007实例添加到redis cluster中成为一个新的节点redis-trib.rb check 192.168.1.107:7007可以监测是否已经成功加入,发现新加入的master没有分配slots,毫无疑问是无法处理数据路由的,此时我们需要reshard来重新balance hash slots,执行如下命令:redis-trib.rb reshard 192.168.1.107:7001  (redis cluster中的任意一个)How many slots do you want to move (from 1 to 16384)? 4096  (需要输入slots的数量,用总共16384除以master节点数即可,16384/4=4096)What is the receiving node ID? 0453f3cdd6ad45b52941c9635e834b20b7ce50c8  (之前check命令会在每个node前面有一个ID,这里需要输入新加入的为0的要接受slots的节点)最后一步输入  all是对所有节点, 或者输入部分节点然后输入 done 来完成reshard操作
  • 添加新的slave

执行以下命令来添加一个slave节点:

redis-trib.rb add-node --slave --master-id 397bc7ae835720ff7ac3f2fc174bd5abdc8bb20d 192.168.1.105:7008 192.168.1.107:7001前一个redis实例地址是需要加入的,后面的redis实例是redis cluster中已经存在的
  • 删除node
    需要先通过resharding将节点所保存的数据转移到其他节点,确保该node数据为空后,才能够执行remove操作
//省略上述reshard操作,同上redis-trib.rb del-node 192.168.1.107:7007 0453f3cdd6ad45b52941c9635e834b20b7ce50c8

当remove掉slot为0的master后,对应的slave将会自动挂到其他master节点上。具体的redis-trib.rb的操作可以查看帮助命令

redis-trib.rb help

为了保障redis cluster的高可用性,我们可以添加一些冗余的slave,当有其他master的slave宕机,那些冗余的slave会自动迁移

优化思路以及linux内核参数优化:

  • fork耗时跟redis主进程的内存有关系,一般控制redis的内存在10GB以内
  • 优化硬盘写入速度,建议采用SSD,不要用普通的机械硬盘,SSD,大幅度提升磁盘读写的速度
  • 在info replication中,可以看到master和slave复制的offset,做一个差值就可以看到对应的延迟量,如果延迟过多,那么就进行报警
  • 如果一个master要挂载多个slave,考虑到全量复制占用带宽资源过多,尽量用树状结构,不要用星型结构
  • linux系统参数vm.overcommit_memory
0: 检查有没有足够内存,没有的话申请内存失败1: 允许使用内存直到用完为止2: 内存地址空间不能超过swap + 50%如果是0的话,可能导致类似fork等操作执行失败,申请不到足够的内存空间cat /proc/sys/vm/overcommit_memoryecho "vm.overcommit_memory=1" >> /etc/sysctl.confsysctl vm.overcommit_memory=1
  • linux系统参数swapiness
cat /proc/version,查看linux内核版本如果linux内核版本<3.5,那么swapiness设置为0,这样系统宁愿swap也不会oom killer(杀掉进程)如果linux内核版本>=3.5,那么swapiness设置为1,这样系统宁愿swap也不会oom killer保证redis不会被杀掉echo 0 > /proc/sys/vm/swappinessecho vm.swapiness=0 >> /etc/sysctl.conf
  • 最大打开文件句柄
    ulimit -n 10032 10032,不同的操作系统,版本,设置的方式都不太一样
  • tcp backlog
    cat /proc/sys/net/core/somaxconn
    echo 511 > /proc/sys/net/core/somaxconn

对应的每个修改在redis启动日志里面基本上都可以看到警告的提示

转载地址:http://eqrgi.baihongyu.com/

你可能感兴趣的文章
一直搞不清楚什么是读写分离,主从复制的原理,今天总算搞懂了
查看>>
消息队列 mq 必会面试题
查看>>
线程池的工作原理是啥?能手写一个线程池吗?
查看>>
Java程序内存的简单分析
查看>>
Javascript单例模式概念与实例
查看>>
SQL NULL 函数
查看>>
多例设计模式
查看>>
WebView的JavaScript与本地代码三种交互方式
查看>>
WebView的JavaScript与本地代码三种交互方式
查看>>
Android Studio里面配置Tesseract
查看>>
深入浅出JavaScript之this
查看>>
Android include标签的使用注意事项
查看>>
final成员变量和final局部变量
查看>>
Android数据加密之异或加密算法
查看>>
greenDao好的示例网址
查看>>
Android自定义控件--仿安全卫士中的一键加速
查看>>
Android Tools Attributes,让布局设计所见即所得
查看>>
Android内存泄露的原因
查看>>
Java并发总结
查看>>
JavaScript筑基篇(二)->JavaScript数据类型
查看>>