Redis集群部署详解(非常详细)

Redis集群

Redis Cluster 即 Redis 集群,是 Redis 官方在 3.0 版本推出的一套分布式存储方案。

Redis 集群是一个分布式系统,由多个节点组成,每个节点都保存着相同的数据副本,通过协调器来管理数据的分片和故障转移等操作。

Redis集群部署详解(非常详细)-mikechen

 

Redis集群部署

1.下载Redis

下载和安装Redis:您可以从Redis官方网站:https://redis.io,下载最新版本的Redis,并按照说明进行安装。

更加详细的安装步骤,请查看:Redis下载安装教程(手把手教你5步成功)

2.Redis集群部署

依据 Redis Cluster 内部故障转移实现原理,Redis 集群至少需要 3 个主节点,而每个主节点至少有 1 从节点,因此搭建一个集群至少包含 6 个节点,三主三从,并且分别部署在不同机器上。(本次以部署在同一台机器上为例)

目前 Redis Cluster 的搭建有两种方式:

  • 手动方式搭建,即手动执行 cluster 命令,一步步完成搭建流程。
  • 自动方式搭建,即使用官方提供的集群管理工具快速搭建。

两种方式原理一样,自动搭建方式只是将手动搭建方式中需要执行的 Redis 命令封装到了可执行程序。生产环境下推荐使用第二种方式,简单快捷,不易出错。(本次以自动搭建为例)

由于我们这是在一台机器上模拟多个节点,可以预先规划下各个节点的属性:

节点编号

IP 地址

TCP 端口

节点类型

从节点

启动配置

A

127.0.0.1

7001

D

/home/redis-5.0.6/redis-cluster/7001/redis.conf

B

127.0.0.1

7002

E

/home/redis-5.0.6/redis-cluster/7002/redis.conf

C

127.0.0.1

7003

F

/home/redis-5.0.6/redis-cluster/7003/redis.conf

D

127.0.0.1

8001

/

/home/redis-5.0.6/redis-cluster/8001/redis.conf

E

127.0.0.1

8002

/

/home/redis-5.0.6/redis-cluster/8002/redis.conf

F

127.0.0.1

8003

/

/home/redis-5.0.6/redis-cluster/8003/redis.conf

1.创建节点

mkdir /home/redis-5.0.6/redis-cluster

cd redis-cluster

mkdir -p 7001 7002 7003 8001 8002 8003

2.分别复制配置文件到各个节点目录

cp redis.conf /home/redis-5.0.6/redis-cluster/7001

cp redis.conf /home/redis-5.0.6/redis-cluster/7002

cp redis.conf /home/redis-5.0.6/redis-cluster/7003

cp redis.conf /home/redis-5.0.6/redis-cluster/8001

cp redis.conf /home/redis-5.0.6/redis-cluster/8002

cp redis.conf /home/redis-5.0.6/redis-cluster/8003

3.分别修改节点配置文件(以7001节点为例,其他原理相同)

cd /home/redis-5.0.6/redis-cluster/7001

vi redis.conf

* 具体修改内容如下:

bind 192.168.83.128 # 设置当前节点主机地址

port 7001 # 设置客户端连接监听端口

pidfile /var/run/redis_7001.pid # 设置 Redis 实例 pid 文件

daemonize yes # 以守护进程运行 Redis 实例

cluster-enabled yes # 启用集群模式

cluster-node-timeout 15000 # 设置当前节点连接超时毫秒数

cluster-config-file nodes-7001.conf # 设置当前节点集群配置文件路径

4.启动集群各个节点

cd /home/redis-5.0.6/src

./run-server /home/redis-5.0.6/redis-cluster/7001/redis.conf

./run-server /home/redis-5.0.6/redis-cluster/7002/redis.conf

./run-server /home/redis-5.0.6/redis-cluster/7003/redis.conf

./run-server /home/redis-5.0.6/redis-cluster/8001/redis.conf

./run-server /home/redis-5.0.6/redis-cluster/8002/redis.conf

./run-server /home/redis-5.0.6/redis-cluster/8003/redis.conf

* 启动后,会有如下提示:

Redis集群部署详解(非常详细)-mikechen

* 通过ps命令查看确认各个节点是否运行

Redis集群部署详解(非常详细)-mikechen

5.自动搭建集群

Redis 3.0 版本之后官方发布了一个集群管理工具 redis-trib.rb,集成在 Redis 源码包的src目录下。其封装了 Redis 提供的集群命令,使用简单、便捷。不过 redis-trib.rb 是 Redis 作者使用 Ruby 语言开发的,故使用该工具之前还需要先在机器上安装 Ruby 环境。后面作者可能意识到这个问题,Redis 5.0 版本开始便把这个工具集成到 redis-cli 中,以–cluster参数提供使用,其中create命令可以用来创建集群。如果您安装的 Redis 是 3.x 和 4.x 的版本可以使用 redis-trib.rb 搭建,不过之前需要安装 Ruby 环境。先使用 yum 安装 Ruby 环境以及其他依赖项:

