Window环境下搭建redis集群

一.Redis集群原理:

redis集群
redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特 性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点 设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到 上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的 哨兵模式,且集群配置非常简单 。

redis键值对定位:

  • 槽位定位算法

(1) Cluster 默认会对 key 值使用 crc16 算法进行 hash 得到一个整数值,然后用这个整 数值对 16384 进行取模来得到具体槽位。 HASH_SLOT = CRC16(key) mod 16384

  • 跳转重定位

(2) 当客户端向一个错误的节点发出了指令,该节点会发现指令的 key 所在的槽位并不归 自己管理,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告 诉客户端去连这个节点去获取数据。客户端收到指令后除了跳转到正确的节点上去操 作,还会同步更新纠正本地的槽位映射表缓存,后续所有 key 将使用新的槽位映射 表。

二.Redis集群搭建

1.安装redis:

redis下载地址:https://github.com/MSOpenTech/redis/releases.选择msi安装或者zip解压即可;
在这里插入图片描述

2.创建redis的集群文件夹redis-cluster

注意:Redis集群内部主节点数为奇数个,所以集群的最低配置是3个主节点与3个从节点,也就是说至少有6个节点。
在这里插入图片描述

3.复制节点

将 Redis 解压后文件复制出 5 份,配置三主三从集群(放到新建的redis-cluster文件夹下)。 分别放入 redis-7002-zhu2、 redis-7003-zhu3, redis-7004-cong1,redis-7006-cong2,redis-7006-cong3。(实际redis主从不安文件名区分)

4.修改redis.windows-servce.conf配置文件

(1) daemonize yes (开启守护进程,保证进程安全)
在这里插入图片描述
(2) port 7001(分别对每个redis的端口号进行设置,一共五份)在这里插入图片描述
这里默认端口为6379。

(3) cluster-enabled yes(启动集群模式,不开启会报不是集群节点配置)
在这里插入图片描述
(4) cluster-config-file nodes-7001.conf (集群节点信息文件,这里700x好和port对应)
在这里插入图片描述
(5) cluster-node-timeout 5000 (设置连接超时时间)
在这里插入图片描述
(6) # bind 127.0.0.1(去掉bind绑定访问ip信息,否则只能访问本机)
在这里插入图片描述
(7) protected-mode no (关闭保护模式)

(8) appendonly yes (设置AOF持久化–非必须)

如果要设置密码需要增加如下配置:
(9) requirepass 123456 (设置redis访问密码)
(10) masterauth 123456 (设置集群节点间访问密码,跟上面一致)

5.安装redis到系统服务

1.进入到每个redis服务的目录下,执行cmd打开命令管理窗口;
2.输入命令:redis-server.exe --service-install redis.windows-service.conf --service-name redis-700x --port 700x。

6.安装Ruby(redis集群需要Ruby环境)

(1)Ruby下载地址:https://rubyinstaller.org/downloads/.
在这里插入图片描述
测试:下载完成后进入Ruby的bin目录下执行cmd,执行 ruby -v 出现版本号证明安装成功。

(2)安装ruby驱动:https://rubygems.org/pages/download.(选择zip)
在这里插入图片描述
(3)解压文件,命令窗口切换到解压目录,执行cmd,输入ruby setup.rb 安装环境。

(4)切换到redis-cluster文件夹,执行cmd,输入gem install redis
在这里插入图片描述
(5)测试执行gem -v 出现版本号证明Ruby环境搭建完成
在这里插入图片描述

7.下载redis集群驱动:redis-trib.rb

1.下载地址:https://github.com/beebol/redis-trib.rb
2.下载完成后放到redis-cluster文件夹下

8.创建集群服务(至少6个节点)

1.进入到redis-cluster目录,执行cmd;
2.输入集群命令:

redis-trib.rb create --replicas 1 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 127.0.0.1:7006

询问Can I set above configuation?时输入 yes 自动配置集群,最后出现 All 16384 slots covered 证明哈希槽分配成功。

9.测试集群

1.进入到任意一个redis服务器,执行cmd;输入启动命令:

redis-cli.exe -a 123456 -c -h  127.0.0.1 -p 7001

-a访问服务端密码,-c表示集群模 式,指定ip地址和端口号,(没设密码不用-a)。

2.进行验证
cluster info(查看集群信息),如果出现如下信息证明redis集群配置完成。
在这里插入图片描述

三.Jedis测试redis集群

1.导入maven依赖:

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

2.集群代码如下:

package com.tuling.redisCluster;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

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

/**
 * 访问redis集群
 */
public class RedisCluster 
{
    public static void main(String[] args) throws IOException
    {
        Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
        /*添加集群节点*/
        jedisClusterNode.add(new HostAndPort("192.168.0.61", 8001));
        jedisClusterNode.add(new HostAndPort("192.168.0.61", 8002));
        jedisClusterNode.add(new HostAndPort("192.168.0.62", 8003));
        jedisClusterNode.add(new HostAndPort("192.168.0.62", 8004));
        jedisClusterNode.add(new HostAndPort("192.168.0.63", 8005));
        jedisClusterNode.add(new HostAndPort("192.168.0.63", 8006));
        
        JedisPoolConfig config = new JedisPoolConfig();
        /*设置最大连接数*/
        config.setMaxTotal(100);
        /*设置最大等待连接数*/
        config.setMaxIdle(10);
        /*设置jedis实例均为可用*/
        config.setTestOnBorrow(true);
        
        //connectionTimeout:指的是连接一个url的连接等待时间
        //soTimeout:指的是连接上一个url,获取response的返回等待时间
        JedisCluster jedisCluster = new JedisCluster(jedisClusterNode, 6000, 5000, 10, config);
        System.out.println(jedisCluster.set("student", "zhuge"));
        System.out.println(jedisCluster.set("age", "19"));
        
        System.out.println(jedisCluster.get("student"));
        System.out.println(jedisCluster.get("age"));
        System.out.println(jedisCluster.get("name"));
        
        /*关闭连接,释放资源*/
        jedisCluster.close();
    }
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值