Redis——Redis 集群cluster

£神魔★判官ぃ 2023-01-13 14:59 301阅读 0赞

Redis 集群cluster

  • 集群简介
    • 集群作用
  • Redis集群结构设计
    • 数据存储设计
    • 集群内部通讯设计
  • cluster集群结构搭建
    • 主从下线和主从切换

集群简介

  • 集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果

集群作用

  • 分散单台服务器的访问压力,实现负载均衡
  • 分散单台服务器的存储压力,实现可扩展性
  • 降低单台服务器宕机带来的业务灾难

Redis集群结构设计

数据存储设计

  • 通过算法设计,计算出key应该保存的位置
  • 将所有的存储空间计划切割成16384份,每台主机保存一部分每份代表的是一个存储空间,不是一个key的保存空间
  • 将key按照计算出的结果放到对应的存储空间
  1. key通过hash算法计算出一个值,然后拿这个值%16384
  2. 得到一个数(假如是37)为key的保存位置,然后再存入相应的存储空间位置
    在这里插入图片描述
  3. 假如又增加了一个节点,之前每个节点都会拿出部分槽给新的节点
    在这里插入图片描述
  4. 如果是去除节点,则把被去除节点的槽加入到存在的节点当作

集群内部通讯设计

  • 各个数据库互相通信,保存各个库中槽的编号数据
  1. 客户端发出一个key访问A,通过算法计算出key的存储位置
  2. 如果一次命中,直接返回
  3. 一次未命中,告知具体位置
  4. 一次命中或者两次命中提高数据访问效率
    在这里插入图片描述

cluster集群结构搭建

  • 原生安装(单条命令)

    • 配置服务器(3主3从)
    • 建立通信(Meet)
    • 分槽(Slot)
    • 搭建主从(master-slave)
  • 工具安装(批处理)

Cluster配置

  • 添加节点

    cluster-enabled yes|no

  • cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容

    cluster-config-file

  • 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点

    cluster-node-timeout

  • master连接的slave最小数量

    cluster-migration-barrier

