本文所用的Redis是5.0.8所以和旧版的4.0.X不同的地方在于创建集群的方式的变化
所用系统:Centos7.7 64位
本文设置的统一密码为:shunleite
Spring Boot 2.0+
一、集群的原理
在Redis集群中,所有的Redis节点彼此互联,节点内部使用的二进制协议优化传输速度和带宽。
当一个节点挂掉后,集群中超过半数的节点坚持失效时才认为该节点已失效。Redis集群中的任意
节点都以和Java客户端连接。Redis集群上的数据分配是才用哈希槽(HASH SLOT),Redis集群内置
了16384个哈希槽,当有数据需要储存时,Redis会首先使用CRC16算法对Key进行计算,将计算获得
的结果对16384取余,这样每一个key都会对应一个取值在0~16383之间的哈希槽,Redis则根据这个
余数将该条数据储存到对应的Redis节点上,程序猿们就可根据每个Redis实例的性能来调整每个Redis
实例上哈希槽的分布范围
二、分布式集群规划
需要了解一些概念:
一个master(主)可以拥有多个slave(从),而一个slave(从)只能拥有一个master(主)
另外官方说明每个集群中至少需要三个主master才能正常运行
本案例采取每个服务器上对应的每个端口来区别每一个不同的Redis服务器
主节点:111.67.194.61:6661,111.67.194.60:6662,111.67.194.63:6663
从节点:111.67.194.64:6664,111.67.194.65:6665,111.67.202.206:6666
两个用来测试添加主从数据库的节点: 111.67.194.70:6667(主),111.67.194.108:6668(从)
三、Redis集群配置环节
1.安装集群管理工具(集群老大哥服务器111.67.194.61由它配置Ruby环境,也只在这台)
因为Redis集群工具依赖Ruby环境,首先需要安装Ruby环境,又因为centos7 yum库中
的默认的Ruby版本太低,所以就搞个便捷的RVM工具(以下步骤是下载配置rvm公钥)
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
#上面个木有成功就下面那个
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -L get.rvm.io | bash -s stable
source /usr/local/rvm/scripts/rvm
看下RVM是否安装成功
rvm list known
如图所示出现了绿色那就成功了
选个比较稳定的版本安(教程所出时间为2020/4/5)
rvm install 2.6.5
最后安装Redia依赖
gem install redis
2.安装Redis:
①下载Redis
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
没有wget命令的话就需要安装,然后再执行上面命令
yum install wget
②安装Redis
先创建个redisCluster文件夹,将下载的文件移动过去然后再安装
mkdir redisCluster
cp -f ./redis-5.0.8.tar.gz ./redisCluster
cd redisCluster
tar -zxvf redis-5.0.8.tar.gz
cd redis-5.0.8
make MALLOC=libc
make install
③其它每台各进行第②小步(该操作是每个服务器都必须要的操作)
然后在每台服务器(包括老大哥服务器111.67.194.61)的redisCluster下创建一个文件夹(以便于生产后面在单台上添加)
分别为文件夹6661 6662 6663 6664 6665 6666 (与前面规划部分一致)
另外每个文件夹下面都需要把上层目录中redis-5.0.8目录下的redis.conf文件复制一份到该目录
cp -f ../redis-5.0.8/redis.conf ./
接着对每台服务器666x文件夹下的redis.conf的配置进行修改,所修改的配置如下(是修改不是添加)
port 6661
#bind 127.0.0.1
cluster-enabled yes
cluster-config-file nodes-6661.conf
protected no
daemonize yes
requirepass shunleite
masterrauth shunleite
提一下:如果使用vi的话那你就需要/字符串模式慢慢找然后修改
第一为该节点端口与文件夹名一一对应
第二行是将bind部分注释掉,因为默认是本地乱接,注释掉就可以外网连接Redis了
第三行表示开启集群
第四行表示该集群节点的配置文件(注意nodes-666x.conf格式配置方便管理)
第五行就是关闭保护毕竟你第七行用了密码
第六行表示允许Redis后台运行
第七行就是设置密码了
第八行因为第七行设置了密码所以他就需要个密码认证
④开启Redis实例
redis-server /root/redisCluster/6661/redis.conf
redis-server /root/redisCluster/6662/redis.conf
redis-server /root/redisCluster/6663/redis.conf
redis-server /root/redisCluster/6664/redis.conf
redis-server /root/redisCluster/6665/redis.conf
redis-server /root/redisCluster/6666/redis.conf
⑤为了能够远程连接上Redis,还需要关闭防火墙(或者开启相应端口)
systemctl stop firewalld.service
systemctl disable firewalld.service
回到老大哥服务器(111.67.194.61)后切到redisCluster目录下
3.创建集群(该步骤在老大哥服务器运行)
提一下:因为设置了密码,一般来说,Redis5.0.x以下的版本是需要将redis-trib.rb文件复制到redisCluster目录下的
然而我们用的不是(嘻嘻)如果是就需要移
而且还需修改复制后的redis-trib.rb文件,将@r = Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60)这行
修改成@r = Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60, :password=>"shunleite")
然后操作就把后面的redis-cli -a shunleite --cluster的部分改成./redis-trib.rb(在你redisCluster目录下)即可(虽然有些细微的不一样比如删除啥
子,但大多一样,毕竟官方只是进行移植集成操作)
创建集群
redis-cli -a shunleite --cluster create 111.67.194.61:6661 111.67.194.60:6662 111.67.194.63:6663 111.67.194.64:6664 111.67.19