RedisCluster 集群搭建

Redis安装

第一步:安装 C 语言需要的 GCC 环境

yum install -y gcc-c ++

yum install -y wget

第二步:下载并解压缩 Redis 源码压缩包

wget http://download.redis.io/releases/redis-5.0.5.tar.gz

tar -zxf redis-5.0.5.tar.gz

第三步:编译 Redis 源码,进入 redis5.0.5 目录,执行编译命令

cd redis-5.0.5/src

make

第四步:安装 Redis ,需要通过 PREFIX 指定安装路径

mkdir /usr/redis -p

make install PREFIX = /usr/redis

集群搭建

RedisCluster最少需要三台主服务器,三台从服务器

端口号分别为:7001~7006

第一步:创建6个文件夹

mkdir /opt/lagou/redisCluster/7001 (这样创建6个)

第二步:创建7001实例,并复制redis.conf 到7001/bin目录下

cd redis-5.0.5/src

make install PREFIX=/opt/lagou/redisCluster/7001

RedisCluster 集群搭建

cd ..

cp redis.conf /opt/lagou/redisCluster/7001/bin

第三步:修改redis.conf配置文件

vi /opt/lagou/redisCluster/7001/bin/redis.conf

# 将`daemonize`由`no`改为`yes` daemonize yes # 默认绑定的是回环地址,默认不能被其他机器访问 # bind 127.0.0.1 # 是否开启保护模式,由yes该为no protected-mode no # 打开cluster-enable cluster-enable yes #port设为7001 port 7001

第三步:复制7001,创建7002~7006实例,注意端口修改

[root@test1 redisCluster]# cp -r /opt/lagou/redisCluster/7001/* /opt/lagou/redisCluster/7002
[root@test1 redisCluster]# cp -r /opt/lagou/redisCluster/7001/* /opt/lagou/redisCluster/7003
[root@test1 redisCluster]# cp -r /opt/lagou/redisCluster/7001/* /opt/lagou/redisCluster/7004
[root@test1 redisCluster]# cp -r /opt/lagou/redisCluster/7001/* /opt/lagou/redisCluster/7005
[root@test1 redisCluster]# cp -r /opt/lagou/redisCluster/7001/* /opt/lagou/redisCluster/7006

例如 7003下的redis.conf

RedisCluster 集群搭建

第四步:创建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 ..

chmod u+x start.sh(赋写和执行的权限)

sh start.sh

RedisCluster 集群搭建

第五步:创建Redis 集群(创建时Redis里不要有数据)

# cluster-replicas : 1 1个从机 前三个为主

# 采用机器ip而不采用127.0.0.1 不然外界无法访问

[root@localhost 7001]# ./redis-cli –cluster create 192.168.229.121:7001 192.168.229.121:7002 192.168.229.121:7003 192.168.229.121:7004 192.168.229.121:7005 192.168.229.121:7006 –cluster-replicas 1

RedisCluster 集群搭建

命令客户端连接集群

./redis-cli -h 127.0.0.1 -p 7001 -c

注意:-c表示是以redis集群方式进行连接

RedisCluster 集群搭建

查看集群的命令

·查看集群状态

cluster info

RedisCluster 集群搭建

·查看集群中的节点:

cluster nodes

RedisCluster 集群搭建

JedisCluster

JedisCluster是Jedis根据RedisCluster的特性提供的集群智能客户端

JedisCluster为每个节点创建连接池,并跟节点建立映射关系缓存(Cluster slots)

JedisCluster将每个主节点负责的槽位一一与主节点连接池建立映射缓存

JedisCluster启动时,已经知道key,slot和node之间的关系,可以找到目标节点

JedisCluster对目标节点发送命令,目标节点直接响应给JedisCluster

如果JedisCluster与目标节点连接出错,则JedisCluster会知道连接的节点是一个错误的节点 此时节点返回moved异常给JedisCluster

JedisCluster会重新初始化slot与node节点的缓存关系,然后向新的目标节点发送命令,目标命令执行 命令并向JedisCluster响应 如果命令发送次数超过5次,则抛出异常"Too many cluster redirection!"

RedisCluster 集群搭建

JedisPoolConfig config = new JedisPoolConfig();

Set jedisClusterNode = new HashSet();

jedisClusterNode.add(new HostAndPort("192.168.127.134", 7001));

jedisClusterNode.add(new HostAndPort("192.168.127.134", 7002));

jedisClusterNode.add(new HostAndPort("192.168.127.134", 7003));

jedisClusterNode.add(new HostAndPort("192.168.127.134", 7004));

jedisClusterNode.add(new HostAndPort("192.168.127.134", 7005));

jedisClusterNode.add(new HostAndPort("192.168.127.134", 7006));

JedisCluster jcd = new JedisCluster(jedisClusterNode, config);

jcd.set("name:001","zhangfei");

String value = jcd.get("name:001");

扩容

添加主节点

  • 先创建7007节点(无数据)

mkdir redisCluster/7007

cd ../software/redis-5.0.5/src/

make install PREFIX=/opt/lagou/redisCluster/7007

  • 添加7007 节点作为新节点,并启动

