构建之前的安装下载准备
1.下载redis
2.下载并安装 ruby 安装到: C:\Ruby22-*64
3.下载ruby环境下的Redis的驱动
4.在git 上直接搜索 redis-trib.rb 克隆下来 将redis-trib.rb文件复制到redis的解压目录下
开始构建
- 按照端口不同创建文件夹,存放redis解压文件,并修改 redis.windows.conf 文件中的配置
cluster-enabled yes 前面的#注释符号去掉
appendonly no 改为 appendonly yes
prot 6739 #修改端口号为对应文件夹的端口号
2.在每个文件加下创建start.bat文件,目的为了方便启动redis服务器,启动服务时读取配置文件
title redis-6379
redis-server.exe redis.windows.conf
3.双击start.bat 开启所有的redis服务,在存放redis-trib.rb文件夹下执行创建集群的cmd
redis-trib.rb create --replicas 1 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
--replicas 1 指定每个主节点配置1个从节点
4.连接集群客户端
redis-cli -c -h 127.0.0.1 -p 6379 --连接集群中的节点127.0.0.1:6379
-- -c:表示集群,如果不写在执行redis指令时会报错
master节点下线重启:
master节点下线后,master节点下的slaver节点会自动变更为master节点。
重启之后会变为slaver节点,并且会是自己之前下上升为master节点的slaver节点。
重新创建集群:如果在之前创建过集群,想要重新在现有redis-server 上重新重建
1、将每个节点下aof、rdb、nodes.conf本地备份文件删除
2、清空数据库
3、重新执行创建集群命令
集群下的常用命令
cluster info //打印集群的信息
cluster nodes //列出集群当前已知的所有节点( node),以及这些节点的相关信息。
cluster meet <ip> <port> // ip:port 所指定的节点添加到集群当中,让它成为集群的一份子。
redis-trib.rb add-node <ip> <port> //新增节点
cluster forget <node_id> // 从集群中移除 node_id 指定的节点。
redis-trib.rb del-node <ip> <port> <node_id> // 删除节点。
cluster replicate <node_id> // 将当前节点设置为 node_id 指定的节点的从节点。
cluster saveconfig//将节点的配置文件保存到硬盘里面。
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 槽中的键
cluster集群的优点:
- 无中心架构。
- 可线性扩展强,节点可动态添加或删除。
- 高可用性:部分节点不可用时,集群仍可用
cluster集群的缺点:
- client 实现复杂,驱动要求实现 Smart Client。
- 节点会因为某些原因发生阻塞(阻塞时间大于 clutser-node-timeout),被判断下线。
- 数据通过异步复制,不保证数据的强一致性。k
- slave 在集群中充当“冷备”,不能缓解读压力。
- 事务操作支持有限,只支持多 key 在同一节点上的事务操作。
- key 作为数据分区的最小粒度,不能将一个很大的键值对象如 hash、list 等映射到不同的节点。
- 不支持多数据库空间,单机下的 redis 可以支持到 16 个数据库,集群模式下只能使用 1 个数据库空间,即 db0。
- 复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制结构。