Redis-Cluster 利用redis-trib.rb (自动)快速搭建集群

redis   docker   sentinel  

Redis-Cluster 利用redis-trib.rb (自动)快速搭建集群

配置文件详情: https://github.com/keepondream/docker/tree/master/redis-cluster
集群Redis镜像:https://hub.docker.com/r/keepondream/redis-cluster/

实现步骤

  1. 1.利用git 克隆所有项目需要的包 可以放入在任何目录 这里用/目录为例
  2. git clone https://github.com/keepondream/docker.git
  3. 2.进入到当前项目中的redis-cluster目录
  4. cd /docker/redis-cluster
  5. 3.启动所有节点
  6. docker-compose up -d
  7. 4.进入任意一个容器节点
  8. docker exec -it redis-slave1 bash
  9. 4.利用ruby redis-trib.rb 集群管理工具 一键管理进行握手和分配槽
  10. redis-trib.rb create --replicas 1 <你的公网IP>:6391 <你的公网IP>:6392 <你的公网IP>:6393 <你的公网IP>:6394 <你的公网IP>:6395 <你的公网IP>:6396
  11. 5.利用Redis客户端 进入任意一个节点
  12. redis-cli -h <公网IP> -p <端口>
  13. 6.查看cluster所有几点信息
  14. cluster nodes
  15. -----------------------------
  16. # 成功后的信息示例:
  17. 5c7cfb9d9225f6769437c1187eb285b3cc728a9f 172.50.0.1:6393 master - 0 1540641820856 3 connected 10923-16383
  18. 50b2ff44afebae3c20e91a2f976e419749884b74 172.50.0.1:6392 master - 0 1540641819852 2 connected 5461-10922
  19. 4f9ecfb91ec13e493ae867b5443b596ad18bd032 172.50.0.1:6395 slave 50b2ff44afebae3c20e91a2f976e419749884b74 0 1540641818849 5 connected
  20. 2831f01547c9192aee8c0a854dbadcacbf1fa9d0 172.50.0.1:6394 slave 738396cac8fc58cf8fa65db18715004dfb37f848 0 1540641821858 4 connected
  21. 738396cac8fc58cf8fa65db18715004dfb37f848 172.50.0.2:6391 myself,master - 0 0 1 connected 0-5460
  22. 34aebc326386b91ca5390bfcd07fe9588740aa3f 172.50.0.1:6396 slave 5c7cfb9d9225f6769437c1187eb285b3cc728a9f 0 1540641817848 6 connected
  23. 以上信息说明,连接成功 33 槽的分配都OK
  24. -----------------------------

