Redis 集群简介

Redis支持的集群方式有3种:

  1. 主从复制(Master-Slave Replication);
  2. 哨兵模式;
  3. Redis Cluster;

今天介绍的是其中的第3种模式。Redis Cluster 即 Redis 集群,是 Redis 官方在 3.0 版本推出的一套分布式存储方案。该方案完全去中心化,由多个主从节点组成,所有节点彼此互联。Redis 客户端可以直接连接任何一节点获取集群中的键值对,不需要中间代理,如果该节点不存在用户所指定的键值,其内部会自动把客户端重定向到键值所在的节点。同其他分布式存储系统一样,该方案主要具备以下两个功能:

  • 数据分区
    Redis Cluster 会将用户数据分散保存至各个节点中,突破单机 Redis 内存最大存储容量。
  • 数据冗余
    由于 Redis Cluster 中的每个节点都是由主从结构组成,所以就天然继承了主从数据复制和故障恢复的特性。

源码编译安装 Redis

cd /usr/local

# 下载 Redis 源码,目前的官方稳定版本是 5.0.6,官网下载地址:https://redis.io/download
wget http://download.redis.io/releases/redis-5.0.6.tar.gz
# 解压源码
tar -zxvf redis-5.0.6.tar.gz

# 编译安装 Redis
cd redis-5.0.6
make && make install

# 如果遇到编译失败,则根据提示安装相应的依赖和编译环境,比如安装 gcc
yum -y install gcc

# 然后清理编译结果并重新编译和安装
make distclean
make && make install

如果编译安装过程中没有出现错误,可执行文件将会在/usr/local/bin目录下。

搭建 Redis 集群

根据 Redis 的官方文档指出(Redis cluster tutorial),要正常使用 Redis Cluster 至少需要3个主节点(master node),而为了保证生产系统的高可用性和数据完整性,还是建议使用至少3主3从的节点来搭建 Redis Cluster。
本文将使用3主节点配置来演示集群的搭建,而且由于环境的限制,所有操作将在单机上操作。

Redis 单主节点配置如下表所示:

节点编号IP地址侦听端口配置文件路径
A127.0.0.17001/usr/local/redis-cluster/7001/redis.conf
B127.0.0.17002/usr/local/redis-cluster/7002/redis.conf
C127.0.0.17003/usr/local/redis-cluster/7003/redis.conf

根据上述规划,可以先通过如下命令创建各个节点启动配置文件的存放目录。

mkdir /usr/local/redis-cluster
cd redis-cluster
mkdir -p 7001 7002 7003

顺序执行如下行命令,进入 Redis 源码包目录并将默认配置文件redis.conf分别复制到配置存放目录中,作为各自节点启动配置文件。

cd /usr/local/redis-5.0.6
cp redis.conf /usr/local/redis-cluster/7001 
cp redis.conf /usr/local/redis-cluster/7002
cp redis.conf /usr/local/redis-cluster/7003 

接下来根据上表中我们的计划修改配置文件中的相关选项:

bind 127.0.0.1                         # 设置当前节点主机地址
port 7001                              # 设置客户端连接监听端口
daemonize yes                          # 以守护进程运行 Redis 实例
pidfile /var/run/redis_7001.pid        # 设置 Redis 实例 pid 文件
cluster-enabled yes                    # 启用集群模式
cluster-node-timeout 15000             # 设置当前节点连接超时毫秒数
cluster-config-file nodes-7001.conf    # 设置当前节点集群配置文件路径

然后是启动配置好的节点:

redis-server /usr/local/redis-cluster/7001/redis.conf
redis-server /usr/local/redis-cluster/7002/redis.conf
redis-server /usr/local/redis-cluster/7003/redis.conf

所有节点正常启动后,我们再来使用redis-cli --cluster create命令搭建 Redis Cluster:

redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003

如果使用主从结构来搭建 Redis Cluster,则需要使用--cluster-replicas X参数来指定每个主节点对应的从节点个数,否则上述命令中的所有节点均为主节点。
以上就本文的所有内容,部分参考了《分布式缓存 Redis 集群搭建》这篇博文。有机会的话还会再写一篇基于 Docker 搭建集群的文章,敬请期待。