Redis集群搭建
集群搭建
redis使用crc16算法确定当前key的处于哪个slot,crc16算法会将一切key转化为0-16383范围内,然后根据slot范围找对应master进行操作
(现在好像不需要安
装ruby了,直接使用redis-cli即可(因为使用redis-trib.rb时提示我,我们需要使用redis-cli替换,因为redis-trib.rb功能被移除))
按照这个搭建应该可以
为了测试,我不使用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
前置配置环境
集群维护节点,节点维护槽slot,每个槽负责数据存储
yum install -y ruby rubygenms 这样安装版本太低,使用上方链接进行安装
步骤:
- 创建文件夹7000 7001 ... 7006
- 每个文件夹放一个redis.conf
- 修改配置文件中
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文件名字,我们自己修改为 【名-端口】 这样来命名
都这样改之后启动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
src下有一个redis-trib.rb 这个是启动集群的脚本!
创建集群
下方两个使用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
回车后,询问时输入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.
使用如下指令查看集群状态 ./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