Redis集群配置和部署 spring整合redisCluster

来源:互联网 发布:淘宝联盟好还是一淘 编辑:程序博客网 时间:2024/06/07 03:03
Redis集群配置和部署
1. 下载redis3.0
2. 上传服务器,解压,编译(前两步与之前相同)http://blog.csdn.net/liguangyan_neu/article/details/78026932 参考2.1节
3. 创建集群需要的目录
mkdir /usr/local/cluster
cd  /usr/local/cluster
mkdir  7000 7001 7002 7003 7004 7005
4. 修改配置文件redis.conf
cp  /usr/local/redis3.0.5/redis.conf  /usr/local/cluster
vi  redis.conf
修改配置文件中如下选项
port  7000
daemonize  yes
cluster-enabled  yes
cluster-config-file  nodes.conf
cluster-node-timeout  5000
appendonly  yes
修改完配置文件后将redis.conf文件分别拷贝至70007001……7005目录下
cp  /usr/local/cluster/redis.conf  /usr/local/cluster/7000
cp  /usr/local/cluster/redis.conf  /usr/local/cluster/7001
cp  /usr/local/cluster/redis.conf  /usr/local/cluster/7002
cp  /usr/local/cluster/redis.conf  /usr/local/cluster/7003
cp  /usr/local/cluster/redis.conf  /usr/local/cluster/7004
cp  /usr/local/cluster/redis.conf  /usr/local/cluster/7005
拷贝结束之后分别修改对应的配置文件中的端口port为对应的端口号
5. 分别启动六个redis实例
/usr/local/redis-3.0.5/src/redis-server /usr/local/cluster/7000/redis.conf
/usr/local/redis-3.0.5/src/redis-server /usr/local/cluster/7001/redis.conf
/usr/local/redis-3.0.5/src/redis-server /usr/local/cluster/7002/redis.conf
/usr/local/redis-3.0.5/src/redis-server /usr/local/cluster/7003/redis.conf
/usr/local/redis-3.0.5/src/redis-server /usr/local/cluster/7004/redis.conf
/usr/local/redis-3.0.5/src/redis-server /usr/local/cluster/7005/redis.conf
查看启动情况
ps  -ef|grep redis
6. 升级ruby安装gem
http://jingyan.baidu.com/article/b7001fe173fe9a0e7382dd57.html
7. gem安装redis ruby接口
http://storysky.blog.51cto.com/628458/1155353/
8. 执行redis创建集群命令创建集群
/usr/local/redis-3.0.5/src/redis-trib.rb create --replicas 1 192.168.1.191:7000 192.168.1.191:7001 192.168.1.191:7002 192.168.1.191:7003 192.168.1.191:7004 192.168.1.191:7005
9. 进入集群环境使用redis-cli
/usr/local/redis-3.0.5/src/redis-cli -c -h 192.168.1.191 -p 7000
 
