redis集群搭建

# redis集群搭建

持久化保证了即使redis服务重启不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障。接下来开始redis集群的搭建。

1、ruby环境
redis集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境:
1.1安装ruby
yum -y install ruby
yum -y install rubygems
1.2安装ruby和redis的接口程序
下载redis-3.0.0.gem 拷贝至/usr/local下
执行: gem install /usr/local/redis-3.0.0.gem

2、创建集群
2.1 集群结点规划
这里在同一台服务器用不同的端口表示不同的redis服务器,如下:
主节点:192.168.101.3:7001 192.168.101.3:7002 192.168.101.3:7003
从节点:192.168.101.3:7004 192.168.101.3:7005 192.168.101.3:7006
在/usr/local下创建redis-cluster目录,其下创建7001、7002。。7006目录,如下:
redis-cluster目录
将redis安装目录bin下的文件拷贝到每个700X目录内,同时将redis源码目录src下的redis-trib.rb拷贝到redis-cluster目录下。
修改每个700X目录下的redis.conf配置文件:
port XXXX
bind 192.168.101.3
cluster-enabled yes
2.2 启动每个结点redis服务
./redis-server ./redis.conf
查看服务ps aux|grep redis
这里写图片描述
2.3执行创建集群命令
执行redis-trib.rb,此脚本是ruby脚本,它依赖ruby环境。
./redis-trib.rb create –replicas 1 192.168.101.3:7001 192.168.101.3:7002 192.168.101.3:7003 192.168.101.3:7004 192.168.101.3:7005 192.168.101.3:7006
说明:
redis集群至少需要3个主节点,每个主节点有一个从节点总共6个节点
replicas指定为1表示每个主节点有一个从节点
创建集群输出如下:
这里写图片描述
3 查询集群信息
[root@localhost 7001]# ./redis-cli -c -h 192.168.145.130 -p 7001
其中-c表示以集群方式连接redis,-h指定ip地址,-p指定端口号
cluster nodes 查询集群结点信息
cluster info 查询集群状态信息
这里写图片描述
4.测试集群

4.1 普通测试

// 连接集群
    @Test
    public void testJedisCluster(){
        // 集群节点
        Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
        jedisClusterNode.add(new HostAndPort("192.168.145.130", 7001));
        jedisClusterNode.add(new HostAndPort("192.168.145.130", 7002));
        jedisClusterNode.add(new HostAndPort("192.168.145.130", 7003));
        jedisClusterNode.add(new HostAndPort("192.168.145.130", 7004));
        jedisClusterNode.add(new HostAndPort("192.168.145.130", 7005));
        jedisClusterNode.add(new HostAndPort("192.168.145.130", 7006));
        // jediscluster 
        JedisCluster jedisCluster = new JedisCluster(jedisClusterNode);
        jedisCluster.set("name", "xiaoming");
        System.out.println(jedisCluster.get("name"));
    }

4.2 spring整合
pom.xml

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

配置文件applicationContext.xml

<!-- jedisPool配置信息 -->  
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">  
        <!-- 控制一个pool最多有多少个状态为idle(空闲)的jedis实例 -->  
        <property name="maxIdle" value="${redis.maxIdle}" />  
        <!-- 控制一个pool可分配多少个jedis实例 --> 
        <property name="maxTotal" value="${redis.maxTotal}" />  
        <!-- 表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException -->
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />  
        <!-- 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的 -->
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />  
    </bean>  

    <!-- redis集群 -->
    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        <constructor-arg index="0">
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg type="String" value="${redis.host}"/>
                    <constructor-arg type="int" value="7001"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg type="String" value="${redis.host}"/>
                    <constructor-arg type="int" value="7002"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg type="String" value="${redis.host}"/>
                    <constructor-arg type="int" value="7003"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg type="String" value="${redis.host}"/>
                    <constructor-arg type="int" value="7004"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg type="String" value="${redis.host}"/>
                    <constructor-arg type="int" value="7005"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg type="String" value="${redis.host}"/>
                    <constructor-arg type="int" value="7006"/>
                </bean>
            </set>
        </constructor-arg>
        <constructor-arg index="1" ref="jedisPoolConfig"/>
    </bean>

测试类

private ApplicationContext applicationContext;
    @Before
    public void init() {
        applicationContext = new ClassPathXmlApplicationContext(
                "classpath:applicationContext.xml");
    }

    // redis 集群
    @Test
    public void testSpringJedisCluster() {
        JedisCluster jedisCluster = (JedisCluster) applicationContext.getBean("jedisCluster");
        jedisCluster.set("name", "xiaoming");
        System.out.println(jedisCluster.get("name"));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值