一.准备工作
1.下载redis,我这里使用的是windows 64位的redis-3.0.504。需要下载Source code (zip)和Redis-x64-3.0.504.zip这两个文件。
2.Redis-x64-3.0.504.zip是redis编译好的exe可执行文件
文件 | 说明 |
---|---|
redis-benchmark.exe | 测试redis性能工具 |
redis-check-aof.exe | 检查aof文件工具 |
redis-check-dump.exe | 检查rdb文件工具 |
redis-cli.exe | 命令行窗口工具 |
redis-server.exe | redis服务器 |
3.Source code (zip)是redis源码文件,这个文件主要是使用其中src文件下的redis-trib.rb文件
4.redis-trib.rb文件是用ruby写的redis cluster的工具,redis集群的所有操作都可以通过该工具来完成
5.对bat文件的编写要有一定的了解
二.开始搭建
1. redis.conf配置(只写出我修改了的属性)
属性 | 说明 |
---|---|
port 7001 | 端口为7001 |
save 300 10 | 300秒有10条记录改变了,则将数据保存入dump.rdb |
dir ./data | .rdb、.aof、nodes.conf文件存放地址为与redis-server同级下的data文件夹 |
masterauth 123456 | slave连接主的密码 |
repl-backlog-size 64mb | repl-backlog-size过小,会导致主从节点拉复制失败,因为全量复制的时候,父节点的更新(应用更新,主动过期删除等)会临时存放在backlog中待全量复制完成后增量发到子节点,必须为此保留足够的空间。 |
repl-timeout 180 | slave和master之间的复制超时时间,默认为60s, 推荐设置为180s |
requirepass 123456 | redis访问密码,masterauth要与这个设置一致 |
appendonly yes | 开启aof文件保存 |
cluster-enabled yes | 开启redis集群 |
cluster-config-file nodes.conf | cluster节点配置文件 |
cluster-node-timeout 15000 | 集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。 |
client-output-buffer-limit (class) (hard limit) (soft limit) (soft seconds) | class : 客户端种类,normal、slave、pubsub。 – mormal:普通的客户端 – slave: 从库的复制客户端 – pub/sub: 发布与订阅的客户端的 hard limit: 缓冲区大小的硬性限制。 soft limit: 缓冲去大小的软性限制。 soft seconds: 缓冲区大小达到了(超过)soft limit值的持续时间。 限制分配的缓冲区的大小,防止内存无节制的分配。参数的默认值都为0,意思是不做任何限制。 |
2. 创建redis集群文件夹
1.先创建一个主文件夹,然后以端口号为名称创建6个文件夹,官方文档中提到过
2.我的目录结构如图(cmd中执行 tree /f 出现当前文件的目录结构)
└─redis cluster
│ master-ip-port.properties--------主要配置文件
│ node-add.bat---------------------调用redis-trib.rb的add-node命令创建redis cluster扩展cluster
│ node-check.bat-------------------调用redis-trib.rb的check命令检查redis cluster
│ node-del.bat---------------------调用redis-trib.rb的del-node命令删除redis cluster节点
│ node-fix.bat---------------------调用redis-trib.rb的del-node命令检查redis cluster
│ node-reshard.bat-----------------调用redis-trib.rb的reshard命令重新分片redis cluster的slots(槽点)
│ node-slave-add.bat---------------调用redis-trib.rb的add-node命令添加master的slave
│ remove-data-conf.bat-------------删除当前文件夹中所有以"master-"为前缀命名的文件夹中启动配置文件和data文件夹下文件的命令文件
│ startup-allmaster.bat------------启动当前文件夹中所有以"master-"为前缀命名的文件夹中的redis实例的命令文件
│ startup-cluster.bat--------------调用redis-trib.rb的create命令创建redis cluster
│
├─master-7001
│ │ redis-server.exe
│ │ redis.conf--------------------启动配置文件
│ │ startup-master.bat------------单个启动redis实例文件
│ │
│ ├─conf
│ │ redis.conf----------------原始配置文件
│ │
│ └─data
│ dump.rdb
│ nodes.conf
│
├─master-7002
│ 。。。。。
├─master-7003
│ 。。。。。
├─master-8001
│ 。。。。。
├─master-8002
│ 。。。。。
├─master-8003
│ 。。。。。
├─redis-stat-------------------------监控redis状态的工具
│ help.bat
│ master-ip-port.properties-----监控配置文件,可以直接复制主配置文件替换
│ redis-stat-0.4.14.jar---------监控工具jar包
│ startup-monitor.bat-----------启动文件
│
├─Redis-x64-3.0.504------------------备用的redis可执行文件文件
│ 。。。。。
├─Ruby24-x64-------------------------ruby安装文件,redis-trib.rb放在其中的bin文件夹下,免去安装ruby的步骤
│ 。。。。。
3. 使用方法
1.master-ip-port.properties配置文件参数说明
参数 | 说明 | 使用该参数的bat文件 |
---|---|---|
master* | 各redis实例的ip和port | startup-cluster.bat node-slave-add.bat node-del.bat node-check.bat node-add.bat |
replicas | 调用redis-trib.rb的create命令的replicas参数,即每个master的slave个数 | startup-cluster.bat |
add-node* | 扩展redis cluster时的主节点的ip和port | node-add.bat |
add-slave-node* | 从节点的ip、port和主节点的node-id | node-slave-add.bat |
del-node-id* | 要删除的节点的node-id | node-del.bat |
有*的参数表示可以配置多个,当执行bat文件时会循环参数执行命令
2.redis cluster启动执行顺序
- 修改master-ip-port.properties中master*
- remove-data-conf.bat(第一次启动可以不执行此文件)
- startup-allmaster.bat
- startup-cluster.bat
3.增加节点执行顺序
- 修改master-ip-port.properties中add-node*
- node-add.bat
- 修改master-ip-port.properties中add-slave-node*
- node-slave-add.bat
- node-reshard.bat
node-reshard.bat执行增加时输入参数
- 第一个:要为添加节点的添加多少个slots
- 第二个:添加节点的node-id
- 第三个:all或者目标节点的node-id
在执行添加重新分片时必须注意事项
- 分片的slots很少,官方举例在写负载情况下只分片了100个slots
-
分片的slots很多时,需要redis中没有值时才会成功,题主实践过分片2000,在有值情况下会报如下错误
在被重新分片的节点的slots时,在某些时候会少分配一个slots,这个问题感觉时redis-trib.rb脚本问题
3.删除节点执行顺序
- 修改master-ip-port.properties中reshard-node*,改为要删除节点的ip和port
- node-reshard.bat
- 修改master-ip-port.properties中del-node-id*
- node-del.bat
node-reshard.bat执行删除时输入参数
第一个:要删除节点的slots总和
第二个:接受槽点的节点node-id
第三个到第N个:要删除的节点的node-id,最后输入done结尾
最后
附上文件的下载地址
各位老铁看了下载了都评价下,欢迎拍砖,还有如果没有分想下载的可以留下邮箱。