Redis集群搭建

集群搭建

redis使用crc16算法确定当前key的处于哪个slot,crc16算法会将一切key转化为0-16383范围内,然后根据slot范围找对应master进行操作

(现在好像不需要安

装ruby了,直接使用redis-cli即可(因为使用redis-trib.rb时提示我,我们需要使用redis-cli替换,因为redis-trib.rb功能被移除))

按照这个搭建应该可以

https://blog.csdn.net/aloneno/article/details/96370167

为了测试,我不使用docker了!下方redis安装!(官方给的)

【我使用6.0什么版本make直接报错!】

$ wget https://download.redis.io/releases/redis-6.2.1.tar.gz
$ tar xzf redis-6.2.1.tar.gz
$ cd redis-6.2.1
$ make

前置配置环境

https://www.jianshu.com/p/3d014c1240fc

https://blog.csdn.net/HeyShHeyou/article/details/108937863

集群维护节点,节点维护槽slot,每个槽负责数据存储

yum install -y ruby rubygenms 这样安装版本太低,使用上方链接进行安装

步骤:

  1. 创建文件夹7000 7001 ... 7006
  2. 每个文件夹放一个redis.conf
  3. 修改配置文件中
bind注释掉或者改为0.0.0.0
port 7000

dbfilename "dump_7000.rdb"

cluster-enabled yes

cluster-config-file nodes-7000.conf

cluster-node-timeout 5000

appendonly yes

appendfilename "appendonly-7000.aof"

#设置为守护进行启动,因为这个和docker不太一样,否则它会占用我们的端口
daemonize yes 

然后对于一些rdb文件和aof文件名字,我们自己修改为 【名-端口】 这样来命名
  1. 都这样改之后启动7台机器

    [root@nxj-01 redis-6.2.1]# cd src/
    [root@nxj-01 src]# ./redis-server ../7000/redis.conf 
    [root@nxj-01 src]# ./redis-server ../7001/redis.conf 
    [root@nxj-01 src]# ./redis-server ../7002/redis.conf 
    [root@nxj-01 src]# ./redis-server ../7003/redis.conf 
    [root@nxj-01 src]# ./redis-server ../7004/redis.conf 
    [root@nxj-01 src]# ./redis-server ../7002/redis.conf 
    [root@nxj-01 src]# ./redis-server ../7005/redis.conf 
    [root@nxj-01 src]# ./redis-server ../7006/redis.conf 
    [root@nxj-01 src]# ps -ef |grep redis
    root      42139      1  0 10:13 ?        00:00:00 ./redis-server *:7000 [cluster]
    root      42170  35241  0 10:14 pts/3    00:00:00 ./redis-cli -p 7000
    root      42202      1  0 10:14 ?        00:00:00 ./redis-server *:7001 [cluster]
    root      42212      1  0 10:14 ?        00:00:00 ./redis-server *:7002 [cluster]
    root      42222      1  0 10:14 ?        00:00:00 ./redis-server *:7003 [cluster]
    root      42231      1  0 10:14 ?        00:00:00 ./redis-server *:7004 [cluster]
    root      42245      1  0 10:15 ?        00:00:00 ./redis-server *:7005 [cluster]
    root      42253      1  1 10:15 ?        00:00:00 ./redis-server *:7006 [cluster]
    root      42264   3243  0 10:15 pts/0    00:00:00 grep --color=auto redis
    
    
  2. src下有一个redis-trib.rb 这个是启动集群的脚本!

  3. 创建集群

下方两个使用redis-trib.rb命令被弃用
./redis-trib.rb create --replicas 1 192.168.2.84:7000 192.168.2.84:7001 192.168.2.84:7002 192.168.2.84:7003 192.168.2.84:7004 192.168.2.84:7005 
 
  ./redis-cli create --replicas 1 192.168.2.84:7000 192.168.2.84:7001 192.168.2.84:7002 192.168.2.84:7003 192.168.2.84:7004 192.168.2.84:7005 
--replicas

( 意思就是作为副本节点的数量,这里写1,那么就会把前3台作为master,后3台分别作为slave)
有密码需要加-a 参数
./redis-cli --cluster create 192.168.2.84:7000 192.168.2.84:7001 192.168.2.84:7002 192.168.2.84:7003 192.168.2.84:7004 192.168.2.84:7005 --cluster-replicas 1 -a 123456

  1. 回车后,询问时输入yes,集群就启动了,将16384个slot均分到集群的各个master上

    M: b270facc8241fae7a13d938b56c7a0ab5d834221 192.168.2.84:7000
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    M: 0e61dc494d867da96d1965594ae62eb414969221 192.168.2.84:7002
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    S: 6b9481552060f2011fffbbf642b6b188610d26a3 192.168.2.84:7004
       slots: (0 slots) slave
       replicates 4a65174c30850dcd637626d20a77cdca28d56fb6
    S: d9179d232fdd7a401bdefb2873aab4938a11dc8d 192.168.2.84:7003
       slots: (0 slots) slave
       replicates b270facc8241fae7a13d938b56c7a0ab5d834221
    M: 4a65174c30850dcd637626d20a77cdca28d56fb6 192.168.2.84:7001
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    S: 8fc968f7d3aa04860ca27fe71960dce23a3428c9 192.168.2.84:7005
       slots: (0 slots) slave
       replicates 0e61dc494d867da96d1965594ae62eb414969221
    
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    
  2. 使用如下指令查看集群状态
    ./redis-cli --cluster check 192.168.2.84:7000 -a 123456
    

    9.集群方式操作:(需要加-c操作)

    ./redis-cli -p 7000 -c
    

集群中从节点不负责写,仅仅负责集群的同步

#往现有集群中添加主节点

./redis-cli --cluster add-node 192.168.2.84:7006 192.168.2.84:7000 -a 123456
加入进去默认分配0个槽

#往现有集群中添加从节点

# 不指定哪个主节点的副本节点,则redis会随机给副本少的主节点增加当前副本节点
./redis-cli --cluster add-node --slave 192.168.2.84:7007 192.168.2.84:7000 -a 123456 

#为确定的master节点添加副本节点
./redis-cli --cluster add-node --slave --master-id 108d6dc450616afd4b41fc06983f07fc2b496e24 192.168.2.84:7007 192.168.2.84:7000 -a 123456 
(其中master-id通过./redis-cli --cluster check 192.168.2.84:7000 -a 123456可以查看)

#删除副本节点

被删除的一定是要没有分配hash槽的

[ip:port][节点id]
./redis-cli --cluster del-node 192.168.2.84:7006 108d6dc450616afd4b41fc06983f07fc2b496e24 -a 123456

session共享

<!--session共享-->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

并启用@EnableRedisHttpSession

原文地址:https://www.cnblogs.com/ningxinjie/p/14596443.html