• Redis 3.0.2集群搭建以及相关问题汇总


    Redis3 正式支持了 cluster,是为了解决构建redis集群时的诸多不便

    (1)像操作单个redis一样操作key,不用操心key在哪个节点上
    (2)在线动态添加、删除redis节点,不用停止服务
    (3)根据节点性能,动态分配不同数量的key到不同redis节点

    (4)每个节点都配有slave,并自动监测和切换

    Redis3 cluster 中增加了一个重要概念:

    hash slot(哈希槽),共有16384个slot
    key不是直接放入redis中了,而是放入slot中,再把slot放入redis中

    根据keyhash值计算其所在的slot,再根据slot和redis节点的对应关系,找到此slot所在的节点,然后到这个节点对key进行操作

    例如现有3个redis节点,每个节点各负责一半数量的slot,16384/3 = 5461个
    现在想添加一个redis节点,可以从 节点1、节点2、节点3 中各拿出一部分的slot,移到新节点
    每个redis节点中的slot数量可以不一致,根据节点性能适当分配
     
    进入集群需要用redis -c -p 7000    -c是enable cluster   p指定进入端口
     
    搭建集群遇到的问题:
    由于教程里面给出的集群的地址是127.0.0.1:7000、......,在java程序访问的时候是无法获取节点信息的,所以我需要重新搭建集群,然后停掉所有节点,重新搭建的时候,报出了如下错误,可知是因为有些配置文件以及数据没有删除。将其全部删除干净即可。
    [ERR] Node 172.168.63.202:7001 is not empty.
    Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    find / -name dump.rdb 
    rm -f /usr/redis/cluster/7002/redis7002/src/dump.rdb 
    rm -f /usr/redis/cluster/7004/redis7004/src/dump.rdb
    rm -f /usr/redis/cluster/7005/redis7005/src/dump.rdb
    rm -f /usr/redis/cluster/7001/redis7001/src/dump.rdb
    rm -f /usr/redis/cluster/7000/redis7000/src/dump.rdb
    rm -f /usr/redis/cluster/7003/redis7003/src/dump.rdb
    rm -f /usr/redis/master/redis-3.0.7/src/dump.rdb
    find / -name dump.rdb
     
    find / -name appendonly.aof
    rm -f /usr/redis/cluster/7002/redis7002/src/appendonly.aof
    rm -f /usr/redis/cluster/7004/redis7004/src/appendonly.aof
    rm -f /usr/redis/cluster/7005/redis7005/src/appendonly.aof
    rm -f /usr/redis/cluster/7001/redis7001/src/appendonly.aof
    rm -f /usr/redis/cluster/7000/redis7000/src/appendonly.aof
    rm -f /usr/redis/cluster/7003/redis7003/src/appendonly.aof
    find / -name appendonly.aof
     
    find / -name nodes.conf
    rm -f /usr/redis/cluster/7002/redis7002/src/nodes.conf
    rm -f /usr/redis/cluster/7004/redis7004/src/nodes.conf
    rm -f /usr/redis/cluster/7005/redis7005/src/nodes.conf
    rm -f /usr/redis/cluster/7001/redis7001/src/nodes.conf
    rm -f /usr/redis/cluster/7000/redis7000/src/nodes.conf
    rm -f /usr/redis/cluster/7003/redis7003/src/nodes.conf
    find / -name nodes.conf
     
    #创建集群
    #!/bin/sh
    cd /usr/redis/cluster/7000/redis7000/src/
    ./redis-server ../redis.conf
    cd /usr/redis/cluster/7001/redis7001/src/
    ./redis-server ../redis.conf
    cd /usr/redis/cluster/7002/redis7002/src/
    ./redis-server ../redis.conf
    cd /usr/redis/cluster/7003/redis7003/src/
    ./redis-server ../redis.conf
    cd /usr/redis/cluster/7004/redis7004/src/
    ./redis-server ../redis.conf
    cd /usr/redis/cluster/7005/redis7005/src/
    ./redis-server ../redis.conf
    cd /usr/redis/cluster/7000/redis7000/src/
    ./redis-trib.rb create --replicas 1 192.168.10.102:7000 192.168.10.102:7001 192.168.10.102:7002 192.168.10.102:7003 192.168.10.102:7004 192.168.10.102:7005
     

    #集群启动关闭:
    #!/bin/sh
    /usr/redis/cluster/7000/redis7000/src/redis-cli -p 7000 shutdown
    /usr/redis/cluster/7001/redis7001/src/redis-cli -p 7001 shutdown
    /usr/redis/cluster/7002/redis7002/src/redis-cli -p 7002 shutdown
    /usr/redis/cluster/7003/redis7003/src/redis-cli -p 7003 shutdown
    /usr/redis/cluster/7004/redis7004/src/redis-cli -p 7004 shutdown
    /usr/redis/cluster/7005/redis7005/src/redis-cli -p 7005 shutdown
    if [ $(ps -ef | grep -c redis | grep -cv grep) -gt 1 ]
    then echo "集群关机失败,请检查节点"
    else
     echo "集群全部关闭,ok"
    fi
     

    //集群搭建教程 http://blog.csdn.net/yubinpll9110/article/details/51373890

     这里创建6个redis节点,其中三个为主节点,三个为从节点。

        redis和端口对应关系:

        主服务器

        127.0.0.1:7000

        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

        步骤:
        1,下载redis。官网下载3.0.0版本,之前几的版本不支持集群模式

        下载地址:http://download.redis.io/releases/redis-3.0.0.tar.gz
        2:上传服务器,解压,编译
        tar -zxvf redis-3.0.0-rc2.tar.gz
        mv redis-3.0.0-rc2.tar.gz redis3.0
        cd /usr/local/redis3.0
        make & make install


        3:创建集群需要的目录并拷贝redis
        mkdir -p /usr/local/cluster
        mkdir -p /usr/local/cluster/7000
        mkdir -p /usr/local/cluster/7001
        mkdir -p /usr/local/cluster/7002
        mkdir -p /usr/local/cluster/7003
        mkdir -p /usr/local/cluster/7004
        mkdir -p /usr/local/cluster/7005
        cp -rf /usr/local/redis3.0/* /usr/local/cluster/7000/
        cp -rf /usr/local/redis3.0/* /usr/local/cluster/7001/
        cp -rf /usr/local/redis3.0/* /usr/local/cluster/7002/
        cp -rf /usr/local/redis3.0/* /usr/local/cluster/7003/
        cp -rf /usr/local/redis3.0/* /usr/local/cluster/7004/
        cp -rf /usr/local/redis3.0/* /usr/local/cluster/7005/


        4:修改配置文件redis.conf

        vi /usr/local/cluster/7000/redis.conf

        ##修改配置文件中的下面选项
        port 7000
        daemonize yes
        cluster-enabled yes
        cluster-config-file nodes.conf
        cluster-node-timeout 5000
        appendonly yes


        #同样再对其它配置文件进行修改
        vi /usr/local/cluster/7001/redis.conf
        vi /usr/local/cluster/7002/redis.conf
        vi /usr/local/cluster/7003/redis.conf
        vi /usr/local/cluster/7004/redis.conf
        vi /usr/local/cluster/7005/redis.conf
        ##注意:不同的目录配置不同的redis.conf中的port


        5:启动6个redis

        cd /usr/local/cluster/7000/src
        redis-server ../redis.conf
        cd /usr/local/cluster/7001/src
        redis-server ../redis.conf
        cd /usr/local/cluster/7002/src
        redis-server ../redis.conf
        cd /usr/local/cluster/7003/src
        redis-server ../redis.conf
        cd /usr/local/cluster/7004/src
        redis-server ../redis.conf
        cd /usr/local/cluster/7005/src
        redis-server ../redis.conf

        ##启动之后使用命令查看redis的启动情况ps -ef|grep redis


        6,创建redis集群
        cd /usr/local/redis3.0/src
        ./redis-trib.rb create --replicas 1 127.0.0.1:7000 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

        6.1执行上面的命令的时候会报错,因为是执行的的脚本,需要
        错误内容:/usr/bin/env: ruby: No such file or directory
        所以需要安装ruby的环境,这里推荐使用yum install ruby


        yum install ruby


        6.2然后再执行第步的创建集群命令,还会报错,提示缺少rubygems组件
        错误内容:
        ./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
        from ./redis-trib.rb:24
        yum install rubygems


        6.3再次执行第步的命令,还会报错,提示不能加载redis,是因为缺少redis的接口
        错误内容:
        /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
        from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from ./redis-trib.rb:25


        gem install redis
        这里可能无法安装,因为无法连接gem服务器:
        [@zw_22_90 src]# gem install redis --version 3.0.0
        ERROR: Could not find a valid gem 'redis' (= 3.0.0) in any repository
        ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)

    如何使用?
    $ gem sources --remove https://rubygems.org/
    $ gem sources -a https://ruby.taobao.org/
    $ gem sources -l
    *** CURRENT SOURCES ***
    
    https://ruby.taobao.org
    # 请确保只有 ruby.taobao.org
    $ gem install rails



        6.4 再次执行第步的命令,正常执行
        输入yes,然后配置完成。
        [@zw_22_90 src]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 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
        >>> Creating cluster
        Connecting to node 127.0.0.1:7000: OK
        Connecting to node 127.0.0.1:7001: OK
        Connecting to node 127.0.0.1:7002: OK
        Connecting to node 127.0.0.1:7003: OK
        Connecting to node 127.0.0.1:7004: OK
        Connecting to node 127.0.0.1:7005: OK
        >>> Performing hash slots allocation on 6 nodes...
        Using 3 masters:
        127.0.0.1:7000
        127.0.0.1:7001
        127.0.0.1:7002
        Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
        Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
        Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
        M: 2022f24d581b4a7c3342e3245c32927cbd5ec16d 127.0.0.1:7000
        slots:0-5460 (5461 slots) master
        M: 37b7008f80f8c21a698da8cb1f1b32db8c0c415c 127.0.0.1:7001
        slots:5461-10922 (5462 slots) master
        M: ac6dc5fa96e856b34c1ba4c3814394e4ebb698dd 127.0.0.1:7002
        slots:10923-16383 (5461 slots) master
        S: b5b76d70bbb0dbf3e7df8a38f1259e95e2054721 127.0.0.1:7003
        replicates 2022f24d581b4a7c3342e3245c32927cbd5ec16d
        S: 6881f8fef9c25da486f320ebf2ead39c1502db4c 127.0.0.1:7004
        replicates 37b7008f80f8c21a698da8cb1f1b32db8c0c415c
        S: f090526d32cced97731eef2a2e1722a7bac7d9ea 127.0.0.1:7005
        replicates ac6dc5fa96e856b34c1ba4c3814394e4ebb698dd
        Can I set the above configuration? (type 'yes' to accept): yes
        >>> 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 127.0.0.1:7000)
        M: 2022f24d581b4a7c3342e3245c32927cbd5ec16d 127.0.0.1:7000
        slots:0-5460 (5461 slots) master
        M: 37b7008f80f8c21a698da8cb1f1b32db8c0c415c 127.0.0.1:7001
        slots:5461-10922 (5462 slots) master
        M: ac6dc5fa96e856b34c1ba4c3814394e4ebb698dd 127.0.0.1:7002
        slots:10923-16383 (5461 slots) master
        M: b5b76d70bbb0dbf3e7df8a38f1259e95e2054721 127.0.0.1:7003
        slots: (0 slots) master
        replicates 2022f24d581b4a7c3342e3245c32927cbd5ec16d
        M: 6881f8fef9c25da486f320ebf2ead39c1502db4c 127.0.0.1:7004
        slots: (0 slots) master
        replicates 37b7008f80f8c21a698da8cb1f1b32db8c0c415c
        M: f090526d32cced97731eef2a2e1722a7bac7d9ea 127.0.0.1:7005
        slots: (0 slots) master
        replicates ac6dc5fa96e856b34c1ba4c3814394e4ebb698dd
        [OK] All nodes agree about slots configuration.
        >>> Check for open slots...
        >>> Check slots coverage...
        [OK] All 16384 slots covered.


        至此redis集群即搭建成功!


        7,redis-cli命令进入集群环境
        [@zw_22_90 src]# redis-cli -c -p 7000

        127.0.0.1:7000> quit;
    奋斗
  • 相关阅读:
    EncryptionAndDecryptionC# 加密 解密
    EncryptFac 加解密小工具
    Aes加密/解密示例项目
    DES加密解密工具
    DESC加密解密算法
    加解密合集
    Zabbix系列之一——zabbix3.4部署
    Linux下ntpdate时间同步
    SVN服务器搭建实录
    Failed to get D-Bus connection: Operation not permitted解决
  • 原文地址:https://www.cnblogs.com/ClearX/p/5803515.html
Copyright © 2020-2023  润新知