第十章、Redis 集群搭建


一、概述

  • Redis3.0之后的版本支持集群

    • 集群管理,cluster xxx
    • 给予配置(nodes-port.conf)的集群管理
    • ASK转向/MOVED转向机制
    • Hot resharding:在线分片
    • slave->master选举,集群容错
    • 节点自动发现

二、redis cluster 集群安装搭建步骤

  • 下载安装包

    wget http://download.redis.io/releases/redis-3.2.1.tar.gz
    tar -zxvf /redis-3.2.1.tar.gz
    #或者管网下载 tar 包,然后上传至服务器进行解包。
  • 编译并进行安装

    #因为 redis 是用 c 实现的,所有要进行编译。
    cd redis-3.2.1 	 	
    make && make install
    #相当于:
    - make
    - make install
  • 安装 ruby 环境

    redis 集群是用的 ruby 脚本,所以要想执行该脚本,需要 ruby 环境.。对应 redis 的源码 src 目录下的redis-trib.rb,redis-trib.rb 是redis 官方推出的管理 redis 集群的工具,是基于 redis 提供的集群命令封装成简单、便捷、实用的操作工具。所以为了方便管理集群,可安装一下 ruby 环境。

    yum install ruby 
    yum install rubygems
    #或者执行
    yum -y install ruby ruby-devel rubygems rpm-build
    
    #gem 命令安装 redis 接口,gem 是 ruby 的一个工具包
    gem install redis
    
    #安装完成之后运行一下 redis-trib.rb 命令,出现 redis-trib 命令的使用参数就说明 ruby 环境是可靠的
    /usr/local/redis-3.2.1/src/redis-trib.rb
  • 搭建集群 (redis-cluster)

    #1、创建 redis-cluster 目录以及 redis 节点实例文件目录
    cd /usr/local
    mkdir redis-cluster
    cd /usr/local/redis-cluster
    mkdir redis-8001 redis-8002 redis-8003 redis-8004 redis-8005 redis-8006

    #2、复制 redis.conf 到 redis 节点目录下
    cd /usr/local/redis-3.2.1
    cp redis.conf /usr/local/redis-cluster/redis-8001
    cp redis.conf /usr/local/redis-cluster/redis-8002
    cp redis.conf /usr/local/redis-cluster/redis-8003
    ...

    #3、分别修改节点下 redis-conf 文件,由于在一台机器(192.16819.129 伪分布式集群)上,因此每个实例应该有不同的端口。同时,每个实例显然会有自己的存放数据的地方。

    #端口
    port 8001

    #注释 bind ip
    #开启 AOF 日志模式
    appendonly yes

    #开启后台模式
    daemonize yes
    #Redis 以后台模式运行时默认会把 pid 文件放在 /var/run/redis_6379.pid
    pidfile /usr/local/redis-3.0.0/pid/redis_8001.pid

    #RDB 持久化 dump 备份文件目录
    dir /usr/local/redis-cluster/redis-8001

    #4、开启集群配置
    cluster-config-file nodes-8001.conf
    cluster-enabled yes
    cluster-node-timeout 15000

    #5、编写 shell 脚本批量启动 startall.sh 与关闭 shutdown.sh redis 实例
    startall.sh
    /usr/local/redis-3.0.0/src/redis-server /usr/local/redis-cluster/redis-8001/redis.conf
    /usr/local/redis-3.0.0/src/redis-server /usr/local/redis-cluster/redis-8002/redis.conf
    /usr/local/redis-3.0.0/src/redis-server /usr/local/redis-cluster/redis-8003/redis.conf
    /usr/local/redis-3.0.0/src/redis-server /usr/local/redis-cluster/redis-8004/redis.conf
    /usr/local/redis-3.0.0/src/redis-server /usr/local/redis-cluster/redis-8005/redis.conf
    /usr/local/redis-3.0.0/src/redis-server /usr/local/redis-cluster/redis-8006/redis.conf

    chmod +x startall.sh 修改 startall.sh 文件的执行权限
    运行 startall.sh 文件启动 redis:$ /usr/local/redis-cluster/startall.sh
    ps -ef | grep redis 查看 redis 是否启动成功!

    shutdown.sh
    cd /usr/local/redis-3.0.0/src
    ./redis-cli -h 47.95.38.201 -p 8001 shutdown
    ./redis-cli -h 47.95.38.201 -p 8002 shutdown
    ./redis-cli -h 47.95.38.201 -p 8003 shutdown
    ./redis-cli -h 47.95.38.201 -p 8004 shutdown
    ./redis-cli -h 47.95.38.201 -p 8005 shutdown
    ./redis-cli -h 47.95.38.201 -p 8006 shutdown

    chmod +x shutdown.sh 修改 shutdown.sh 文件的执行权限
    运行 shutdown.sh 文件关闭 redis:$ /usr/local/redis-cluster/shutdown.sh

    #6、使用 ruby 脚本创建集群,建立集群结点间得主从关系
    ./redis-trib.rb create --replicas 1 47.95.38.201:8001 47.95.38.201:8002 47.95.38.201:8003 47.95.38.201:8004 47.95.38.201:8005 47.95.38.201:8006

    问题 :Redis 集群一直 Waiting for the cluster to join....
    redis 集群不仅需要开通 redis 客户端连接的端口,而且需要开通集群总线端口,集群总线端口为 redis 客户端连接的端口 + 10000。如redis端口为 6379 则集群总线端口为 16379 故,所有服务器的点需要开通redis 的客户端连接端口和集群总线端口。

    问题:创建 redis 集群报错:ERR Slot 0 is already busy (Redis::CommandError)
    slot 插槽被占用了、这是因为 搭建集群前时,以前 redis 的旧数据和配置信息没有清理干净。
    用 redis-cli 登录到每个节点执行 flushall 和 cluster reset 就可以了;或者清除掉每个节点下的 rdb和node-conf文件。

    #运行下方命令检查是否搭建成功
    cd /usr/local/redis-cluster
    ./redis-trib.rb check 47.95.38.201:8001
    查看集群主从节点状态
    集群初步搭建成功!

  • 集群搭建参考教程

Redis集群搭建教程
Redis集群模式
redis集群搭建及注意事项

原文地址:https://www.cnblogs.com/pengguozhen/p/13397773.html