06. Redis 环境搭建-分片集群Cluster

阳光穿透心脏的1/2处 2022-02-02 09:51 382阅读 0赞

Redis 支持分片集群模式, 会将数据散落在不同节点之上, 且每个数据节点都有相应的副本集. 在Redis 3.x 时创建Redis 分片集群还比较麻烦, 需要借助于redis 源码中的ruby 脚本来创建,依赖ruby 环境。 而从Redis 5.x开始, , 创建Redis 分片集群不再支持ruby脚本创建, 而是使用redis-cli 命令直接创建。这种创建方式更为方便.

1. 集群配置文件模板

笔者将redis 集群配置存放在/usr/local/etc/redis 目录下

  • 从redis源码目录下复制redis.conf 配置文件到/usr/local/etc/redis 目录下
  • 创建集群配置模板文件: /usr/local/etc/redis/template-cluster.conf
  • 新增节点时,只需要替换文件中的6379 即可.

    引入原配置

    include /usr/local/etc/redis/redis.conf

    ################################## 自定义配置

    修改绑定ip

    bind 127.0.0.1

    设置关闭保护模式

    protected-mode no

    设置端口号为6379

    port 6379

    设置后台启动为yes

    daemonize yes

    设置pid文件

    pidfile /logs/redis/redis.pid.6379

    设置日志文件

    logfile /logs/redis/redis.log.6379

    设置RDB dum文件名

    dbfilename dump.rdb.6379

    设置dump文件存放目录

    dir /data/redis

    设置主节点密码

    masterauth 123456

    设置从节点只读

    replica-read-only yes

    设置当前节点访问密码为

    requirepass 123456

    设置客户端最多连接数

    maxclients 1000

    设置最大内存

    maxmemory 2GB

    设置达到最大内存后策略,报错

    maxmemory-policy noeviction

    启动AOF持久化模式

    appendonly yes

    设置AOF文件名

    appendfilename “appendonly.aof.6379”

    设置AOF写入磁盘策略, 每秒写入一次

    appendfsync everysec

    开启集群

    cluster-enabled yes

    集群节点连接超时时间

    cluster-node-timeout 15000

    集群节点配置信息文件, 位于redis 数据文件存放目录,即$dir 定义的目录中

    cluster-config-file nodes.conf.6379

2. 创建集群配置

对于Redis 分片集群, 笔者认为, 集群节点至少应该有9个。 三个主节点, 6个从节点. 这样集群才能集高可用和分片于一身. 笔者创建一个9个节点的集群, 端口号为:7481~7489

2.1 复制9个节点配置

配置文件均存放在/usr/local/etc/redis目录.

  1. cp template-cluster.conf redis.conf.7481
  2. cp template-cluster.conf redis.conf.7482
  3. cp template-cluster.conf redis.conf.7483
  4. cp template-cluster.conf redis.conf.7484
  5. cp template-cluster.conf redis.conf.7485
  6. cp template-cluster.conf redis.conf.7486
  7. cp template-cluster.conf redis.conf.7487
  8. cp template-cluster.conf redis.conf.7488
  9. cp template-cluster.conf redis.conf.7489

2.2 替换端口号

依次替换每个节点配置的端口号,日志文件,dump文件等配置.

  1. sed -i "s/6379/7481/g" redis.conf.7481
  2. sed -i "s/6379/7482/g" redis.conf.7482
  3. sed -i "s/6379/7483/g" redis.conf.7483
  4. sed -i "s/6379/7484/g" redis.conf.7484
  5. sed -i "s/6379/7485/g" redis.conf.7485
  6. sed -i "s/6379/7486/g" redis.conf.7486
  7. sed -i "s/6379/7487/g" redis.conf.7487
  8. sed -i "s/6379/7488/g" redis.conf.7488
  9. sed -i "s/6379/7489/g" redis.conf.7489

3. 启动redis 集群

3.1 启动redis

依次启动9台服务器!

  1. redis-server redis.conf.7481
  2. redis-server redis.conf.7482
  3. redis-server redis.conf.7483
  4. redis-server redis.conf.7484
  5. redis-server redis.conf.7485
  6. redis-server redis.conf.7486
  7. redis-server redis.conf.7487
  8. redis-server redis.conf.7488
  9. redis-server redis.conf.7489