10. RedisCluster客户端(Jedis
使用spring集成JedisCluster连接Redis3.0集群
Ø Maven依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
</dependency>
 
Ø 增加spring配置
<bean name="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig" >  
       <property name="maxWaitMillis" value="-1" />  
        <property name="maxTotal" value="1000" />  
       <property name="minIdle" value="8" />  
       <property name="maxIdle" value="100" />  
</bean>  
  
<bean id="jedisCluster" class="xxx.JedisClusterFactory">  
    <property name="addressConfig">  
        <value>classpath:connect-redis.properties</value>  
    </property>  
    <property name="addressKeyPrefix" value="address" />   <!--  属性文件里  key的前缀 -->  
      
    <property name="timeout" value="300000" />  
    <property name="maxRedirections" value="6" />  
    <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" />  
</bean>
 
Ø 增加connect-redis.properties配置文件
address1=192.168.1.191:7000  
address2=192.168.1.191:7001 
address3=192.168.1.191:7002  
address4=192.168.1.191:7003   
address5=192.168.1.191:7004   
address6=192.168.1.191:7005  
 
Ø 增加javaJedisClusterFactory
1. import java.util.HashSet;  
2. import java.util.Properties;  
3. import java.util.Set;  
4. import java.util.regex.Pattern;  
5.   
6. import org.apache.commons.pool2.impl.GenericObjectPoolConfig;  
7. import org.springframework.beans.factory.FactoryBean;  
8. import org.springframework.beans.factory.InitializingBean;  
9. import org.springframework.core.io.Resource;  
10.   
11. import redis.clients.jedis.HostAndPort;  
12. import redis.clients.jedis.JedisCluster;  
13.   
14. public class JedisClusterFactory implements FactoryBean<JedisCluster>, InitializingBean {  
15.   
16.     private Resource addressConfig;  
17.     private String addressKeyPrefix ;  
18.   
19.     private JedisCluster jedisCluster;  
20.     private Integer timeout;  
21.     private Integer maxRedirections;  
22.     private GenericObjectPoolConfig genericObjectPoolConfig;  
23.       
24.     private Pattern p = Pattern.compile("^.+[:]\\d{1,5}\\s*$");  
25.   
26.     @Override  
27.     public JedisCluster getObject() throws Exception {  
28.         return jedisCluster;  
29.     }  
30.   
31.     @Override  
32.     public Class<? extends JedisCluster> getObjectType() {  
33.         return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class);  
34.     }  
35.   
36.     @Override  
37.     public boolean isSingleton() {  
38.         return true;  
39.     }  
40.   
41.   
42.   
43.     private Set<HostAndPort> parseHostAndPort() throws Exception {  
44.         try {  
45.             Properties prop = new Properties();  
46.             prop.load(this.addressConfig.getInputStream());  
47.   
48.             Set<HostAndPort> haps = new HashSet<HostAndPort>();  
49.             for (Object key : prop.keySet()) {  
50.   
51.                 if (!((String) key).startsWith(addressKeyPrefix)) {  
52.                     continue;  
53.                 }  
54.   
55.                 String val = (String) prop.get(key);  
56.   
57.                 boolean isIpPort = p.matcher(val).matches();  
58.   
59.                 if (!isIpPort) {  
60.                     throw new IllegalArgumentException("ip  port 不合法");  
61.                 }  
62.                 String[] ipAndPort = val.split(":");  
63.   
64.                 HostAndPort hap = new HostAndPort(ipAndPort[0], Integer.parseInt(ipAndPort[1]));  
65.                 haps.add(hap);  
66.             }  
67.   
68.             return haps;  
69.         } catch (IllegalArgumentException ex) {  
70.             throw ex;  
71.         } catch (Exception ex) {  
72.             throw new Exception("解析 jedis 配置文件失败", ex);  
73.         }  
74.     }  
75.       
76.     @Override  
77.     public void afterPropertiesSet() throws Exception {  
78.         Set<HostAndPort> haps = this.parseHostAndPort();  
79.           
80.         jedisCluster = new JedisCluster(haps, timeout, maxRedirections,genericObjectPoolConfig);  
81.           
82.     }  
83.     public void setAddressConfig(Resource addressConfig) {  
84.         this.addressConfig = addressConfig;  
85.     }  
86.   
87.     public void setTimeout(int timeout) {  
88.         this.timeout = timeout;  
89.     }  
90.   
91.     public void setMaxRedirections(int maxRedirections) {  
92.         this.maxRedirections = maxRedirections;  
93.     }  
94.   
95.     public void setAddressKeyPrefix(String addressKeyPrefix) {  
96.         this.addressKeyPrefix = addressKeyPrefix;  
97.     }  
98.   
99.     public void setGenericObjectPoolConfig(GenericObjectPoolConfig genericObjectPoolConfig) {  
100.         this.genericObjectPoolConfig = genericObjectPoolConfig;  
101.     }  
102.   
103. }  
 
Ø 使用时直接注入
@Autowired
JedisCluster  jedisCluster