Redis——集群部署实战

前言

在当今,大多数后端开发项目中,Redis的重要性可能比关系型数据库还要重要!主要体现在以下几个方面:

  • 性能:redis的底层实现逻辑让其天生支持高并发,因此可以很好地利用redis进行性能优化(比如首页加载、热点数据加载等);
  • 高可用:redis支持多机数据库协同工作(主从、哨兵、集群),让其具备高可用特性;
  • 功能丰富:如果对于redis的实现设计稍有研究就会发现,其特有的数据结构+算法让其能支持丰富的数据类型,比如常见的字符串、列表、哈希、集合、有序集合等,基于此,复杂的业务场景都可以使用redis轻松实现。
    如果想系统了解redis的实现原理建议系统学习:**《redis设计与实现》**这一本书。我看完之后才发现原理redis的实现是如此的精妙绝伦。真心佩服作者antirez
    本文不涉及redis的基础和原理,如果想系统学习redis,建议跟着官网系统学习,之后在阅读一些优秀的书籍去了解redis的实现原理!
    本文主要是想记录自己的redis集群部署过程,对这个过程中踩过的坑进行一个总结。

准备资源和环境

redis

我们可以从github下载:https://github.com/MicrosoftArchive/redis/releases


由于是windows环境,因此选择.zip包下载。
下载完成之后解压出来,并复制出5份,我们采用3主3从模式:

Redis——集群部署实战_第1张图片
要让redis处于集群模式下运行,需要对配置文件进行修改。redis的启动时可以指定配置文件,因此选择新建配置文件,以6379节点为例:

Redis——集群部署实战_第2张图片

新建配置文件并命名为: redis.6379.conf,其配置内容如下:

# 启动端口
port 6379

# 采用aof持久化
appendonly yes

# aof文件名(不用新建,redis启动后会自动创建))
appendfilename "appendonly.6379.aof"

# 最大内存
maxmemory 200mb

# 缓存过期策略采用所有键lru策略
maxmemory-policy allkeys-lru

# 启用cluster模式
cluster-enabled yes

# 当前节点的cluster配置文件名(不用新建,redis启动后会自动创建)
cluster-config-file nodes-6379.conf

# cluster节点的超时时间单位ms,超过此时长,cluster就认为该节点故障
cluster-node-timeout 15000

# 从节点与主节点失联 10 * cluster-node-timeout 时长之后,则取消从节点升级为主节点的资格
cluster-slave-validity-factor 10

# 当主节点拥有1个从节点之后仍然有多余的从节点,那么多余的从节点可以被重新分配给其他主节点
cluster-migration-barrier 1

# 1. 当集群检测到至少有1个槽(slot)不可用时, 默认是集群将停止服务(默认是yes)
# 2. 当部分槽不可用时, 还是希望集群提供服务, 设置为no
cluster-require-full-coverage yes

其他几个节点按照此配置进行配置。注意区分端口号。
配置完成之后,依次在各自的文件路径下,通过cmd窗口执行命令:
redis-server.exe ./redis.6379.conf --service-name redis6379
redis-server.exe ./redis.6380.conf --service-name redis6380
redis-server.exe ./redis.6381.conf --service-name redis6381
redis-server.exe ./redis.6382.conf --service-name redis6382
redis-server.exe ./redis.6383.conf --service-name redis6383
redis-server.exe ./redis.6384.conf --service-name redis6384

完成之后,6台redis服务器启动完成。此时他们还是相互孤立的。

redis集群工具

redis的集群管理工具是redis-trib.rb 要使用它,首先要进行其使用环境的配置。

ruby环境配置

下载: http://rubyinstaller.org/downloads
安装:安装时需要注意的是,将所有选项都勾选,这样安装过程中会自动配置好环境变量、编码等。
安装好之后,此时就有了ruby的环境,但此时还需要进一步努力才行,

redis的ruby驱动安装

下载:https://rubygems.org/pages/download 选择zip安装包。
解压安装:然后命令行执行ruby setup.rb, 或者直接双击执行setup.rb也可。
更换源:由于墙的原因,我们需要更换下载源。注意,这一步看似简单,但一不注意就会掉进坑里。我们细细道来:
首先正常情况更换源:

gem sources --remove https://rubygems.org/
gem sources -a http://gems.ruby-china.org/
gem sources -l
// 如果更换成功则会打印
http://gems.ruby-china.org/

遗憾的是,我失败了。根据失败提示,大概是SSL证书的问题。在github上有一个相关的issue,此issue分析的头头是道,但并没有给出简单高效的解决方法。因此只能另找它路。
既然是证书有问题,那么直接更新gem ssl证书可否?带着这个疑问尝试了一下。首先下载证书, 下载完成后,配置环境变量配置环境变量 SSL_CERT_FILE如下:

Redis——集群部署实战_第3张图片
之后,再次执行上面的命令替换源。发现成功!
然后在6379节点文件下执行gem install redis:

Redis——集群部署实战_第4张图片
成功!
至此,集群管理工具的环境配置完毕。

集群管理工具下载

如果对于redis-trib.rb不了解或者不熟悉,请看这里
下载地址:https://github.com/beebol/redis-trib.rb
修改源码:下载完成之后,需要修改源码,否则在执行某些命令是会出现莫名其妙的错误,比如:槽重新分片报错等问题。

具体修改如下:将 source.r.client.call 修改为: source.r.call

Redis——集群部署实战_第5张图片

**至此,准备工作完毕!**接下来,来开始创建redis集群。

创建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:表示每个master节点拥有一个slave节点。
执行完成后通过redis-trib.rb info any_cluster_node_ip:port


可以看到,我们的集群部署成功了!
在cmd中通过redis-cli.exe -c -h 127.0.0.1 -p 6379连接到集群,就可以执行redis命令了!注意,要连接到集群,必须使用 -c 参数!
对于集群的故障转移、slot槽、MOVE/ASK等原理性的知识,不是一两篇博客文章能写清楚的,需要系统阅读相关知识才行。
关于集群的扩容和缩容请看这篇文章.

总结

对于大多数公司、大多数项目而言,redis集群的创建、管理都是由高级工程师、架构师掌控或者直接上云(阿里云等),对于大多数开发者而言,只需专注业务即可。如果不想成为那“大多数开发者”…

你可能感兴趣的:(REDIS,redis,java,数据库,大数据)