3.2 创建集群关系

使用redis-cli —cluster 命令建立集群关系, 需要注意的是,每个redis 都必须是空的, 即是新建的节点, 否则将无法创建。

  1. $ redis-cli -a 123456 --cluster create \
  2. > 127.0.0.1:7481 \
  3. > 127.0.0.1:7482 \
  4. > 127.0.0.1:7483 \
  5. > 127.0.0.1:7484 \
  6. > 127.0.0.1:7485 \
  7. > 127.0.0.1:7486 \
  8. > 127.0.0.1:7487 \
  9. > 127.0.0.1:7488 \
  10. > 127.0.0.1:7489 \
  11. > --cluster-replicas 2
  12. Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
  13. >>> Performing hash slots allocation on 9 nodes...
  14. Master[0] -> Slots 0 - 5460
  15. Master[1] -> Slots 5461 - 10922
  16. Master[2] -> Slots 10923 - 16383
  17. Adding replica 127.0.0.1:7485 to 127.0.0.1:7481
  18. Adding replica 127.0.0.1:7486 to 127.0.0.1:7481
  19. Adding replica 127.0.0.1:7487 to 127.0.0.1:7482
  20. Adding replica 127.0.0.1:7488 to 127.0.0.1:7482
  21. Adding replica 127.0.0.1:7489 to 127.0.0.1:7483
  22. Adding replica 127.0.0.1:7484 to 127.0.0.1:7483
  23. >>> Trying to optimize slaves allocation for anti-affinity
  24. [WARNING] Some slaves are in the same host as their master
  25. M: 9baa3a6f75fe188460d337cfa8d6df862412e6e4 127.0.0.1:7481
  26. slots:[0-5460] (5461 slots) master
  27. M: 829f7c60a21a5033ce88f0c7e54b17083ca6a691 127.0.0.1:7482
  28. slots:[5461-10922] (5462 slots) master
  29. M: 97324a77a0ebfa3ac237abfd2593347b93aad719 127.0.0.1:7483
  30. slots:[10923-16383] (5461 slots) master
  31. S: 1362c9a5988eba9a227595670b3e98f70767935a 127.0.0.1:7484
  32. replicates 829f7c60a21a5033ce88f0c7e54b17083ca6a691
  33. S: 7086538d6d4c11a5a52580082c4fd963814365cd 127.0.0.1:7485
  34. replicates 9baa3a6f75fe188460d337cfa8d6df862412e6e4
  35. S: 3a5f4c13439bc20586238ef615e27a91dc47b251 127.0.0.1:7486
  36. replicates 9baa3a6f75fe188460d337cfa8d6df862412e6e4
  37. S: c36937c4281e8f891e88b02102fe2f59c15d4769 127.0.0.1:7487
  38. replicates 97324a77a0ebfa3ac237abfd2593347b93aad719
  39. S: 3865b037f0026306de024629a4b7298e9c80d4c9 127.0.0.1:7488
  40. replicates 97324a77a0ebfa3ac237abfd2593347b93aad719
  41. S: 869576474847e228be3d9d5377b01dd3040b1cae 127.0.0.1:7489
  42. replicates 829f7c60a21a5033ce88f0c7e54b17083ca6a691
  43. Can I set the above configuration? (type 'yes' to accept): yes
  44. >>> Nodes configuration updated
  45. >>> Assign a different config epoch to each node
  46. >>> Sending CLUSTER MEET messages to join the cluster
  47. Waiting for the cluster to join
  48. ....
  49. >>> Performing Cluster Check (using node 127.0.0.1:7481)
  50. M: 9baa3a6f75fe188460d337cfa8d6df862412e6e4 127.0.0.1:7481
  51. slots:[0-5460] (5461 slots) master
  52. 2 additional replica(s)
  53. S: 7086538d6d4c11a5a52580082c4fd963814365cd 127.0.0.1:7485
  54. slots: (0 slots) slave
  55. replicates 9baa3a6f75fe188460d337cfa8d6df862412e6e4
  56. S: c36937c4281e8f891e88b02102fe2f59c15d4769 127.0.0.1:7487
  57. slots: (0 slots) slave
  58. replicates 97324a77a0ebfa3ac237abfd2593347b93aad719
  59. S: 3a5f4c13439bc20586238ef615e27a91dc47b251 127.0.0.1:7486
  60. slots: (0 slots) slave
  61. replicates 9baa3a6f75fe188460d337cfa8d6df862412e6e4
  62. S: 3865b037f0026306de024629a4b7298e9c80d4c9 127.0.0.1:7488
  63. slots: (0 slots) slave
  64. replicates 97324a77a0ebfa3ac237abfd2593347b93aad719
  65. M: 97324a77a0ebfa3ac237abfd2593347b93aad719 127.0.0.1:7483
  66. slots:[10923-16383] (5461 slots) master
  67. 2 additional replica(s)
  68. S: 869576474847e228be3d9d5377b01dd3040b1cae 127.0.0.1:7489
  69. slots: (0 slots) slave
  70. replicates 829f7c60a21a5033ce88f0c7e54b17083ca6a691
  71. S: 1362c9a5988eba9a227595670b3e98f70767935a 127.0.0.1:7484
  72. slots: (0 slots) slave
  73. replicates 829f7c60a21a5033ce88f0c7e54b17083ca6a691
  74. M: 829f7c60a21a5033ce88f0c7e54b17083ca6a691 127.0.0.1:7482
  75. slots:[5461-10922] (5462 slots) master
  76. 2 additional replica(s)
  77. [OK] All nodes agree about slots configuration.
  78. >>> Check for open slots...
  79. >>> Check slots coverage...
  80. [OK] All 16384 slots covered.