Redis Cluster 相关命令

  1. # 进入Redis客户端
  2. redis-cli -h <IP地址> -p <端口>
  3. # 打印集群信息
  4. cluster info
  5. # 列出集群中当前已知的所有节点
  6. cluster nodes
  7. # 将指定IP + prot 的Redis节点添加到集群中
  8. cluster meet <ip> <port>
  9. # 将一个或者多个槽分配给 当前节点 Redis固定槽位 0~16383
  10. cluster addslots 0 1 2 # 指定单个槽分配
  11. cluster addslots {0..6666} # 指定范围 0~6666 槽分配
  12. # 移除当前节点 的一个或多个节点
  13. cluster delslots 0 1 2 3
  14. cluster delslots {0~..666}
  15. # 列出槽位和节点信息
  16. cluster slots
  17. # 列出主节点下的所有从节点信息
  18. cluster slaves <node_id 主节点唯一标识 如: 1f1dc752152f586eaedd4ab076c53afa2d216b68>
  19. # 将当前节点设置为指定节点的从节点
  20. cluster replicate <node_id 节点唯一标识>
  21. # 手动执行命令保存集群的配置文件,集群默认在配置修改的时候会自动保存配置文件
  22. cluster saveconfig
  23. # 列出 key 被放置在哪个槽上
  24. cluster keyslot <key>
  25. # 移除当前节点被指派的所有槽,让节点变成一个没有任何槽的节点,需要当前节点没有key,使用后所有数据丢失
  26. cluster flushslots
  27. # 返回槽目前包含的键值对数量
  28. cluster cluntkeysinslot <slot>
  29. # 返回count 个槽中的建
  30. cluster getkeysinslot <slot> <count>
  31. # 将槽指派给指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后在进行指派
  32. cluster setslot <slot> node <node_id>
  33. # 将本节点的迁移到指定的节点中
  34. cluster setslot <slot> migrating <node_id>
  35. # 从node_id 指定的节点中导入 槽 slot 到 本节点
  36. cluster setslot <slot> importing <node_id>
  37. # 取消对槽 slot 的导入(import) 或者迁移 (migrate)
  38. cluster <slot> stable
  39. # 手动进行故障转移
  40. cluster failover
  41. # 从集群中移除指定的节点,这样就无法完成握手,过期时间为 60s, 60后两个节点会继续完成握手
  42. cluster forget <node_id>
  43. # 重置集群信息,soft 清空其他节点信息,但是不修改自己的ID,hard会修改自己的ID,不传该参数默认使用soft方式
  44. cluster reset [HARD|SOFT]
  45. # 列出某个几点的故障报告的长度
  46. cluster count-failure-reports <node_id>
  47. # 设置节点 epoch, 只有在节点加入集群前才能设置

redis-trib.rb 相关命令

  1. # 在启动好6个节点后,该命令进行自动节点握手和槽分配
  2. redis-trib.rb create -replicas 1 127.0.0.1:6391 127.0.0.1:6392 127.0.0.1:6393 127.0.0.1:6394 127.0.0.1:6395 127.0.0.1:6396
  3. -replicas # 指定集群中每个主节点配备几个从节点,这里设置为1,redis-trib.rb 会自动为分配每个主节点一个从节点,并生成报告
  4. # 检查集群
  5. check host:port
  6. # 查看集群信息
  7. info host:port
  8. # 修复集群
  9. fix host:port
  10. # 在线迁移 slot
  11. redis-trib.rb reshard host:port --from <arg> --to <arg> --slots <arg> --yes --timeout <arg> --pipeline <arg>
  12. hostport # 必传参数,集群内任意节点地址,用来获取整个集群信息,相当于获取集群信息的入口
  13. --from <arg> # 需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node_id,还可以直接传递 --from all,这样源节点就是集群的所有节点,不传递参数则会在迁移过程中提示用户输入
  14. --to <arg> # slot需要迁移的目的节点的node_id,目的节点只能填写一个,不传递参数则会在迁移过程中提示用户输入
  15. --slots # 需要迁移槽的总数量,在迁移过程中提示用户输入。
  16. --yes # 设置该参数,可以在打印执行 reshard计划的时候,提示用户输入yes确认后再执行reshard
  17. --timeout <arg> # 设置migrate命令的超时时间。
  18. --pipeline <arg> # 定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10
  19. # 平衡集群节点slot数量
  20. rebalance host:port
  21. --weight <arg>
  22. --auto-weights
  23. --use-empty-masters
  24. --timeout <arg> # 控制每次 migrate 操作的超时时间,默认为60000毫秒。
  25. --simulate 不会真正迁移,测试用的
  26. --pipeline <arg> 一次迁移多少分数据
  27. --threshold <arg>
  28. # 将新节点加入集群
  29. add-node new_host:new_port existing_host:existing_port
  30. --slave
  31. --master-id <arg>
  32. # 从集群中删除节点
  33. del-node host:port node_id
  34. #设置集群节点间心跳连接的超时时间
  35. set-timeout host:port milliseconds
  36. #在集群全部节点上执行命令
  37. call host:port command arg arg .. arg
  38. #将外部redis数据导入集群
  39. import host:port
  40. --from <arg>
  41. --copy
  42. --replace


评论 0

发表评论

Top