这里就不演示了,我这里安装的是 contos7.4 我的虚拟机IP地址:192.168.37.112
关闭防火墙 systemctl stop firewalld
cd /usr/local/src
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar -zxvf redis-3.2.9.tar.gz -C /usr/local
cd /usr/local/redis-3.2.9/
make
cd src
make install PREFIX=/usr/local/redis
cd ..
mv redis.conf /usr/local/redis
配置redis为后台启动
vi /usr/local/redis/redis.conf
将daemonize no 改成daemonize yes
计划集群中 Redis 节点的端口号为 9001-9006 ,端口号即集群下各实例文件夹。数据存放在 端口号/data 文件夹中
mkdir /usr/local/redis-cluster
cd /usr/local/redis-cluster/
在 /usr/local/redis-cluster 下创建 bin 文件夹,用来存放集群运行脚本,并把安装好的 Redis 的 src 路径下的运行脚本拷贝过来。
mkdir bin
cd /usr/local/redis-3.2.9/src
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin
现在从已安装好的 Redis 中复制一个新的实例到 9001 文件夹,并修改 redis.conf 配置。
cp -r /usr/local/redis /usr/local/redis-cluster/9001
cd /usr/local/redis-cluster/9001/redis
vi redis.conf
已经完成了一个节点了,其实接下来就是机械化的再完成另外五个节点,其实可以这么做:把 9001 实例 复制到另外五个文件夹中,唯一要修改的就是 redis.conf 中的所有和端口的相关的信息即可,其实就那么五个位置。开始操作
\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9002
\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9003
\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9004
\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9005
\cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9006
\cp -rf 命令是不使用别名来复制,因为 cp 其实是别名 cp -i,操作时会有交互式确认,比较烦人。
修改 9002-9006 的 redis.conf 文件 %S 是替换的意思
vi /usr/local/redis-cluster/9002/redis/redis.conf
:%s/9001/9002
:wq
vi /usr/local/redis-cluster/9003/redis/redis.conf
:%s/9001/9003
:wq
vi /usr/local/redis-cluster/9004/redis/redis.conf
:%s/9001/9004
:wq
vi /usr/local/redis-cluster/9005/redis/redis.conf
:%s/9001/9005
:wq
vi /usr/local/redis-cluster/9006/redis/redis.conf
:%s/9001/9006
:wq
实我们也就是替换了下面这四行:
port 9002
dir /usr/local/redis-cluster/9002/data/
cluster-config-file nodes-9002.conf
pidfile /var/run/redis_9002.pid
启动redis
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/9001/redis/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/9002/redis/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/9003/redis/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/9004/redis/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/9005/redis/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/9006/redis/redis.conf
ps aux | grep 'redis' 使用命令查询下redis是否启动成功
然后随便找一个节点测试试
/usr/local/redis-cluster/9001/redis/bin/redis-cli -h 192.168.37.112 -p 9001
set name 123456 会发现报错。。。。
(error) CLUSTERDOWN Hash slot not served
这是因为虽然我们配置并启动了 Redis 集群服务,但是他们暂时还并不在一个集群中,互相直接发现不了,而且还没有可存储的位置,就是所谓的slot(槽)。我们需要安装ruby
由于 Redis 集群需要使用 ruby 命令,所以我们需要安装 ruby 和相关接口。
yum install ruby
yum install rubygems
gem install redis 如果卡住了,下载不了的话,就需要使用本地上传方式 上传文件到/usr/local下面
我把这个文件上传搭配百度云上面了,大家可以去上面下载
https://pan.baidu.com/s/1P2h4vrtdk6Y5b73bRG5oMA
cd /usr/local
gem install -l redis-3.2.1.gem
然后开启集群
/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.37.112:9001 192.168.37.112:9002 192.168.37.112:9003 192.168.37.112:9004 192.168.37.112:9005 192.168.37.112:9006
集群开启成功,9001-9003为主节点, 9004-9006位从节点 3主3备
然后 输入 yes 进行确认
依然是通过客户端命令连接上,通过集群命令看一下状态和节点信息等。
/usr/local/redis-cluster/9001/redis/bin/redis-cli -c -h 192.168.37.112 -p 9001
会发现,我们连接的是9001端口,然后执行命令后, 值是存在 9002端口对应的redis上面,然后自动跳转到了9002节点
代表我们集群环境安装成功
我们可以使用 info 命令查看下 节点信息 发现9002标识是主节点,下面有个从节点是 9005
spring:
redis:
database: 1
# host: 192.168.37.110
# port: 6379
# password: 123
jedis:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0
timeout: 10000
#集群连接 需要把 上面的 host port 注释掉
cluster:
nodes:
- 192.168.37.112:9001
- 192.168.37.112:9002
- 192.168.37.112:9003
- 192.168.37.112:9004
- 192.168.37.112:9005
- 192.168.37.112:9006
连接测试我就不展示了 可以参考我博客中的 另外一篇,springboot2.0集成redis 展示yml里面配置有点差别而已
https://blog.csdn.net/jxpxlinkui/article/details/101765931
总结一下
这一篇 Redis 集群部署搭建的文章真的是一步一步的走下来的,只要你安装我的步骤来,就保证你能成功搭建一个 Redis 集群玩玩,也可以这么说,除了步骤繁琐外,几乎不存在技术含量,估计能看完的人都感觉累(说真的,写这种文章真的很累人)。
接下来可能就是动态扩容、增加节点和减少节点,重新分配槽大小等,当然,还有最重要的就是怎么和我们程序结合起来,以及如何更好的把 Redis 缓存集群发挥出应有的效果,这些才是最重要的。