3.3 查看集群状态

通过cluster nodes 命令, 可以看出redis各节点主从关系.

  1. $ redis-cli -a 123456 -p 7481 cluster nodes
  2. Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
  3. 1c9ee4a2f7e0191983f67c8849e61f8cd5c91005 127.0.0.1:7482@17482 master - 0 1557385770000 2 connected 5461-10922
  4. 06993924bd468b6eddb20be332b762a956b6631b 127.0.0.1:7489@17489 slave 1f5f8ba346034004cdd52ef0f267f024b1be6ee3 0 1557385771602 9 connected
  5. 7229f95a77bb60065a78e3dc422c056e265b05b3 127.0.0.1:7485@17485 slave 57fb7a0de46ef6340ece8f6a67829c49aeb91c96 0 1557385769000 5 connected
  6. e25d2f1a019a40282e3c9146a00e44f4aa077afa 127.0.0.1:7486@17486 slave 1c9ee4a2f7e0191983f67c8849e61f8cd5c91005 0 1557385770599 6 connected
  7. 1f5f8ba346034004cdd52ef0f267f024b1be6ee3 127.0.0.1:7483@17483 master - 0 1557385768000 3 connected 10923-16383
  8. 7464b7aafc58e9235fc2a5c40f999018bb8b5509 127.0.0.1:7484@17484 slave 57fb7a0de46ef6340ece8f6a67829c49aeb91c96 0 1557385768000 4 connected
  9. fe1a76b8052de772ed3aa9472726507ee48a5f1d 127.0.0.1:7488@17488 slave 1c9ee4a2f7e0191983f67c8849e61f8cd5c91005 0 1557385769000 8 connected
  10. 57fb7a0de46ef6340ece8f6a67829c49aeb91c96 127.0.0.1:7481@17481 myself,master - 0 1557385769000 1 connected 0-5460
  11. e72fb434274ce30e0da21130e9279c5a700419b6 127.0.0.1:7487@17487 slave 1f5f8ba346034004cdd52ef0f267f024b1be6ee3 0 1557385769596 7 connected

发表评论

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

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

相关阅读

    相关 redis-cluster

    今天简单介绍一下redis-cluster集群搭建。 redis 最开始的时候,为了实现高可用,使用的主从模式,主从的模式的缺点是,一旦主挂了,没有办法自动的将“从 ”切换为“