redis集群的Cluster方式配置以及spring的集成

Windows 配置Reids集群 Redis Cluster

1. 下载安装Redis

Redis官方不支持Windows,但是Microsoft Open Tech group在 GitHub上开发了一个Win64的版本,下载地址为: 
https://github.com/MSOpenTech/redis/releases

解压之后,拷贝到自定义的redis目录下,例如D:\dev\Redis

打开cmd,切换到Redis目录下,执行

redis-server redis.windows.conf

窗口不要关闭,再重新打开一个cmd窗口,连接Redis执行

redis-cli.exe -h 127.0.0.1 -p 6379

2. 安装Ruby并配置环境

安装Ruby,Windows可以安装RubyInstaller,下载地址: 
http://railsinstaller.org/en

win下安装教程:http://jingyan.baidu.com/article/6181c3e094296d152ef153d7.html

只能更换下RubyGems 镜像

感谢淘宝 http://ruby.taobao.org

gem sources --remove https://rubygems.org/

gem sources -a https://ruby.taobao.org/

gem sources -l


一直下一步安装完成会自动弹出一个cmd的黑色窗口,需要对Ruby进行配置



3. 搭建Redis集群

要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

主节点崩溃,从节点的Redis就会提升为主节点,代替原来的主节点工作,崩溃的主Redis回复工作后,会成为从节点

1). 创建Redis集群目录

在redis安装的根目录下创建6个以端口命名的文件夹

mkdir 7000 7001 7002 7003 7004 7005

将安装的redis文件夹中的redis.windows.conf以及redis-server,分别拷贝到新建的六个文件夹中

2). 更改配置

将六个文件夹下的redis.windows.conf文件中以下属性进行修改:

port 7001(对应文件夹的端口号)
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
开始不要给每个redis设置密码,不然后面会非常痛苦

3). 启动6个redis服务

进入每个端口命名的文件夹下启动服务

cd 7001
redis-server.exe redis.conf(redis.win.conf)

其他几个目录同上

4). 创建启动集群

由于创建启动集群需要redis-trib.rb文件,它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群,检查集群或者对集群进行重新分片(reshared)等工作。

Windows的redis安装文件中是没有这个文件的,我们需要去官网下载Redis,官网的Redis是Linux版本,在其源码src文件夹下,将redis-trib.rb拷贝到本机中Redis的安装目录中

最后进入redis-trib.rb文件所在目录执行:

ruby 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
到这一步可能会报错,需要执行:
gem install redis

然后执行上一步在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave

redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes ,redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯。

5). 连接集群进行测试

连接集群的指令:

redis-cli.exe -c -p 7000

Redis集群数据分配策略:

采用一种叫做哈希槽 (hash slot)的方式来分配数据,redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384

注意的是:必须要3个以后的主节点,否则在创建集群时会失败,三个节点分别承担的slot 区间是:

    节点A覆盖0-5460;
    节点B覆盖5461-10922;
    节点C覆盖10923-16383.

所以上图中按照redis cluster的哈希槽算法:CRC16(‘name’)%16384 
被分配到了7001端口的redis服务上。

至此,Redis Cluster在Windows上的配置就完成了!

设置集群访问密码:

方式一:修改所有Redis集群中的redis.conf文件加入: 
masterauth passwd123 
requirepass passwd123 
说明:这种方式需要重新启动各节点

方式二:进入各个实例进行设置: 
./redis-cli -c -p 7000 
config set masterauth passwd123 
config set requirepass passwd123 
config rewrite 

设置成功以后,可以ip,端口进入实例,但是操作需要密码:

auth 密码

这个命令就是登陆;

下面是spring的集群配置:

xml配置:这里出现很多问题,jedis和spring-data-redis低版本是不支持密码和集群的,jar包容易出现问题,

redisClusterConfiguration配置集群实例时有两种方式,一种是通过resource资源文件加载(我用的这种但是出现很多问题)二中是在redisClusterConfiguration
里面直接注入每一个实例,具体可以看一看源码,通过set的方式注入

		  
      
        
         
             
            classpath*:/redis.properties  
          
     
     
						
    
	
		
		
		
		
		
		
		
		
		
		
	
	  
      
          
          
     
	  
	     
      
          
     
	
	
		
		 
		
	
	
	
	
	
		
	
    
	
		
		
		
		
		
			
				
				
			
		
	

	
	
资源文件:使用资源文件时,由于spring在加载资源文件时有可能不会加载到,需要自己设置,我直接就把它放在spring的资源文件上面加载了,使得资源文件很庞大,另外这里是没有sentine配置,只有cluster的集群,集体有什么区别,百度一下

#redis中心  
#redis的服务器地址  
redis.host=127.0.0.1  
#redis的服务端口  
redis.port=6379  
#密码  
redis.password=123456 
#缓存池最小空闲数
redis.minIdle=5
#缓存池最大空闲数
redis.maxIdle=100
#缓存池最大连接数
redis.maxTotal=300
#最大等待时间
redis.maxWaitMillis=3000
#客户端超时时间单位是毫秒  
redis.timeout=100000  
redis.maxTotal=1000  
redis.minIdle=8  
#明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个  
redis.testOnBorrow=true  
  
#sentinel  
#spring.redis.sentinel.master=mymaster  
#spring.redis.sentinel.node1.host=127.0.0.1  
#spring.redis.sentinel.node2.host=127.0.0.1  
#spring.redis.sentinel.node3.host=127.0.0.1  
#spring.redis.sentinel.node1.port=26379  
#spring.redis.sentinel.node2.port=26479  
#spring.redis.sentinel.node3.port=26579  
#sentinel  
  
#jediscluster  
cluster1.host.port=127.0.0.1:7000  
cluster2.host.port=127.0.0.1:7001  
cluster3.host.port=127.0.0.1:7002  
cluster4.host.port=127.0.0.1:7003  
cluster5.host.port=127.0.0.1:7004  
cluster6.host.port=127.0.0.1:7005  
#jediscluster  
  
#rediscluster  
spring.redis.cluster.nodes=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
spring.redis.cluster.max-redirects=3  
#rediscluster 
设置成功以后直接注解使用就可以了,另外说一下,如果项目中有使用mybatis多数据源的注入,有可能会报错,


你可能感兴趣的:(spring,redis)