1、redis-cluster(redis集群)
redis-cluster投票容错机制:Redis 之间通过互相的 ping-pong 判断是否节点可以连接上。如果有一半以上的节点去ping 一个节点的时候没有回应,集群就认为这个节点宕机了,然后去连接它的从节点(必须主备模式)。
如果某个节点和所有从节点全部挂掉,集群就进入 fail 状态。 如果有一半以上的主节点宕机,那么集群同样进入 fail 了状态。
由于投票容错机制集群最少需要3个节点
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。
根据Redis槽的概念集群最多16384个
2、集群搭建
Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机,因此Redis集群至少需要6台服务器。
搭建伪分布式。使用一台虚拟机运行6个redis实例。需要修改redis的端口号为7001-7006.
在/usr/local目录下创建redis-cluster目录,并将redis目录下的redis安装文件复制到redis-cluster目录
cd /usr/local
mkdir redis-cluster
cp redis/bin redis-cluster/redis01 -r
删除复制文件中的数据文件包括dump.rdb和.aof文件
cd /usr/local/redis-cluster/redis01
rm -f dump.rdb
修改redis.conf文件
vim redis.conf
#修改端口号
port 7001
#将 cluster-enabled yes的注释打开
将redis01再复制5份
cd ..
cp -r redis01/ redis02
...
cp -r redis01/ redis06
分别修改端口号为7002-7006
批处理启动6个redis服务
#创建一个批处理文件
vim start-all.sh
加入代码
cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..
#保存退出
现在文件还不能执行,需要授权
chmod u+x start-all.sh
#执行
./start-all.sh
查看是否启动成功
ps aux|grep redis
搭建集群需要redis源文件的.rb脚本
找到redis源文件中的src/redis-trib.rb文件,并将之复制到redis-cluster目录下
cd /usr/local/redis/redis-5.0.3/src
cp redis-trib.rb /usr/local/redis-cluster/
因为使用的是ruby脚本搭建服务器,所以需要ruby环境
2.1、安装ruby环境
#这两个旧版本先别装会报错,往后看,装新版本
yum install ruby
yum install rubygems
下载 redis-3.0.0.gem
下载链接:redis-3.0.0.gem
提取码:fs2u
将redis-3.0.0.gem传到linux系统下并安装
安装gem install redis-3.0.0.gem
执行redis-trib.rb脚本文件
./redis-trib.rb create --replicas 1 ip:7001 ip:7002 ip:7003 ip:7004 ip:7005 ip:7006
报错
ruby版本问题
卸载低版本
yum remove -y ruby
yum remove -y rubygems
官网下载新版本
ruby
#解压
tar –zxvf ruby-2.6.6.tar.gz
cd ruby-2.6.6
./configure
make
make install
进入任意redis实例
cd redis01
#新版本命令修改为
./redis-cli --cluster create ip:7001 ip:7002 ip:7003 ip:7004 ip:7005 ip:7006 --cluster-replicas 1
这儿有个坑!!!下面是输入yes分配槽,只输y不行
2.2、连接节点操作数据库
进入任意实例使用redis-cli连接节点
cd redis01
./redis-cli -h ip地址 -p 7001 -c
计算出槽后将数据放在了7003上
一、Redis服务器搭建与学习
三、SSM整合Redis Cluster(Redis集群)
四、Redis集群踩的坑及报错记录并解决