首页 > Redis > Redis 3.0入门二之集群搭建和使用

Redis 3.0入门二之集群搭建和使用

上一篇文章讲了redis的主从搭建,主从一般只能解决我们读写分离的问题,可以增加我们的系统的负载能力,但是并不能解决单点问题,大家应该知道在互联网公司各个服务肯定不能出现单点问题,所以这一节就记录一下如果让我们的系统更加高可用。

一、集群搭建

需要先说明的是,集群搭建需要至少6个节点:3主3从(因为没有那么多机器,所以就在一台上搞了)

1. 创建文件夹redis-cluster,然后在其下面分别创建6个文件夹,存放6个实例

    mkdir -p /usr/local/redis-cluster
    mkdir 7001;mkdir 7002;mkdir 7003;mkdir 7004;mkdir 7005;mkdir 7006

2. 把之前redis.conf配置文件分别copy到700*下,修改各个实例的配置文件的内容,如下:


①. daemonize yes
②. port 700*(一台机器端口号肯定不能相同,就和文件夹一样吧)
③. bind ip(和当前机器的ip地址绑定)
④. dir /usr/local/redis-cluster/700*/(文件存储位置应该不一样吧,原因都知道)
⑤. cluster-enabled yes
⑥. cluster-config-flie nodes-700*.conf(700*就和端口一样吧)
⑦. cluster-node-timeout 5000
⑧. appendonly yes

3. 安装ruby


	yum install ruby
	yum install rubygems
	gem install redis

4. 启动各个实例


	/usr/local/redis/bin/redis-server /usr/local/redis-cluster/700*/redis.conf

5. 创建集群


	cd /usr/local/redis-3.0.0-rc2/src
	./redis-trib.rb create --replicas 1 ip:7001 ip:7002 ip:7003 ip:7004 ip:7005 ip:7006

然后看输出日志,会有一步需要输入yes,然后集群就创建完成了

6. 验证,连接任意一个客户端即可


	/usr/local/redis/bin/redis-cli -c -h -p (-c表示集群模式,指定ip和端口)

然后可以输入一些命令


	cluster info
	cluster nodes

关闭集群时候要逐个进行关闭,命令就不贴了

7. 补充资料

友情提示,如果其群无法启动,可以删除临时的数据文件,再次重启每一个redis服务,然后重新构造集群环境

redis-trib.rb官方操作命令:http://redis.io/topics/cluster-tutorial
推荐博客:http://blog.51yip.com/nosql/1726.html/comment-page-1
redis-cli客户端命令:http://blog.csdn.net/qachenzude/article/details/32098777

二、集群使用

1. pom


	<dependency>
		<groupId>redis.clients</groupId>
		<artifactId>jedis</artifactId>
		<version>2.7.2</version>
	</dependency>

2. 使用junit测试


package cn.bridgeli.msg.push.jedis;

import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

public class JedisClusterTest {

    @Test
    public void testJedisCluster() {
        Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
        jedisClusterNodes.add(new HostAndPort("ip", 7001));
        jedisClusterNodes.add(new HostAndPort("ip", 7002));
        jedisClusterNodes.add(new HostAndPort("ip", 7003));
        jedisClusterNodes.add(new HostAndPort("ip", 7004));
        jedisClusterNodes.add(new HostAndPort("ip", 7005));
        jedisClusterNodes.add(new HostAndPort("ip", 7006));

        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(100);
        jedisPoolConfig.setMaxIdle(20);
        jedisPoolConfig.setMaxWaitMillis(-1);
        jedisPoolConfig.setTestOnBorrow(true);

        JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes, 5000, 1000, jedisPoolConfig);

        System.out.println(jedisCluster.set("name", "bridgeli"));
        System.out.println(jedisCluster.get("name"));
    }
}

3. 和spring整合

	...

    <context:property-placeholder location="classpath:jedis.properties" />
    <context:component-scan base-package="cn.bridgeli" />
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${redis.maxTotal}"></property>
        <property name="maxIdle" value="${redis.maxIdle}"></property>
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property>
        <property name="testOnBorrow" value="${redis.testOnBorrow}"></property>
    </bean>

    <bean id="hostAndPort1" class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="..."></constructor-arg>
        <constructor-arg name="port" value="..."></constructor-arg>
    </bean>
    <bean id="hostAndPort2" class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="..."></constructor-arg>
        <constructor-arg name="port" value="..."></constructor-arg>
    </bean>
    <bean id="hostAndPort3" class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="..."></constructor-arg>
        <constructor-arg name="port" value="..."></constructor-arg>
    </bean>
    <bean id="hostAndPort4" class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="..."></constructor-arg>
        <constructor-arg name="port" value="..."></constructor-arg>
    </bean>
    <bean id="hostAndPort5" class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="..."></constructor-arg>
        <constructor-arg name="port" value="..."></constructor-arg>
    </bean>
    <bean id="hostAndPort6" class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="..."></constructor-arg>
        <constructor-arg name="port" value="..."></constructor-arg>
    </bean>

    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        <constructor-arg name="nodes">
            <set>
                <ref bean="hostAndPort1"/>
                <ref bean="hostAndPort2"/>
                <ref bean="hostAndPort3"/>
                <ref bean="hostAndPort4"/>
                <ref bean="hostAndPort5"/>
                <ref bean="hostAndPort6"/>
            </set>
        </constructor-arg>
        <constructor-arg name="timeout" value="5000"></constructor-arg>
        <constructor-arg name="poolConfig">
            <ref bean="jedisPoolConfig"/>
        </constructor-arg>
    </bean>

	...

至此,我们如何搭建redis主从、集群以及如何使用都应该可以完成了,最后我们发现这些其实并不难,关键是实践

分享到:
作 者: BridgeLi,http://www.bridgeli.cn/
原文链接:https://www.bridgeli.cn/archives/310
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
分类: Redis 标签: , , ,
  1. 本文目前尚无任何评论.