复制7001的redis.conf到7007,并修改port,并启动7007

[root@test1 bin]# cd /opt/lagou/redisCluster/7001/bin
[root@test1 bin]# cp redis.conf /opt/lagou/redisCluster/7007/bin
[root@test1 bin]# cd /opt/lagou/redisCluster/7007/bin/
[root@test1 bin]# vi redis.conf
[root@test1 bin]# ./redis-server redis.conf
37809:C 29 Apr 2021 21:32:37.941 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
37809:C 29 Apr 2021 21:32:37.941 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=37809, just started
37809:C 29 Apr 2021 21:32:37.941 # Configuration loaded

执行命令:

./redis-cli –cluster add-node 192.168.229.121:7007 192.168.229.121:7001

RedisCluster 集群搭建

  • 查看集群结点发现7007已添加到集群中 cluster nodes

RedisCluster 集群搭建

  • hash槽重新分配(数据迁移)

添加完主节点需要对主节点进行hash槽分配,这样该主节才可以存储数据。

给刚添加的7007结点分配槽

第一步:连接上集群(连接集群中任意一个可用结点都行)

./redis-cli –cluster reshard 192.168.229.121:7007

RedisCluster 集群搭建

第二步:输入要分配的槽数量

RedisCluster 集群搭建

输入:3000,表示要给目标节点分配3000个槽

第三步:输入接收槽的节点id

RedisCluster 集群搭建

第四步:输入源节点id

RedisCluster 集群搭建

Type 'all' to use all the nodes as source nodes for the hash slots. #从其他每个master上取一些哈希槽移动到目标节点,选择“all”

Type 'done' once you entered all the source nodes IDs. #指定要从哪些节点取哈希槽,输入各节点ID,以回车键分隔,完成后输入“done”指示节点指定完成

Source node #1:d1ce7d9db6086c41f13ef0ce3753f82a3bfc420f

Source node #2:5055b631a9b310417fa75948a5e473e2e2e1cfee

Source node #3:done

第五步:输入yes开始移动槽到目标节点id

RedisCluster 集群搭建

查看结果

RedisCluster 集群搭建

添加从节点

添加7008从结点,将7008作为7007的从结点

创建实例

[root@test1 bin]# cd /opt/lagou/software/redis-5.0.5/src
[root@test1 src]# make install PREFIX=/opt/lagou/redisCluster/7008

Hint: It's a good idea to run 'make test' ;)

INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
[root@test1 src]# cd /opt/lagou/redisCluster/7001/bin
[root@test1 bin]# cp redis.conf /opt/lagou/redisCluster/7008/bin
[root@test1 bin]# cd /opt/lagou/redisCluster/7008/bin
[root@test1 bin]# vi redis.conf
[root@test1 bin]# ./redis-server redis.conf
37923:C 29 Apr 2021 21:46:19.138 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
37923:C 29 Apr 2021 21:46:19.138 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=37923, just started
37923:C 29 Apr 2021 21:46:19.138 # Configuration loaded

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

./redis-cli –cluster add-node 192.168.229.121:7008 192.168.229.121:7007 –cluster-slave –cluster-master-id 95347e9e9214bc985f934e4ea4f14b84278f3d60

RedisCluster 集群搭建

RedisCluster 集群搭建

注意:如果原来该节点在集群中的配置信息已经生成cluster-config-file指定的配置文件中(如果cluster-config-file没有指定则默认为nodes.conf) ,这时可能会报错:

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

解决方法是删除生成的配置文件nodes.conf,删除后执行./redis-cli –cluster add-node 指令

缩容

删除的顺序是先删除Slave从节点,然后在删除Master主节点

删除7008节点,7008是7007节点的从节点

指定删除节点的IP地址和Port端口号,同时还要提供该从节点ID名

./redis-cli –cluster del-node 192.168.229.121:7008 b4634afbabab85dd421b3d3b9b6a5f5546ba02b0

RedisCluster 集群搭建

要想删除Master主节点,可能要繁琐一些。因为在Master主节点上有数据槽(slots),为了保证数据的不丢失,必须把这些数据槽迁移到其他Master主节点上,然后在删除主节点。

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

移除多少槽如图:创建输入3000,这里要输入2999,因为计数是从0开始的,切记。

接受槽的Master主节点ID:这个节点可以是任意一个主节点都可以,我选择7002,ID是:571a15faab579e8a0578060bb4ff75023517a5b1

从哪个主节点移除,该主节点是7007,ID是:95347e9e9214bc985f934e4ea4f14b84278f3d60

RedisCluster 集群搭建

RedisCluster 集群搭建

执行分区计划,选择yes。分区完成

RedisCluster 集群搭建

当前7007主节点已经没有数据槽了。

RedisCluster 集群搭建

删除7007主节点

./redis-cli –cluster del-node 192.168.229.121:7007 95347e9e9214bc985f934e4ea4f14b84278f3d60

删除成功

RedisCluster 集群搭建

原文链接:https://blog.csdn.net/Laozizuiku/article/details/116269864

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/16377

(0)
上一篇 2022年11月16日 22:23
下一篇 2022年11月16日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml