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
 
 
 
 





附件列表

 

posted @ 2016-12-27 17:23  满天星光  阅读(202)  评论(0编辑  收藏  举报