Redis集群

集群准备

  • 下载并解压Resis:wget http://download.redis.io/releases/redis-4.0.0.tar.gz
  • 进入Redis目录下make && make install 可能会报错
/bin/sh: cc: 未找到命令
make[1]: *** [adlist.o] 错误 127

原因是没有gcc,安装gcc就好yum install gcc
建议下版本高一点的

  • /opt/redis-4.0.0/src/redis-trib.rb复制到/usr/local/bin
  • /opt/redis-4.0.0/目录下创建redis_cluster
  • /opt/redis-4.0.0/redis_cluster下创建7001,7002,7003节点目录
  • 拷贝/opt/redis-4.0.0/redis.conf到节点目录
[root@localhost redis-4.0.0]# cp redis.conf redis_cluster/7000
[root@localhost redis-4.0.0]# cp redis.conf redis_cluster/7001
[root@localhost redis-4.0.0]# cp redis.conf redis_cluster/7002
  • 分别修改这3个目录下的redis.conf配置文件
port  7000                                        //端口7000,7002,7003        
bind 本机ip                                       //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize    yes                               //redis后台运行
pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7001,7002
cluster-enabled  yes                           //开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf   //集群的配置  配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  15000                //请求超时  默认15秒,可自行设置
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志
  • 在例外一台机器上进行上步操作,端口为7003,7004,7005
  • 启动2个服务器的redis
redis-server /opt/redis-4.0.0/redis_cluster/7000/redis.conf
redis-server /opt/redis-4.0.0/redis_cluster/7001/redis.conf
redis-server /opt/redis-4.0.0/redis_cluster/7002/redis.conf
redis-server /opt/redis-4.0.0/redis_cluster/7003/redis.conf
redis-server /opt/redis-4.0.0/redis_cluster/7004/redis.conf
redis-server /opt/redis-4.0.0/redis_cluster/7005/redis.conf
  • 查看2台服务器的Redis是否开启ps -ef| grep redis

集群开始

  • 这里使用到/opt/redis-x.x.x/src/redis-trib.rb,但是redis-trib.rb是使用ruby写的,这里还要下载ruby工具: yum -y install ruby ruby-devel rubygems rpm-build
  • 使用gem安装redis接口gem install redis
  • 可能会遇到的问题
ERROR:  Error installing redis:
        redis requires Ruby version >= 2.2.2.
  • 解决方案
1.安装curl

    sudo yum install curl

    2. 安装RVM

    curl -L get.rvm.io | bash -s stable

    3.

    source /usr/local/rvm/scripts/rvm

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

    rvm list known

    5. 安装一个ruby版本

    rvm install 2.3.3

    6. 使用一个ruby版本

    rvm use 2.3.3

    7. 设置默认版本

    rvm remove 2.0.0

    8. 卸载一个已知版本

    ruby --version

    9. 再安装redis就可以了

    gem install redis
  • create (确保每个redis都是启动的)
/opt/redis-4.0.0/src/redis-trib.rb create --replicas 1 192.168.115.132:7000  192.168.115.132:7001  192.168.115.132:7002 192.168.115.130:7003 192.168.115.130:7004 192.168.115.130:7005
  • 注意补充
    –replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)防火墙一定要开放监听的端口,否则会创建失败
  • 可能出现问题
[root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.115.132:7000  192.168.115.132:7001  192.168.115.132:7002 192.168.115.130:7003 192.168.115.130:70
>>> Creating cluster
[ERR] Sorry, can't connect to node 192.168.115.130:7003

解决方案:另外一服务器机子7003端口没有对外开放
firewall-cmd --zone=public --add-port=7003/tcp --permanent
firewall-cmd --zone=public --add-port=7004/tcp --permanent
firewall-cmd --zone=public --add-port=7005/tcp --permanent
firewall-cmd --reload
最后你会发现终究OK了
  • 这可能是最后一个坑
    集群一直处于等待状态
Sending CLUSTER MEET messages to join the cluster
  Waiting for the cluster to join...........

在/etc/profil/iptables中添加开放端口

  • 如果上面失败,清楚每个Redis中的缓存文件,例如我的在:
    /opt/redis-4.0.0/redis_cluster/7000目录下的 *.aof nodes* 等文件:rm -rf *.aof nodes*

集群开启与关闭

Redis集群没有重启或者关闭操作,解决方案,清楚数据重新集群

  • rm -rf **/*.aof **/*.rdb **/nodes*
/opt/redis-4.0.0/src/redis-trib.rb create --replicas 1 192.168.115.132:7000  
192.168.115.132:7001  
192.168.115.132:7002 
192.168.115.130:7003 
192.168.115.130:7004 
192.168.115.130:7005