Redis应用--Redis-cluster集群部署

举报
郁唯xiaolin 发表于 2021/02/07 18:23:20 2021/02/07
【摘要】 简单记录下Redis-cluster集群的部署过程。以及5.0版本更新过之后的部署。

一、简述

  • Redis经过快速的更新迭代已经到了6.0版本,在redis3.0的时代,加入了cluster集群的原生功能。本文不去介绍和对比主从、哨兵、cluster这三种之间的差异和为什么要选择cluster,只是简述下我在部署redis-cluster集群的时候一些步骤和碰到的一些问题。
  • Redis-cluster在经历了3.0/4.0/5.0的更迭之后,已经不需要使用redis-trib.rb命令去创建集群了,改用redis-cli创建,并且修复了一些bug吧,比如redis-4.0.x.gem新增节点之后,不能把已经存储数据的master节点的slot分配给新节点。
  • Redis 5.0使用redis-cli作为创建集群的命令,使用c语言实现,不再使用ruby语言,所以可以不用像3.0和4.0时候,为了使用redis-trib.rb命令而安装ruby。不过这篇文章主要以4.0为主,5.0操作和4.0一样,只是创建集群的时候,使用的命令有一些不一样而已。
  • 这是我做的一个各种搭建方式的对比:《Redis应用--Redis搭建方式总结》

二、Redis集群部署

1.部署环境

系统环境:centos7.5.1804
服务版本:redis-4.0.14(截止文章发布前最新版本)
注意:演示的集群部署是使用的但台机器部署六台甚至更多redis服务的形式创建的redis集群,正常生产环境需要六台物理机去分别部署每一个redis服务。


2.安装Redis服务

cd /usr/local/src/
wget http://download.redis.io/releases/redis-4.0.14.tar.gz
tar xzf redis-4.0.14.tar.gz
cd redis-4.0.14
make
make install PREFIX=/usr/andy/redis-cluster
cp -a redis.conf  /usr/local/redis-cluster/bin/
cp -a /usr/local/redis-cluster/bin/ /usr/local/redis-cluster/redis01

修改redis01/redis.conf配置,可以找到下面相应的配置项进行修改,也可以只保留下面的配置项。

#vim redis01/redis.conf
daemonize yes
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
appendonly yes
#正常应该是ip地址的,不能写回环地址
bind 192.168.180.192

将bin目录复制到六份,一定要修改每一个目录redis配置文件的端口号。
注意:这里bind我用了内网地址,因为此集群部署是在单挑机器模拟的,所以也可以填写127.0.0.1。

3.redis-trib所需的Ruby脚本

# 将创建集群的脚本复制到redis安装目录中
cp -a /usr/local/src/redis-4.0.14/src/redis-trib.rb /usr/local/redis-cluster/
##安装ruby,因为我使用的是redis4.0.14版本,现有的centos服务源中并没有高版本的ruby支持,所以需要先安装其他源
yum install centos-release-scl-rh
yum -y install rh-ruby23
#以下这条命令是进入ruby23的环境中,不使用这个环境的时候可以输入exit命令退出来。
scl  enable  rh-ruby23 bash
#查看安装的ruby版本
ruby -v
#安装redis-trib.rb运行依赖的ruby的包redis
gem install redis
#安装之后会有如下提示
#Successfully installed redis-4.1.4
#Parsing documentation for redis-4.1.4
#Done installing documentation for redis after 0 seconds
#1 gem installed

4.编写简单的启动Redis脚本

脚本内容如下

#vim start_redis.sh
cd redis01  
./redis-server redis.conf  
cd ..  
cd redis02  
./redis-server redis.conf  
cd ..  
cd redis03  
./redis-server redis.conf  
cd ..  
cd redis04  
./redis-server redis.conf  
cd ..  
cd redis05  
./redis-server redis.conf  
cd ..  
cd redis06  
./redis-server redis.conf  
cd .. 


##使用脚本启动redis服务
bash start_redis.sh
## 检查是否启动
ps -ef | grep redis-server |grep -v grep 

执行上面命令之后如果redis服务在启动,会有如下内容,这样就能判断redis服务都已经启动了

root      9625     1  0 6月04 ?       00:11:30 ./redis-server 192.168.180.192:7001
root      9760     1  0 6月04 ?       00:11:38 ./redis-server 192.168.180.192:7002
root      9779     1  0 6月04 ?       00:11:49 ./redis-server 192.168.180.192:7003
root      9796     1  0 6月04 ?       00:11:36 ./redis-server 192.168.180.192:7004
root      9854     1  0 6月04 ?       00:11:33 ./redis-server 192.168.180.192:7005
root      9870     1  0 6月04 ?       00:11:34 ./redis-server 192.168.180.192:7006

5.创建集群

注意:redis-trib.rb是redis3和redis4使用的创建cluster的方式,redis5中使用的自带的命令redis-cluster

./redis-trib.rb create --replicas 1  192.168.180.192:7001 192.168.180.192:7002 192.168.180.192:7003 192.168.180.192:7004 192.168.180.192:7005 192.168.180.192:7006
# 使用create命令 --replicas 1 参数表示为每个主节点创建一个从节点,其他参数是实例的地址集合。

以上命令执行完毕之后,在屏幕中有提示创建是否完成,创建完成之后的cluster集群状态。可以看到是三个M的id和其从id和三个S的id和其主id。

在redis5 中创建的方式如下:

cd /usr/local/src/redis-5.0.2/utils/create-cluster
# 启动
./create-cluster start
# 创建
./create-cluster create
# 停止
./create-cluster stop
# 查看状态
./create-cluster watch
##当然redis5中还有一种方式,redis-cli命令创建rediscluster集群和redis4的差不多,有兴趣可以自行百度搜索redis5的cluster集群创建,在此不再赘述、

6.测试集群

./redis-cli -c -h 192.168.180.192 -p 7001

使用以下命令测试会看到设置key的时候,从7001这个redis服务自动切换到7004这个redis服务

202006091957172125516.png

7.模拟集群故障


可以试着将一个Master redis服务停掉,然后检查是否有它的从被选举成主。
然后在将停掉的redis服务启动,观察是否会自动加入集群,然后加入集群之后它是mstar还是slave,如果是salve的话,它的master是谁,都可以观察下。

当然还可以添加redis-cluster集群的主从节点,删除redis-cluster主从节点。在此不再去详尽的描述了。可以查看这篇文章Redis Cluster集群
在公司的企业架构出去选项的时候,如果选择了Redis-cluster的话,做决定的时候,就回去定使用多少主从节点。当流量激增等的时候,才会考虑增加节点等内容。


注意:redis4版本添加节点的时候,可能会有命令的问题。可以查看下这篇文章redis 集群新增节点【ERR】 官方文档推荐使用高版本的redis,比如redis5去创建集群.

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。