redis-cluster 集群搭建(踩坑)

redis cluster 集群搭建(踩坑)

我是启动了两台centos7的虚拟机,当然也可以在一台完成

1. 在两台服务器上源码安装redis
    cd /usr/local
    mkdir redis
    wget http://download.redis.io/releases/redis-5.0.5.tar.gz(我使用的是最新版的)
    tar xzf redis-5.0.5.tar.gz
    cd redis-5.0.5
    make
2. 在两台服务器上启动redis服务
    cd /usr/local
    mkdir redis_cluster
    cd redis_cluster
    mkdir 7000 7001 7002(在另外一台服务器上创建7003 7004 7005)
    // 复制配置文件到每一个目录
    cp /usr/local/redis/redis-5.0.5/redis.conf /usr/local/redis_cluster/7000
    // 修改配置文件
    vim /usr/local/redis_cluster/7000/redis.conf
    
    修改内容如下
        daemonize yes                           // 后台运行
        pidfile   /var/run/redis_7000.pid
        port 7000                               // 运行端口号
        cluster-enabled  yes                    // 开启集群  把注释#去掉
        cluster-config-file  nodes_7000.conf    // 集群的配置  配置文件首次启动自动生成
        cluster-node-timeout  5000              // 请求超时,设置5秒即可
        appendonly  yes                         // aof日志开启,有需要就开启,它会每次写操作都记录一条日志
        logfile redis_7000.log
        bind 192.168.1.112                      // 绑定当前服务器的IP,否则的话在集群通信的时候会有问题(ip以自己的情况填写)
        dbfilename  dump_7000.rdb
        appendfilename "appendonly_7000.aof"
3. 修改完成后,启动redis试一下
    cd /usr/local/redis_cluster/7000
    /usr/local/redis/redis-5.0.5/src/redis-server redis.conf
    ps -ef | grep redis // 查看redis是否启动,端口是否正确
4. 复制7000端口的配置文件到7001、7002,并修改配置文件
    cd /usr/local/redis_cluster
    cp 7000/redis.conf 7001/
    vim 7001/redis.conf
    // 替换7000为7001
    :%s/7000/7001g
5. 编写启动,停止redis的脚本
    cd /usr/local/redis_cluster
    // 启动脚本
    vim start-cluster.sh
    // 脚本内容
        #!/bin/bash
        cd /usr/local/redis_cluster
        cd ./7000
        /usr/local/redis/redis-5.0.5/src/redis-server redis.conf
        cd ../7001
        /usr/local/redis/redis-5.0.5/src/redis-server redis.conf
        cd ../7002
        /usr/local/redis/redis-5.0.5/src/redis-server redis.conf
        echo "success"
    // 停止脚本
    vim stop-cluster.sh
        #!/bin/bash
        /usr/local/redis/redis-5.0.5/src/redis-cli -c -h 192.168.1.112 -p 7000 shutdown
        /usr/local/redis/redis-5.0.5/src/redis-cli -c -h 192.168.1.112 -p 7001 shutdown
        /usr/local/redis/redis-5.0.5/src/redis-cli -c -h 192.168.1.112 -p 7002 shutdown
        echo "success"
    // 给脚本执行权限
    chmod a+x start-cluster.sh stop-cluster.sh
