Redis 常用集群中,常用的几种集群方案有:主从集群、哨兵集群、分片集群,不同的集群对应着不同的场景,并且各种集群也都有不同的优劣,本篇将以 redis 分片集群为切入点。
主从和哨兵虽然解决了高可用、高并发读的问题,但是依然有两个问题没有解决:
使用分片集群可以解决上述问题。
分片集群需要的节点数量较多,一个最小的分片集群至少需要6个节点(3主,3从)。要保证集群的高可用,需要每个主节点都有至少一个从节点,也就是备份节点,所以Redis集群至少需要6台服务器。如图:
通过分片集群,Redis 解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,而且也具有故障迁移(主从切换)的功能,实现了较为完善的高可用方案。
建集群的第一件事情我们需要一些运行在集群模式的 Redis 实例。这意味这集群并不是由一些普通的 Redis 实例组成的,集群模式需要通过配置启用,开启集群模式后的Redis实例便可以使用集群特有的命令和特性了。
下面是一个最少选项的集群的配置文件:
port 7000
# 打开集群模式
cluster-enabled yes
# 设定节点配置文件名,保存节点配置文件的路径, 默认值为 nodes.conf;节点配置文件无须人为修改,它由 Redis 集群在启动时创建,并在有需要时自动进行更新。
cluster-config-file nodes.conf
# 设定节点心跳失联时间,超过该时间(毫秒),集群自动进行主从切换。
cluster-node-timeout 5000
# 开启 AOF
appendonly yes
搭建分片集群有两种方式,分别为:手动搭建和自动搭建两种。
参考上述配置,创建不同实例的 redis.conf 文件,并修改每个实例配置文件中的端口号。如图:
在当前目录下一键启动所有服务
printf '%s\n' 30001 30002 30003 30004 30005 30006 | xargs -I{} -t redis-server /etc/redis/cluster/{}.conf
一键关闭所有服务
printf '%s\n' 30001 30002 30003 30004 30005 30006 | xargs -I{} -t redis-cli -p {} shutdown
关于脚本使用说明请参考 xargs 命令。
通过ps查看状态
这个时候虽然所有节点启动了,但是目前每个服务之间都是独立的,没有任何关联,还不能称之为集群。
需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli 中。
Redis5.0 之前是通过使用 Redis 集群命令行工具 redis-trib 来实现,在此需要安装 ruby 环境。
# 安装依赖
yum -y install zlib ruby rubygems
gem install redis
然后通过命令来管理集群:
./redis-trib.rb create --replicas 1 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006
redis-trib 文件通过向实例发送特殊命令来完成创建新集群,检查集群, 或者对集群进行重新分片(reshared)等工作
选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
Redis5.0以后就不需要安装 ruby 环境,Redis 源码的 src 文件夹中已经包含了 redis-trib 文件。
./redis-trib.rb create --replicas 1 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006
或者还可以使用
./redis-cli --cluster create --cluster-replicas 1 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006
命令说明:
可以通过 redis-cli --cluster help 命令进行集群命令的查看。
执行以上命令后会出现如图:
这里输入yes,则集群开始创建:
查看集群状态:
注意:这里一定要有 -c ,表示连接的是集群。
还可以使用以下命令:
redis-cli -p 30001 cluster nodes
通过这个命令,可以清楚的看到集群中各个实例节点的主从状态,实例ID,槽位区间等信息。详情请参考文章末。
以上是手动创建集群的方法,还可以使用 create-cluster 脚本启动节点,创建集群,停止集群等操作,文件在 Redis 安装目录下的 utils/create-cluster/ 中。
它是一个简单的 bash 脚本,可以根据需要修改端口、集群实例等,默认是 6 节点集群。只需键入以下命令:
# 启动实例
create-cluster start
# 创建集群
create-cluster create
# 停止集群
create-cluster stop
同时还提供了其他命令,在此就不一一说明了,如图:
了解更多请阅读当前目录下的 README 文件以获取有关如何运行脚本的更多信息。
使用以下命令进入
redis-cli -c -p 30001
注意:这里一定要有 -c ,表示连接的是集群。
请求根据 key 哈希计算重定向到对应的节点上,如图:
# 查看状态
info replication
# 查看当前集群信息
cluster info
# 查看集群里有多少个节点
cluster nodes