Redis集群搭建

188 阅读3分钟

一、安装ruby环境  

  本身redis集群的安装是很麻烦了,通过ruby工具,可以非常方便的将一系列命令打包为一个脚本!

  1、安装ruby环境:  

yum -y install ruby

yum -y install rubygems

  2、安装redis gem

  redis-3.2.0.gem是一个通过ruby操作redis的插件!

  自己下载

gem install --local redis-3.2.0.gem

二、准备redis.conf

  主要配置地方:  

bind 192.168.88.100
port 6379
daemonize yes #后台守护模式运行
pidfile /var/run/redis_6379.pid #运行进程id 默认
logfile "" #日志的路径

三、准备集群的6个redis配置文件

  端口号分别为:6380,6381,6382,6383,6384,6385

  每个配置文件的配置如下
  

1 include /root/redis/base.conf  #主配置文件
2 daemonize yes
3 port 6380
4 pidfile "/root/redis/redis_6380.pid"
5 logfile "/root/redis/reds_log_6380.log"
6 dbfilename "dump_6380.rdb"  #快照备份的名字,注意只是文件名,不能加路径
7 cluster-enabled yes
8 cluster-config-file nodes-6380.conf   #集群节点设置
9 cluster-node-timeout 15000

   redis:目录自己创建的

  base.conf:刚自己准备的 redis.conf

  注意:删除所有快照文件dump

四、分别启动服务

1  redis-server redis_6380.conf
2  redis-server redis_6381.conf
3  redis-server redis_6382.conf
4  redis-server redis_6383.conf
5  redis-server redis_6384.conf
6  redis-server redis_6385.conf

 

 

 

 

 

五、加入集群

   在/opt/redis-3.2.5/src目录下,执行命令

   

/opt/module/redis-3.2.5/src/redis-trib.rb create --replicas 1 192.168.88.100:6380 192.168.88.100:6381 192.168.88.100:6382 192.168.88.100:6383 192.168.88.100:6384 192.168.88.100:6385

 

 

 

 

 

 

   三主三从,replicas  1 这个1就是一个mater一个slave,redis默认是3个master,要陪两个从机,就要创建9个redis节点

六、查看

  1、查看进程

 

 

 

  2、查看集群节点

  登录其中一个客户端 

redis-cli -c -h 192.168.88.100 -p 6380

 

  在redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器插槽,redis会报错,并告知应前往的redis实例地址和端口。

  –c 参数实现自动重定向。如 redis-cli  -c –p 6379 登入后,再录入、查询键值对可以自动重定向。

  每个slot可以存储一批键值对

  

 

 

 

 

 

   myself:自己登录的那个

七、读取键的操作

  

 

 

   采用哈希算法后,会自动地分配slot,而 不在一个slot下的键值,是不能使用mget,mset等多键操作。

  通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去。

八、集群中读取数据

  1、CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上

  

 

 

   2、cluster countkeysinslot <slot>返回槽 slot 目前包含的键值对数量

  

 

 

   3、CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键

  

 

九、集群的jedis开发 

1     @Test
2     public void testCluster(){
3         Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
4         jedisClusterNodes.add(new HostAndPort("192.168.88.100", 6380));
5         JedisCluster jc = new JedisCluster(jedisClusterNodes);
6         jc.set("foo", "bar");
7         String value = jc.get("foo");
8         System.out.println(value);
9     }

 

  只需要写集群中任意的端口,不管是master和slave都能连接,操作集群

十、优缺点  

  优点:

    实现扩容

    分摊压力

    无中心配置相对简单

  缺点:

    多键操作是不被支持的

    多键的Redis事务是不被支持的(因为slot可能不一样)。lua脚本不被支持。

    由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。