6. 以上步骤,在另一台服务器(192.168.1.113)中执行,端口号:7003,7004,7005
7. 执行启动脚本,启动两台服务器的6个redis服务
8. 启动集群
    /usr/local/redis/redis-5.0.5/src/redis-cli --cluster create 192.168.1.112:7000 192.168.1.112:7001 192.168.1.112:7002 192.168.1.113:7003 192.168.1.113:7004 192.168.1.113:7005 --cluster-replicas 1
    /**
        这个命令在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
        之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave redis 会打印出一份预想中的配置给你看,
        如果你觉得没问题的话, 就可以输入 yes , redis 就会将这份配置应用到集群当中,让各个节点开始互相通讯
    **/
    之后会输出集群中各个节点的槽位信息
    /**
        >>> Nodes configuration updated
        >>> Assign a different config epoch to each node
        >>> Sending CLUSTER MEET messages to join the cluster
        Waiting for the cluster to join
        ....
        >>> Performing Cluster Check (using node 192.168.1.113:7000)
        M: ca0a0c2f50da44773ab69a75db5c83ae40312377 192.168.1.113:7000
           slots:[0-5460] (5461 slots) master
           1 additional replica(s)
        S: 5f8d498ff8696fec391fdf77875d980016cac5ee 192.168.1.112:7005
           slots: (0 slots) slave
           replicates ca0a0c2f50da44773ab69a75db5c83ae40312377
        M: ddaf494812a08a49761e12f158980039116c867d 192.168.1.113:7001
           slots:[10923-16383] (5461 slots) master
           1 additional replica(s)
        M: a07f139436dca2c8131fdac39403bcc7753138ef 192.168.1.112:7003
           slots:[5461-10922] (5462 slots) master
           1 additional replica(s)
        S: 64dad85ba0bb0800e5bd6533f8eacc7988c3aca6 192.168.1.112:7004
           slots: (0 slots) slave
           replicates ddaf494812a08a49761e12f158980039116c867d
        S: 1f43b2b8f4fb730f5cee5ac598862ade42ce257f 192.168.1.113:7002
           slots: (0 slots) slave
           replicates a07f139436dca2c8131fdac39403bcc7753138ef
        [OK] All nodes agree about slots configuration.
        >>> Check for open slots...
        >>> Check slots coverage...
        [OK] All 16384 slots covered.
    **/
9. 使用集群
    /usr/local/redis/redis-5.0.5/src/redis-cli -c -h 192.168.1.112 -p 7000
    redis 192.168.1.112:7000> set foo bar
    -> Redirected to slot [12182] located at 192.168.1.112:7002
    OK
    ...
    ...
至此,一切顺利的话,redis集群就可以使用了

遇到的坑

  • 网上很多教程,都使用ruby脚本redis-trib.rb执行集群操作,需要安装ruby环境,gem工具等,但是新版redis-cli中已经集成了集群操作
    /usr/local/redis/redis-5.0.5/src/redis-trib.rb create --replicas 1 192.168.1.112:7000 192.168.1.112:7001 192.168.1.112:7002 192.168.1.113:7003 192.168.1.113:7004 192.168.1.113:7005
    /**
        WARNING: redis-trib.rb is not longer available!
        You should use redis-cli instead.
        
        All commands and features belonging to redis-trib.rb have been moved
        to redis-cli.
        In order to use them you should call redis-cli with the --cluster
        option followed by the subcommand name, arguments and options.
        
        Use the following syntax:
        redis-cli --cluster SUBCOMMAND [ARGUMENTS] [OPTIONS]
        
        Example:
        redis-cli --cluster create 192.168.1.113:7000 192.168.1.113:7001 192.168.1.113:7002 192.168.1.112:7003 192.168.1.112:7004 192.168.1.112:7005 --cluster-replicas 1
        
        To get help about all subcommands, type:
        redis-cli --cluster help
    **/
  • 配置文件中,bind ip,一定要绑定本机的ip地址,如果是127.0.0.1,跨机可能会无法meet
  • 两台虚拟机中的redis版本要一致,我就是因为一个5版本,一个3版本,导致无法都meet不了
  • 如果使用集群的时候报错
    (error) MOVED 11469 192.168.163.249:7002
    // 应该是你没有启动集群模式(即缺少了那个"-c"): 
    redis-cli -c -h yourhost -p yourpost
  • redis集群创建的时候,一直卡在Waiting for the cluster to join …上、一直读进度条
    机器没有开放redis集群总线端口。
    集群总线端口是redis客户端连接的端口+10000。
    netstat -lntp
        Active Internet connections (only servers)
        Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
        tcp        0      0 192.168.1.113:17000     0.0.0.0:*               LISTEN      21078/redis-server
        tcp        0      0 192.168.1.113:17001     0.0.0.0:*               LISTEN      21080/redis-server
        tcp        0      0 192.168.1.113:17002     0.0.0.0:*               LISTEN      21088/redis-server
        tcp        0      0 192.168.1.113:7000      0.0.0.0:*               LISTEN      21078/redis-server
        tcp        0      0 192.168.1.113:7001      0.0.0.0:*               LISTEN      21080/redis-server
        tcp        0      0 192.168.1.113:7002      0.0.0.0:*               LISTEN      21088/redis-server
    
    // 直接关闭防火墙解决问题
    systemctl stop firewalld.service
    systemctl disable firewalld

    
  • 跨机复制文件
    scp -r /usr/local/redis_cluster 192.168.1.113:/usr/local/
    然后输入192.168.1.113的密码就可以了

你可能感兴趣的:(redis)