Cluster节点操作命令

  • 查看集群节点信息

    1. cluster nodes
  • 进入一个从节点 redis,切换其主节点

    1. cluster replicate <master-id>
  • 发现一个新节点,新增主节点

    1. cluster meet ip:port
  • 忽略一个没有solt的节点

    1. cluster forget <id>
  • 手动故障转移

    1. cluster failover

    首先清空之前的数据
    [root@maomao ~]# cd /usr/local/redis/data/
    [root@maomao data]# ls
    appendonly-6379.aof dump-6379.rdb dump.rdb
    [root@maomao data]# rm -rf *

    配置文件添加
    cluster-enabled yes # 开启cluster
    cluster-config-file nodes-6379.conf # 配置文件和名字
    cluster-node-timeout 10000 # cluster下线时间,超时时间为10秒

  1. 复制六个配置文件
  2. sed 's/6379/6380/g' redis-6379.conf > redis-6380.conf
  3. sed 's/6379/6381/g' redis-6379.conf > redis-6381.conf
  4. sed 's/6379/6382/g' redis-6379.conf > redis-6382.conf
  5. sed 's/6379/6383/g' redis-6379.conf > redis-6383.conf
  6. sed 's/6379/6384/g' redis-6379.conf > redis-6384.conf
  7. sed 's/6379/6385/g' redis-6379.conf > redis-6385.conf
  8. 检查
  9. cat redis-6385.conf |grep -v '#' |grep -v '^$'
  10. 开启服务
  11. redis-server redis_config/redis-6379.conf
  12. ...
  13. redis-server redis_config/redis-6384.conf
  14. [root@maomao bin]# ps aux |grep redis-
  15. root 2116 0.2 0.5 165020 10824 pts/0 Sl+ 02:23 0:00 redis-server 127.0.0.1:6379 [cluster]
  16. root 2121 0.2 0.5 165020 10664 pts/7 Sl+ 02:23 0:00 redis-server 127.0.0.1:6380 [cluster]
  17. root 2126 0.2 0.5 165020 10720 pts/6 Sl+ 02:23 0:00 redis-server 127.0.0.1:6381 [cluster]
  18. root 2131 0.2 0.6 171164 12768 pts/2 Sl+ 02:23 0:00 redis-server 127.0.0.1:6382 [cluster]
  19. root 2136 0.2 0.5 165020 10760 pts/5 Sl+ 02:24 0:00 redis-server 127.0.0.1:6383 [cluster]
  20. root 2141 0.1 0.5 165020 10788 pts/1 Sl+ 02:24 0:00 redis-server 127.0.0.1:6384 [cluster]
  21. redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
  22. >>> Performing hash slots allocation on 6 nodes...
  23. Master[0] -> Slots 0 - 5460
  24. Master[1] -> Slots 5461 - 10922
  25. Master[2] -> Slots 10923 - 16383
  26. Adding replica 127.0.0.1:6383 to 127.0.0.1:6379
  27. Adding replica 127.0.0.1:6384 to 127.0.0.1:6380
  28. Adding replica 127.0.0.1:6382 to 127.0.0.1:6381
  29. >>> Trying to optimize slaves allocation for anti-affinity
  30. [WARNING] Some slaves are in the same host as their master
  31. M: 56aa54f614a2fc8f99e30a109d5e6a91d723193e 127.0.0.1:6379
  32. slots:[0-5460] (5461 slots) master
  33. M: 083eb7940fb5d5444563e3a48d36a1609b8d5af4 127.0.0.1:6380
  34. slots:[5461-10922] (5462 slots) master
  35. M: f515c69256533ebb17d2aabefe81d6e630f7eee5 127.0.0.1:6381
  36. slots:[10923-16383] (5461 slots) master
  37. S: d25e2d50c3b6136cafc3cdd0a5fef0e86fbf66fb 127.0.0.1:6382
  38. replicates 56aa54f614a2fc8f99e30a109d5e6a91d723193e
  39. S: 86f0f88285ca648df41e8f348e41cf5ef520bdae 127.0.0.1:6383
  40. replicates 083eb7940fb5d5444563e3a48d36a1609b8d5af4
  41. S: 738d205c923600d6f7c8ea8df8313527b8267b95 127.0.0.1:6384
  42. replicates f515c69256533ebb17d2aabefe81d6e630f7eee5
  43. Can I set the above configuration? (type 'yes' to accept):
  44. 6379 6380 6381 master
  45. 6382 6383 6384 slave
  46. slots 就是槽 三个master分的槽都一样多 平均分配
  47. Can I set the above configuration? (type 'yes' to accept): yes
  48. >>> Nodes configuration updated
  49. >>> Assign a different config epoch to each node
  50. >>> Sending CLUSTER MEET messages to join the cluster
  51. Waiting for the cluster to join
  52. >>> Performing Cluster Check (using node 127.0.0.1:6379)
  53. M: 56aa54f614a2fc8f99e30a109d5e6a91d723193e 127.0.0.1:6379
  54. slots:[0-5460] (5461 slots) master
  55. 1 additional replica(s)
  56. S: d25e2d50c3b6136cafc3cdd0a5fef0e86fbf66fb 127.0.0.1:6382
  57. slots: (0 slots) slave
  58. replicates 56aa54f614a2fc8f99e30a109d5e6a91d723193e
  59. S: 86f0f88285ca648df41e8f348e41cf5ef520bdae 127.0.0.1:6383
  60. slots: (0 slots) slave
  61. replicates 083eb7940fb5d5444563e3a48d36a1609b8d5af4
  62. M: 083eb7940fb5d5444563e3a48d36a1609b8d5af4 127.0.0.1:6380
  63. slots:[5461-10922] (5462 slots) master
  64. 1 additional replica(s)
  65. M: f515c69256533ebb17d2aabefe81d6e630f7eee5 127.0.0.1:6381
  66. slots:[10923-16383] (5461 slots) master
  67. 1 additional replica(s)
  68. S: 738d205c923600d6f7c8ea8df8313527b8267b95 127.0.0.1:6384
  69. slots: (0 slots) slave
  70. replicates f515c69256533ebb17d2aabefe81d6e630f7eee5
  71. [OK] All nodes agree about slots configuration.
  72. >>> Check for open slots...
  73. >>> Check slots coverage...
  74. [OK] All 16384 slots covered.
  75. 可以查看日志
  76. [root@maomao bin]# cat /usr/local/redis/data/nodes-6379.conf
  77. 集群搭建完成
  78. 测试
  79. [root@maomao bin]# redis-cli
  80. 127.0.0.1:6379> set name maomao
  81. (error) MOVED 5798 127.0.0.1:6380 # 叫我们去这个槽操作
  82. [root@maomao bin]# redis-cli -c # 操控集群使用 redis-cli -c
  83. 127.0.0.1:6379> set name maomao
  84. -> Redirected to slot [5798] located at 127.0.0.1:6380
  85. OK
  86. 我们在6382获取key 失败
  87. [root@maomao bin]# redis -cli -c -p 6382
  88. -bash: redis: command not found
  89. [root@maomao bin]# redis-cli -c -p 6382
  90. 127.0.0.1:6382> get name
  91. -> Redirected to slot [5798] located at
  92. 127.0.0.1:6380
  93. "maomao"
  94. 127.0.0.1:6380> exit
  95. 连接到6380就能够获取key
  96. [root@maomao bin]# redis-cli -c -p 6380
  97. 127.0.0.1:6380> get name
  98. "maomao"

主从下线和主从切换

  1. 我们将一个主节点下线,然后查看信息
  2. 127.0.0.1:6380> cluster nodes
  3. 86f0f88285ca648df41e8f348e41cf5ef520bdae 127.0.0.1:6383@16383 slave 083eb7940fb5d5444563e3a48d36a1609b8d5af4 0 1618815771240
  4. 2 connected
  5. 083eb7940fb5d5444563e3a48d36a1609b8d5af4 127.0.0.1:6380@16380 myself,master - 0 1618815770000 2 connected 5461-10922
  6. 56aa54f614a2fc8f99e30a109d5e6a91d723193e 127.0.0.1:6379@16379 master,fail - 1618815743184 1618815740000 1 disconnected
  7. d25e2d50c3b6136cafc3cdd0a5fef0e86fbf66fb 127.0.0.1:6382@16382 master - 0 1618815768232 7 connected 0-5460
  8. f515c69256533ebb17d2aabefe81d6e630f7eee5 127.0.0.1:6381@16381 master - 0 1618815770000 3 connected 10923-16383
  9. 738d205c923600d6f7c8ea8df8313527b8267b95 127.0.0.1:6384@16384 slave f515c69256533ebb17d2aabefe81d6e630f7eee5 0 1618815770238
  10. 3 connected
  11. master,fail意思是master会回来

发表评论

表情:
评论列表 (有 0 条评论,301人围观)

还没有评论,来说两句吧...

相关阅读