Redis的安装及集群配置

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。本文主要介绍Redis单机安装及集群配置。

官方下载地址

Redis的安装

Redis是c语言开发的,安装需要c语言的编译环境,如果没有gcc需要在线安装: yum install gcc-c++

安装步骤:

  • 第一步:Redis的源码包上传到Linux

  • 第二步:解压缩到指定文件夹

    tar -xvf redis-5.0.0.tar.gz -C /usr/local

  • 第三步:进入redis源码目录,编译

    make

  • 第四步:安装:

    make install PREFIX=/usr/local/redis

    PREFIX参数指定redis的安装目录,一般软件安装到/usr目录下

Redis的启动:

  • 前端启动:在redis的安装目录下直接启动redis-server [root@localhost bin]# ./redis-server
  • 后台启动:
1
2
3
把 /usr/local/redis-5.0.0/redis.conf 复制到 /usr/local/redis/bin 目录下 cp redis.conf /usr/local/redis/bin/
修改 redis.conf 文件 设置 daemonize yes
启动时添加配置文件 ./redis-server redis.conf
  • 关闭:[root@localhost bin]# ./redis-cli shutdown

Redis-cli连接

  • 默认连接localhost运行在6379端口的redis服务 [root@localhost bin]# ./redis-cli

  • 自定义连接端口 [root@localhost bin]# ./redis-cli -h 192.168.25.153 -p 6379

    -h:连接的服务器的地址 -p:服务的端口号

  • 远程连接:注释掉 redis.confbind 127.0.0.1 设置 protected-mode no 重启redis

  • 设置密码:配置文件中添加 requirepass 你的密码 重启redis

Redis-cluster集群搭建

由于容错机制,Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机,因此,Redis集群至少需要6台服务器。

由于个人只有一台服务器,只有搭建伪分布式:一台服务器运行6个redis实例,需要修改Redis的端口号7001-7006

  • 集群搭建环境
  1. 使用Ruby脚本搭建集群,需要Ruby的运行环境,安装Ruby

    yum install ruby

    yum install rubygems

  2. 安装Ruby脚本运行使用的包

    https://rubygems.global.ssl.fastly.net/gems/redis-4.0.0.gem

    上传所需Ruby库文件redis-4.0.0.gem 安装执行: [root@localhost ~]# gem install redis-4.0.0.gem

    该步骤会报错,Centos默认支持ruby到2.0.0,gem 安装redis需要最低是2.2.2。所以需要升级Ruby版本。

    1. 安装rvm

      1
      2
      3
      gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

      \curl -sSL https://get.rvm.io | bash -s stable
    2. source /usr/local/rvm/scripts/rvm

    3. 查看rvm库中已知的ruby版本

      1
      rvm list known
    4. 安装一个ruby版本

      1
      rvm install 2.5
    5. .使用一个ruby版本

      1
      rvm use  2.5.0
    6. 卸载一个已知版本

      1
      rvm remove 2.0.0
    7. 查看版本

      1
      ruby  --version
    8. 再安装redis就可以了

      1
      gem install redis-4.0.0.gem
  3. 创建 redis-cluster 文件夹,拷贝6个Redis实例到该文件夹中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    mkdir -p /usr/local/redis-cluster
    mkdir -p /usr/local/redis-cluster/redis01
    mkdir -p /usr/local/redis-cluster/redis02
    mkdir -p /usr/local/redis-cluster/redis03
    mkdir -p /usr/local/redis-cluster/redis04
    mkdir -p /usr/local/redis-cluster/redis05
    mkdir -p /usr/local/redis-cluster/redis06
    cp -rf /usr/local/redis/* /usr/local/redis-cluster/redis01/
    cp -rf /usr/local/redis/* /usr/local/redis-cluster/redis02/
    cp -rf /usr/local/redis/* /usr/local/redis-cluster/redis03/
    cp -rf /usr/local/redis/* /usr/local/redis-cluster/redis04/
    cp -rf /usr/local/redis/* /usr/local/redis-cluster/redis05/
    cp -rf /usr/local/redis/* /usr/local/redis-cluster/redis06/
  • 搭建Redis集群
  1. 每个实例要运行在不同的端口。需要修改redis.conf配置文件:把 cluster-enabled yes 前的注释去掉,并且分别修改端口 port 7001~7006

    1
    2
    3
    port 7001
    daemonize yes
    cluster-enabled yes
  2. 创建开启集群的脚本:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [root@localhost redis-cluster]# vim start-all.sh
    cd redis01
    ./bin/redis-server redis.conf
    cd ..
    cd redis02
    ./bin/redis-server redis.conf
    cd ..
    cd redis03
    ./bin/redis-server redis.conf
    cd ..
    cd redis04
    ./bin/redis-server redis.conf
    cd ..
    cd redis05
    ./bin/redis-server redis.conf
    cd ..
    cd redis06
    ./bin/redis-server redis.conf
    cd ..
    //修改脚本文件可执行权限
    [root@localhost redis-cluster]# chmod u+x start-all.sh
  3. 执行脚本启动每个redis实例

    1
    [root@localhost redis-cluster]# ./start-all.sh

    如果执行出现No such file or directory错误,解决方法如下:

    • 用vim打开该sh文件

      vim start-all.sh

    • 输入

      :set ff

    • 回车,显示fileformat=dos,重新设置下文件格式

      :set ff=unix

    • 保存退出

      :wq

  4. 使用ruby脚本搭建集群

    1
    2
    3
    redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
    #老版本使用以下命令
    ./redis-trib.rb create --replicas 1 123.207.121.135:7001 123.207.121.135:7002 123.207.121.135:7003 123.207.121.135:7004 123.207.121.135:7005 123.207.121.135:7006
  5. 连接集群

    [root@localhost redis-cluster]# redis01/bin/redis-cli -p 7001 -c

  6. 关闭集群

    杀进程:ps -aux|grep redis kill -9 进程ID

踩坑解决问题

  • 重启服务器后重新启动ruby脚本报错
1
[ERR] Node 123.207.121.135:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

由于非正常关闭集群,需删除每个节点中的数据文件aof、rdb、nodes.conf,实在不行就只有重装一遍…

  • 强制停止redis快照导致,redis运行用户没有权限写rdb文件或者磁盘空间满了
1
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

解决办法:修改配置文件 stop-writes-on-bgsave-error no

参考了解

Linux Redis集群搭建与集群客户端实现

redis3.0.0 集群安装详细步骤