redis 集群部署及使用

本文介绍了Redis集群的部署方法,包括集群配置修改、创建集群和节点管理。此外,还详细阐述了如何在SpringBoot 2.x应用中整合Redis集群,提供了三种不同的连接池配置方式。
摘要由CSDN通过智能技术生成

redis 集群部署及使用

说明


​  redis 常用集群方案一般分为两种:主从(哨兵)模式 和 redis cluster 方案,因为 cluster亦支持并且官方推荐将node配置成主从结构,即一个master主节点,挂n个slave从节点,所以本方案针对的所有说的集群方案均是指cluster方案。

  redis-3.0.0开始支持集群,redis-4.0.0开始支持module,redis-5.0.0开始支持类似于kafka那样的消息队列。 本文参考 官方文档 而成,不适用redis-5.0.0以下版本,原因是从redis-5.0.0版本开始,redis-trib.rb的功能被redis-cli替代了。redis-trib.rb 是官方提供的Redis Cluster的管理工具, 无需额外下载,默认位于源码包的src目录下,但因该工具是用ruby开发的,所以需要准备相关的依赖环境,而5.0以后的 redis-cli 则不需要任何依赖。

  redis 最新为 redis-5.0.5下载地址 ,当前案例以此版本为主,5.0以上没有任何区别。

cd redis-5.0.5
make

redis cluster 介绍


  Redis Cluster是一种服务器Sharding技术,3.0版本开始正式提供。Redis Cluster中,Sharding采用slot(槽)的概念,一共分成16384个槽,这有点儿类pre sharding思路。对于每个进入Redis的键值对,根据key进行散列,分配到这16384个slot中的某一个中。使用的hash算法也比较简单,就是CRC16后16384取模。

  Redis集群中的每个node(节点)负责分摊这16384个slot中的一部分,也就是说,每个slot都对应一个node负责处理。当动态添加或减少node节点时,需要将16384个槽做个再分配,槽中的键值也要迁移。
Redis集群,要保证16384个槽对应的node都正常工作,如果某个node发生故障,那它负责的slots也就失效,整个集群将不能工作。

  为了增加集群的可访问性,官方推荐的方案是将node配置成主从结构,即一个master主节点,挂n个slave从节点。这时,如果主节点失效,Redis Cluster会根据选举算法从slave节点中选择一个上升为主节点,整个集群继续对外提供服务,Redis Cluster本身提供了故障转移容错的能力。

  Redis Cluster的新节点识别能力、故障判断及故障转移能力是通过集群中的每个node都在和其它nodes进行通信,这被称为集群总线(cluster bus)。它们使用特殊的端口号,即对外服务端口号加10000。例如如果某个node的端口号是6379,那么它与其它nodes通信的端口号是16379。nodes之间的通信采用特殊的二进制协议。

  对客户端来说,整个cluster被看做是一个整体,客户端可以连接任意一个node进行操作,就像操作单一Redis实例一样,当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node。


cluster集群部署

  根据cluster的选举机制和主从备份的实现,redis要求至少三主三从共6个节点才能组成redis集群,测试环境可一台物理上启动6个redis节点,但生产环境至少要准备2~3台物理机。

服务端口 IP地址 配置文件名
6381 127.0.0.1 redis-6381.conf
6382 127.0.0.1 redis-6382.conf
6383 127.0.0.1 redis-6383.conf
6384 127.0.0.1 redis-6384.conf
6385 127.0.0.1 redis-6385.conf
6386 127.0.0.1 redis-6386.conf

  启动对应服务:

cd redis-5.0.5
./src/redis-server redis-6381.conf
./src/redis-server redis-6382.conf
./src/redis-server redis-6383.conf
./src/redis-server redis-6384.conf
./src/redis-server redis-6385.conf
./src/redis-server redis-6386.conf

redis 配置修改

  redis.config 配置支持集群,需要修改部分配置项,所有节点(不分主从)修改都是一致的,修改配置完成后启动对应的所有节点即可,和启动普通单例没有任何的区别。

  推荐配置分成两部分:一是公共配置,另一个与端口相关的配置。公共配置文件名可命名为 redis.conf,而端口相关的配置文件名可命令为redis-port.conf , 如 redis-6381.conf 。redis-port.conf 通过 include 的方式包含 redis.conf,如:include /data/redis/conf/redis.conf。

  redis-6381.conf配置如下:

#bind 127.0.0.1
port 6381
daemonize yes
pidfile /var/run/redis_6381.pid
dbfilename dump-6381.rdb
appendonly yes
appendfilename "appendonly-6381.aof"

  下表配置项,黑色加粗 为最小修改项,其它可根据实际需求修改:

配置项 说明
port 指定端口,默认值:6381
cluster-enabled 开启集群,去掉#: cluster-enabled yes
cluster-config-file 集群的配置,去掉#,首次启动会自动生成,命名修改: nodes-{port}.conf
cluster-node-timeout 请求超时 默认15秒,可自行设置
appendonly 指定是否在每次更新操作后进行日志记录,默认不开启,即aof模式备份数据
include 指定包含其它的配置文件
daemonize redis 是否后台运行,默认值:no
pidfile daemonize方式运行时,pid可以通过pidfile指定: /var/run/redis_6381.pid
requirepass 对集群设置密码
masterauth 如果设置,requirepass和masterauth都需要设置,并且每个节点的密码要一致

  以上修改 6 份实例,然后正常启动即可。可以写一个启动脚本,批量启动:start-redis-cluster.sh,内容如下:

#!/bin/sh

cd /Users/taofadeng/java/redis-5.0.5
./src/redis-server redis-6381.conf
./src/redis-server redis-6382.conf
./src/redis-server redis-6383.conf
./src/redis-server redis-6384.conf
./src/redis-server redis-6385.conf
./src/redis-server redis-6386.conf

创建集群

  创建redis集群命令(三主三从,每个主一个从,注意redis-5.0.0版本开始才支持“–cluster”,redis-cli --cluster 为 redis-5.0.0/src 下的 redis-cli ,老版本不支持,之前的版本会报错。)

cd /Users/taofadeng/java/redis-5.0.5
./src/redis-cli -h 127.0.0.1 -p 6381 --cluster create 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 --cluster-replicas 1

  如果配置项 cluster-enabled 的值不为yes,则执行时会报错“[ERR] Node 192.168.0.251:6381 is not configured as a cluster node.”。这个时候需改为yes,然后重启 redis-server 进程,之后才可以重新执行 redis-cli 创建集群。

redis-cli的参数说明:

1) create

  表示创建一个redis集群。

2) --cluster-replicas 1

  表示为集群中的每一个主节点指定一个从节点,即一比一的复制。

  运行过程中,会有个提示,输入**yes **回车即可。从屏幕输出,可以很容易地看出哪些是主(master)节点,哪些是从(slave)节点:


                
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值