zoukankan      html  css  js  c++  java
  • redis集群部署

    连接集群的时候一定要加-c
    即:redis-cli -h 192.168.139.30 -p 7002 -c

    1.创建存放redis文件夹: mkdir softwar
    2.上传redis包到刚创建softwar中 rz 
    如果没有rz命令安装 yum install -y lrzsz
    3.解压redis包 tar -zxvf redis-3.2.4.tar.gz
    4.编译安装
    cd redis-3.2.4
    make 
    make install(安装到/usr/local/bin/)
    5.在redis-3.2.4下创建redis_cluster 目录
    mkdir redis_cluster 
    6.在 redis_cluster 目录下,创建名为7000、7001、7002的目录,并将 redis.conf 拷贝到这三个目录中
    mkdir 7000 7001 7002
    cp redis.conf redis_cluster/7000
    cp redis.conf redis_cluster/7001
    cp redis.conf redis_cluster/7002  

    7.分别修改配置文件
    复制代码
    port  7000                                        //端口7000,7002,7003      
    bind 本机ip                                 //必须绑定本机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日志开启  有需要就开启,它会每次写操作都记录一条日志 
    复制代码
    8.然后分别在7000,7001,7002启动redis服务
    redis-server /software/redis-3.2.4/redis_cluster/7000/redis.conf
    redis-server /software/redis-3.2.4/redis_cluster/7001/redis.conf 
    redis-server /software/redis-3.2.4/redis_cluster/7002/redis.conf 
     
    ps -ef|grep redis 查看三个redis节点都起来了。
    9.虽然三个redis节点都以redis-cluster运行了,但是不会自动构建集群的。三者属于“你不认识我,我不认识你”的状态。
    此时用redis-cli连接一个redis服务器
    redis-cli -h 127.0.0.1 -p 7001
    cluster meet:连通其他节点,让彼此认识。
    cluster meet 127.0.0.1 7000
    cluster meet 127.0.0.1 7002
    然后用cluster nodes 查看集群节点已经都connected的。
    然后用cluster info 查看集群状态cluster_state:fail 还是失败。
    因为redis集群需要设置hash slot
    Redis Cluster通过hash slot将数据根据主键来分区,所以一条key-value数据会根据算法自动映射到一个hash slot,但是一个hash slot存储在哪个Redis节点上并不是自动映射的,是需要集群管理者自行分配的。那么我们需要为多少个hash slot分配Redis节点呢?根据源码可知是16384个
    10.每个redis节点设置hash slot槽
    但是另一个问题又出现了,对于16384个hash slot来说,我们总不能用cluster addslots一个个去分配吧?幸运的是,我们还有另外一种方法来分配hash slot,那就是通过集群配置文件,也就是我们在第三步中配置的cluster-config-file参数,来完成hash slot的分段配置。此时,我们在执行Redis服务器启动的目录下找到名字为nodes-6379.conf的配置文件
    nodes-7000.conf 设置0-5000 
    nodes-7001.conf 设置5001-10000
    nodes-7002.conf 设置10001-16383
    只在myself的节点上设置自己的槽位

    11.配置完hash slot槽位完,redis服务全部重启,然后通过cluster info查看集群状态是否ok。
    12.如果经过以上步骤之后集群状态依然是fail的话,可以重新修改一下三个节点的nodes-6379.conf,将其中所有除myself那一行以外的所有配置行都删除,然后再保存重启服务器即可。
    测试下:set foo bar  提示error 说明让去127.0.0.1:7002上去创建,不是redis集群问题,因为redis集群是根据key来计算槽位,然后根据槽位配置来选择存储到那个redis服务器上的。

    cluster nodes:查看集群节点

    cluster info:查看集群状态
     
    参考的文章:
     
     
    问题:
    1.异常:Too many Cluster redirections?
    bind绑定的ip和你代码访问的ip不一致。
    bind 一定要绑定这个ip。192.168.139.30 
     
     Set<HostAndPort> nodes = new HashSet<HostAndPort>();
            HostAndPort hostAndPort = new HostAndPort("192.168.139.30", 7000);
            HostAndPort hostAndPort1 = new HostAndPort("192.168.139.30", 7001);
            HostAndPort hostAndPort2 = new HostAndPort("192.168.139.30", 7002);
            nodes.add(hostAndPort);
            nodes.add(hostAndPort1);
            nodes.add(hostAndPort2);
            JedisCluster jedisCluster = new JedisCluster(nodes);//JedisCluster中默认分装好了连接池.
            // 这东西 可以直接看到key 的分片数,就能知道放哪个 节点
            System.out.println(JedisClusterCRC16.getSlot("foo"));
            //redis内部会创建连接池,从连接池中获取连接使用,然后再把连接返回给连接池
            String string = jedisCluster.get("foo");
            for (int i = 1; i <= 3; i++) {
                long start = System.currentTimeMillis();
                jedisCluster.set("k:" + i, "v" + i);
                System.out.print("set " + i +"th value in " + (System.currentTimeMillis() - start) + " ms");
                start = System.currentTimeMillis();
                jedisCluster.get("k:" + i);
                System.out.println(", get " + i +"th value in " + (System.currentTimeMillis() - start) + " ms");
            }
     
            System.out.println(string);      
     
     
    第二种方式集群:
    按照上边的1~8的步骤操作完,已经启动了3个redis节点了,下面创建集群操作:
     
    redis-trib.rb create 192.168.139.30:7000 192.168.139.30:7001 192.168.139.30:7002
    这个工具是用 ruby 实现的,所以需要安装 ruby。安装命令如下:
    yum -y install ruby ruby-devel rubygems rpm-build
    gem install redis
    安装完在执行上面的命令。
    此时集群已经搭建成功。
    遇到的问题:
    第一个错误:
    解决方法:
    1.删除每个节点下的aof,rdb文件
    2.flushdb 清空当前数据库
    3.在执行redis-trib命令就可以了。
    第二个错误:
    解决方法:
    只要把redis.conf中定义的 cluster-config-file 所在的文件删除,重新启动redis-server及运行redis-trib即可。
     
    redis-trib.rb的命令:
    http://blog.csdn.net/huwei2003/article/details/50973967
     
     
     
     





    附件列表

  • 相关阅读:
    caffe: compile error: Could not open or find file your path~~/resized_data/0 and a total of 2 images .
    caffe: compile error : undefined reference to `cv::imread(cv::String const&, int)' et al.
    caffe: test code for Deep Learning approach
    C++ little errors , Big problem
    VGG_19 train_vali.prototxt file
    matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。
    利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning
    matlab 相关代码记录
    论文阅读之 Inferring Analogous Attributes CVPR 2014
    布局的几种方式(静态布局、自适应布局、流式布局、响应式布局、弹性布局)
  • 原文地址:https://www.cnblogs.com/mantian2020/p/6226663.html
Copyright © 2011-2022 走看看