Redis集群及其中间遇到的坑

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

你可能感兴趣的:(技术之路)