Redis搭建(五):Cluster集群搭建

1、方案

1. 介绍node

  • redis3.0及以上版本实现,集群中至少应该有奇数个节点,因此至少有三个节点,官方推荐三主三从的配置方式
  • 使用哈希槽的概念,Redis 集群有16384个哈希槽,每一个key经过CRC16校验后对16384取模来决定放置哪一个槽。集群的每一个节点负责一部分hash槽。
  • 使用主从复制模型,每一个节点都会有N-1个slave。若是master不可用,会选举slave为新的master继续服务;若是同个节点的master和slave都失效,整个集群将不可用。

2. 集群的不足:redis

  • Redis集群并不支持处理多个key的操做,由于这须要在不一样的节点间移动数据,从而达不到像Redis那样的性能,在高负载的状况下可能会致使不可预料的错误。举例来讲,当两个set映射到不一样的redis实例上时,你就不能对这两个set执行交集操做。
  • 涉及多个key的redis事务不能使用。

2、集群的搭建

1. 准备配置文件
建立cluster目录,并建立6个配置文件ruby

 

2. 修改配置文件app

port 7000 //端口7000,7002,7003..
daemonize yes //redis后台运行
pidfile ./redis_7000.pid //pidfile文件对应7000,7001,7002
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有须要就开启,它会每次写操做都记录一条日志

//若设置密码,master和slave需同时配置下面两个参数:
masterauth "12345678"    //链接master的密码
requirepass "12345678"    //本身的密码

 

3. 启动、测试全部redis实例性能

  • 建立启动文件:vi start-all.sh
  • 赋予权限:chmod u+x start-all.sh
  • 启动:./start-all.sh

 

4. 安装redis-trib所需的 ruby脚本
ruby redis-trib.rb //测试是否安装成功,若已经安装过,可跳过此步测试

安装ui

cp /usr/andy/redis/redis-3.2.0/src/redis-trib.rb .
yum install ruby
yum install rubygems
gem install redis-3.2.2.gem //需下载redis-3.2.2.gem

 

5. 使用redis-trib.rb建立集群
执行下面命令建立集群(需为真实ip,否则外网没法访问):spa

./redis-trib.rb create --replicas 1 192.168.0.217:7000 192.168.0.217:7001 192.168.0.217:7002 192.168.0.217:7003 192.168.0.217:7004 192.168.0.217:7005

能够看到:.net

  • 7003是7000主节点的从节点,管理槽0-5460
  • 7004是7001主节点的从节点,管理槽5461-10992
  • 7005是7002主节点的从节点,管理槽10992-16383

3、测试

一、测试存取值3d

登陆从节点,查看

 

二、主从切换
结束主节点7000进程,发现7003成了master,而7000节点的状态为fail

 

恢复7000节点,发现变成了7003的slave

4、集群经常使用命令

1. 集群客户端命令(redis-cli -c -p port)

集群

cluster info :打印集群的信息
cluster nodes :列出集群当前已知的全部节点( node),以及这些节点的相关信息。


节点

cluster meet ip port:将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
cluster forget <node_id> :从集群中移除 node_id 指定的节点。
cluster replicate <node_id> :将当前节点设置为 node_id 指定的节点的从节点。
cluster saveconfig :将节点的配置文件保存到硬盘里面。


槽(slot)

cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。
cluster delslots <slot> [slot ...] :移除一个或多个槽对当前节点的指派。
cluster flushslots :移除指派给当前节点的全部槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot <slot> node <node_id> :将槽 slot 指派给 node_id 指定的节点,若是槽已经指派给另外一个节点,那么先让另外一个节点删除该槽>,而后再进行指派。
cluster setslot <slot> migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot <slot> importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot <slot> stable :取消对槽 slot 的导入( import)或者迁移( migrate)。


cluster keyslot <key> :计算键 key 应该被放置在哪一个槽上。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot <slot> <count> :返回 count 个 slot 槽中的键

 

2. redis-trib.rb命令详解

  • 查看redis-trib.rb的参数: ./redis-trib.rb或ruby redis-trib.rb help
  • 命令格式:./redis-trib.rb <参数> ip:port

下面是经常使用的参数:

一、create:建立集群
二、check:检查集群
三、info:查看集群信息
四、fix:修复集群
五、reshard:在线迁移slot
六、rebalance:平衡集群节点slot数量
七、add-node:将新节点加入集群
八、del-node:从集群中删除节点
九、set-timeout:设置集群节点间心跳链接的超时时间
十、call:在集群所有节点上执行命令
十一、import:将外部redis数据导入集群
相关文章
相关标签/搜索