redis-cluster主从搭建

1. 环境软件版本

环境&软件版本
虚拟机&VMware Workstation ProVMwareworkstation15.5.6
服务器&CentosCentOS-7-x86_64-DVD-1503-01.iso
redisredis-5.0.10
远程连接&Xshell5
远程文件传输&Xftp5

2. 环境架构设计

机器名称IP:port角色
redis192.168.5.136:7001redis节点
redis192.168.5.136:7002redis节点
redis192.168.5.136:7003redis节点
redis192.168.5.136:7004redis节点
redis192.168.5.136:7005redis节点
redis192.168.5.136:7006redis节点
redis192.168.5.136:7007redis节点
redis192.168.5.136:7008redis节点

3.搭建步骤

  1. 解压redis压缩包,进入redis目录,进行编译,安装
make  #编译
#编译完进入src目录,将redis安装到指定的文件夹下
make install PREFIX=/var/redis-cluster/7001
#并且将redis解压目录下的redis.conf拷贝到/var/redis-cluster/7001/bin
#编辑redis.conf
port 7001 #修改端口
cluster-enabled yes #开启cluster
#bind 127.0.0.1  #注释该行,允许远程访问
protected-mode no #关闭保护模式

接着拷贝7001到其他节点目录下,并修改redis.conf里的端口配置

#拷贝
cp -r /var/redis-cluster/7001/* /var/redis-cluster/7002 
cp -r /var/redis-cluster/7001/* /var/redis-cluster/7003 
cp -r /var/redis-cluster/7001/* /var/redis-cluster/7004 
cp -r /var/redis-cluster/7001/* /var/redis-cluster/7005 
cp -r /var/redis-cluster/7001/* /var/redis-cluster/7006

在redis-cluster建立启动脚本start.sh

cd 7001/bin
./redis-server redis.conf
cd ..
cd ..

cd 7002/bin
./redis-server redis.conf
cd ..
cd ..

cd 7003/bin
./redis-server redis.conf
cd ..
cd ..

cd 7004/bin
./redis-server redis.conf
cd ..
cd ..

cd 7005/bin
./redis-server redis.conf
cd ..
cd ..

cd 7006/bin
./redis-server redis.conf
cd ..
cd ..

修改start.sh执行权限,启动redis节点

chmod u+x start.sh

启动好redis节点后,进入其中一个的bin目录,创建cluster集群

./redis-cli --cluster create 192.168.5.136:7001 192.168.5.136:7002 192.168.5.136:7003 192.168.5.136:7004 192.168.5.136:7005 192.168.5.136:7006 --cluster-replicas 1
# cluster-replicas : 1   1从机 前三个为主

可以看到效果:
在这里插入图片描述
连接集群

./redis-cli -h 127.0.0.1 -p 7001 -c
# -c:以集群方式连接

重定向

moved重定向
1.每个节点通过通信都会共享Redis Cluster中槽和集群中对应节点的关系
2.客户端向Redis Cluster的任意节点发送命令,接收命令的节点会根据CRC16规则进行hash运算与
16384取余,计算自己的槽和对应节点
3.如果保存数据的槽被分配给当前节点,则去槽中执行命令,并把命令执行结果返回给客户端
4.如果保存数据的槽不在当前节点的管理范围内,则向客户端返回moved重定向异常
5.客户端接收到节点返回的结果,如果是moved异常,则从moved异常中获取目标节点的信息
6.客户端向目标节点发送命令,获取命令执行结果

在这里插入图片描述

  1. 扩容
#新建7007目录,安装一个新的redis(无数据)到7007目录下,拷贝7001中的redis.conf到7007的bin下,复制7007到7008
mkdir /var/redis-cluster/7007
#进入redis的src目录下进行安装
make install PREFIX=/var/redis-cluster/7007
#进入/var/redis-cluster目录,拷贝
cp 7001/bin/redis.conf 7007/bin/

启动7007节点,进入7007/bin

#启动7007
./redis-server redis.conf
#将7007加入cluster集群
./redis-cli --cluster add-node 192.168.5.136:7007 192.168.5.136:7001

cluster nodes查看节点信息
在这里插入图片描述
可见7007目前是没有分配槽位,分配槽位

./redis-cli --cluster reshard 192.168.5.136:7007

在这里插入图片描述

Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:

#输入all表示从其他节点平均分配到目标节点
#done是指,可以选择提供槽位的节点,最后输入done结束,进行分配

新增节点7008作为7007的从节点,启动7008节点,将7008挂载到7007下

./redis-cli --cluster add-node 新节点的ip和端口 旧节点ip和端口 --cluster-slave -- cluster-master-id 主节点id

最后节点分布效果
在这里插入图片描述

4.jedisCluster连接redis-cluster

依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>
public class JedisClusterDemo {
    public static void main(String[] args) {
        JedisPoolConfig config = new JedisPoolConfig();
        Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
        jedisClusterNode.add(new HostAndPort("192.168.5.136", 7001));
        jedisClusterNode.add(new HostAndPort("192.168.5.136", 7002));
        jedisClusterNode.add(new HostAndPort("192.168.5.136", 7003));
        jedisClusterNode.add(new HostAndPort("192.168.5.136", 7004));
        jedisClusterNode.add(new HostAndPort("192.168.5.136", 7005));
        jedisClusterNode.add(new HostAndPort("192.168.5.136", 7006));
        jedisClusterNode.add(new HostAndPort("192.168.5.137", 7006));
        jedisClusterNode.add(new HostAndPort("192.168.5.138", 7006));
        JedisCluster jcd = new JedisCluster(jedisClusterNode, config);
        jcd.set("name:003","wangwu");
        String value = jcd.get("name:003");
        System.out.println(value);
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值