Redis集群
Redis Cluster 即 Redis 集群,是 Redis 官方在 3.0 版本推出的一套分布式存储方案。
Redis 集群是一个分布式系统,由多个节点组成,每个节点都保存着相同的数据副本,通过协调器来管理数据的分片和故障转移等操作。
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
* 启动后,会有如下提示:
* 通过ps命令查看确认各个节点是否运行
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 版本是 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集群搭建完毕!
四、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
3)查看本服务器CPU数量
lscpu
4)指定进程运行在某个特定的CPU上(将7001节点的Redis绑定到CPU2上)
taskset -pc 1 23197
显示结果:
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
五、常见问题及解决办法
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(代表不做限制)
2)重启redis服务
redis-server /etc/redis.conf
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获知最新一线技术干货!
