本文共 2053 字,大约阅读时间需要 6 分钟。
对于上一篇已经分析来redis cluster基本的搭建和讲解
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节点:
redis-trib.rb add-node --slave --master-id 397bc7ae835720ff7ac3f2fc174bd5abdc8bb20d 192.168.1.105:7008 192.168.1.107:7001前一个redis实例地址是需要加入的,后面的redis实例是redis cluster中已经存在的
//省略上述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内核参数优化:
0: 检查有没有足够内存,没有的话申请内存失败1: 允许使用内存直到用完为止2: 内存地址空间不能超过swap + 50%如果是0的话,可能导致类似fork等操作执行失败,申请不到足够的内存空间cat /proc/sys/vm/overcommit_memoryecho "vm.overcommit_memory=1" >> /etc/sysctl.confsysctl vm.overcommit_memory=1
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
对应的每个修改在redis启动日志里面基本上都可以看到警告的提示
转载地址:http://eqrgi.baihongyu.com/