yum -y install ruby ruby-devel rubygems rpm-build

确认安装版本:

ruby -v

Redis集群部署详解(非常详细)-mikechen

* 本次搭建使用的 Redis 版本是 5.0.6,所以我可以直接使用redis-cli –cluster create命令搭建,具体命令如下所示(重点):

./redis-cli –cluster create 10.252.30.241:7001 10.252.30.241:7002 10.252.30.241:7003 10.252.30.241:8001 10.252.30.241:8002 10.252.30.241:8003 –cluster-replicates 1

* 主节点在前,从节点在后。其中–cluster-replicas参数用来指定一个主节点带有的从节点个数,如上–cluster-replicas 1即表示 1 个主节点有 1 个从节点。

* 创建成功会有如下提示

Redis集群部署详解(非常详细)-mikechen

至此,Redis集群搭建完毕!

四、Redis基本使用

1.Redis启动/重启

./run-server /home/redis-5.0.6/redis.conf

2.客户端登录

./redis-cli

./redis-cli -h ip 进入指定服务器的Redis实例

3.关闭Redis

· 方式一:shell交互命令关闭

1)进入Redis的shell命令行

./redis-cli

2)关闭Redis

shutdown

在 shell 交互界面输入 shutdown 命令就可以关闭 Redis 实例,后面有一个可选参数,nosave 就是不将内存中的数据持久化,save 就是将内存中的数据持久化。shutdown 关闭方式是比较优雅的关闭方式,建议使用这种关闭方式

· 方式二:kill 进程号关闭

1)查看Redis进程号

ps -ef | grep redis

2)杀掉Redis进程

kill 19317

使用 kill方式关闭 Redis 实例服务,需要注意一个地方,那就是需要把 pid 文件删掉,pid文件存放的位置我们在 redis.conf 里配置的 pidfile /var/run/redis_6379.pid,我们需要到 /var/run 目录下把 redis_6379.pid 删掉,这样下一次才能正常重启 Redis 服务。

上面两种方式都可以关闭 Redis 服务,随便选一种都行,但是切记不要使用 Kill 9 方式关闭 Redis 进程,这样 Redis 不会进行持久化操作,除此之外,还会造成缓冲区等资源不能优雅关闭,极端情况下会造成 AOF 和复制丢失数据的情况

4.设置Redis开机自启动

5.Redis进程绑定到指定的CPU

1)查看Redis进程

ps -ef | grep redis

2)显示进程运行的CPU

taskset -p 19317

Redis集群部署详解(非常详细)-mikechen

3)查看本服务器CPU数量

lscpu

Redis集群部署详解(非常详细)-mikechen

4)指定进程运行在某个特定的CPU上(将7001节点的Redis绑定到CPU2上)

taskset -pc 1 23197

Redis集群部署详解(非常详细)-mikechen

显示结果:

pid 23197’s current affinity list: 0-3

pid 23197’s new affinity list: 1

* 注:0-3表示一共4个CPU,1表示CPU将只会运行在第2个CPU上(从0开始计数)

5)进程启动时指定CPU

taskset -c 1 ./redis-server ../redis-cluster/7001/redis.conf

taskset -c 1 ./redis-server ../redis-cluster/8001/redis.conf

taskset -c 2 ./redis-server ../redis-cluster/7002/redis.conf

taskset -c 2 ./redis-server ../redis-cluster/8002/redis.conf

taskset -c 3 ./redis-server ../redis-cluster/7003/redis.conf

taskset -c 3 ./redis-server ../redis-cluster/8003/redis.conf

Redis集群部署详解(非常详细)-mikechen

五、常见问题及解决办法

1.使用./redis-cli进入shell时报错Could not connect to Redis at 127.0.0.1:6379: Connection refused

【解决办法】

1)编辑redis配置文件redis.conf 并修改 daemonize no(第128行) 为 daemonize yes ,这样就可以默认启动就后台运行

2)重启redis服务

redis-server /etc/redis.conf

* 注:开启客户端要确保服务端启动

2.外部无法访问redis

【解决办法】

1)编辑redis配置文件redis.conf 并修改 bind 127.0.0.1 为bind 0.0.0.0(代表不做限制)

Redis集群部署详解(非常详细)-mikechen

2)重启redis服务

redis-server /etc/redis.conf

 

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法