共计 6598 个字符,预计需要花费 17 分钟才能阅读完成。
这篇文章主要介绍了如何离线安装 Redis 集群,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。
一、通过原生命令安装 Redis 集群(仅做理解 Redis 集群原理使用)
1. 配置开启所需要的 Redis 节点
因为这里只是做一个简单的 Redis 集群原理演示,所以假设此时 Redis 服务已经安装完毕,在 config 文件夹下创建六个 redis.conf 配置文件,分别为 redis-7000.conf、redis-7001.conf、redis-7002.conf、redis-7003.conf、redis-7004.conf、redis-7005.conf。其内容如下:
port ${port}
daemonize yes
dir /opt/redis/redis/data/
dbfilename dump-${port}.rdb
logfile ${port}.log
cluster-enabled yes // 开启节点的集群功能
cluster-config-file nodes-${port}.conf
cluster-require-full-coverage no
cluster-node-timeout 15000
依次启动六个 redis 后台服务
redis-server redis-7000.conf
redis-server redis-7001.conf
redis-server redis-7002.conf
redis-server redis-7003.conf
redis-server redis-7004.conf
redis-server redis-7005.conf
ps -ef | grep redis 查看启动情况:
2. 通过集群命令 meet 完成节点之间的相互通信
meet:cluster meet ip port
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7002
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7003
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7004
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7005
通过端口为 7000 的节点,其他的节点也可以相互感知到对方的存在,然后每两个节点之间都会通信。
验证:登录端口号为 7000 节点以后,分别输入 cluster nodes 和 cluster info 命令。
3. 指派槽
完成了节点之间的通信以后,就需要给每个主节点分配虚拟槽,一共存在 16384 个 slot,redis 节点之间互相知道哪个槽在哪个节点上,如果数据访问到了不属于自己的槽的 redis,redis 会告诉数据应该去访问哪个 redis
指派槽的命令:cluster addslots slot[slot…]
redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0…5641}
redis-cli -h 127.0.0.1 -p 7001 cluster addslots {5642…10922}
redis-cli -h 127.0.0.1 -p 7002 cluster addslots {10923…16383}
在这里发现使用 addslots 只能一个一个输入,感觉非常扯,使用数组的方式 redis 会报错,用网上的解决办法是将大括号里的 三个点改为两个点,我试了试不行的,如果有什么好的解决办法可以提供一下。
4. 配置节点的主从关系
cluster replicate node-id
redis-cli -h 127.0.0.1 -p 7003 cluster replicate ${node-id-7000}
redis-cli -h 127.0.0.1 -p 7004 cluster replicate ${node-id-7001}
redis-cli -h 127.0.0.1 -p 7005 cluster replicate ${node-id-7002}
到此通过原生命令安装 Redis 集群就已经完成了,中间的步骤存在问题,无法分配 slots, 但是可以帮助简单的理解一下由 Redis 的单节点到 Redis 的集群都需要做什么工作。
二、通过 Ruby 离线安装 Redis 集群
1. 安装环境以及安装包说明
系统:Centos7(安装的时候选择安装了 gcc)
安装包:redis-4.0.6.tar.gz //redis 的安装包
ruby-2.5.6.tar.gz // 集群搭建需要 Ruby 环境
rubygems-3.0.6.zip //redis 集群需要的 ruby 插件,rubygems 是 ruby 的一个包管理工具,通过 rubygems 安装 redis-3.2.2.gem
zlib-1.2.11.tar.gz // 可能缺少的基础环境 zlib
openssl-1.0.2t.tar.gz // 可能缺少的基础环境 openssl
2. 安装步骤
(1) 解压编译 redis
mkdir /usr/local/redis // 创建 redis 工作目录
cp redis-4.0.6.tar.gz /usr/local/redis // 将 redis 的安装包拷贝到 redis 目录下
cd /usr/local/redis // 进去 redis 文件下
tar -vxf redis-4.0.6.tar.gz // 解压缩
ln -s redis-4.0.6 redis // 建立软连接
cd redis // 进入 redis 目录下
make make install
// 编译安装 redis
(2) 创建集群目录
cd /usr/local/redis
mkdir redis_cluster // 在 redis 安装目录下创建 redis_cluster 目录
mkdir redis700{0,1,2,3,4,5}// 批量创建六个 redis 节点工作目录,三主三从。
(3) 配置 redis.conf
cd /usr/local/redis/redis_cluster // 进去集群工作目录
vim redis.conf // 创建 redis.conf 文件并添加一下内容
port 7000 // 配置集群的端口
bind 本机的 IP // 这里的默认配置是 127.0.0.1 改为内网 ip。daemonize yes // 允许 redis 在后台运行
pidfile /var/run/redis-7000.pid // 改成和端口一致
cluster-enabled yes // 开启集群 把注释去掉
cluster-config-file node-7000.conf // 集群的配置,和端口一致
cluster-node-timeout 15000 // 请求超时,默认为 15 秒
appendonly yes // aof 日志开启,有需要就开启,每一次写操作都会记录一条日志。
将 redis.conf 分别 copy 到六个节点的文件下
cp redis.conf redis7000/ // 将配置文件拷贝到 redis7000 节点的工作目录下
cp redis.conf redis7001/
cp redis.conf redis7002/
cp redis.conf redis7003/
cp redis.conf redis7004/
cp redis.conf redis7005/
因为配置文件是根据 7000 端口模本的配置写的,所以除了 redis7000 目录下的 redis.conf, 其他工作目录下的配置文件都需要将文件内容中的端口号修改为对应的工作目录的端口号。
(4) 启动服务
cd /usr/local/redis/redis_cluster
依次启动所有节点
redis-server redis7000/redis.conf
redis-server redis7001/redis.conf
redis-server redis7002/redis.conf
redis-server redis7003/redis.conf
redis-server redis7004/redis.conf
redis-server redis7005/redis.conf
查看启动情况:ps -ef | grep redis
(5) 安装 ruby
mkdir /usr/local/ruby // 创建 ruby 工作目录
cp ruby-2.5.6.tar.gz /usr/local/ruby // 将安装包拷贝到该目录下
cd /usr/local/ruby // 进入 ruby 工作目录
tar -vxf ruby-2.5.6.tar.gz // 解压缩
cd ruby-2.5.6/
./configure
make make install
查看安装情况:ruby -v
(6) 安装 rubygems
mkdir /usr/local/rubygems // 创建 rubygems 工作目录
cp rubygems-3.0.6.zip /usr/local/rubygems // 将安装包拷贝到该目录下
cd /usr/local/rubygems // 进入 ruby 工作目录
unzip rubygems-3.0.6.zip // 解压缩
cd rubygems-3.0.6/
ruby setup.rb
执行 ruby setup.rb 的时候出现以下错误:
解决办法:缺少了 zlib 包,需要安装 zlib。
(7) 安装 zlib
mkdir /usr/local/zlib // 创建 zlib 工作目录
cp zlib-1.2.11.tar.gz /usr/local/zlib // 将安装包拷贝到该目录下
cd /usr/local/zlib // 进入 zlib 工作目录
tar -vxf zlib-1.2.11.tar.gz // 解压缩
cd zlib-1.2.11/
./configure --prefix=/usr/local/zlib
make
make install
(8) 编译 ruby 中的 zlib
cd /usr/local/ruby/ruby-2.5.6/ext/zlib/
ruby extconf.rb
出现以下错误信息:
发现原来是要将文件安装到本地运行库的里面才行,所有安装的时候需要额外配置信息。重新执行一下命令:
ruby extconf.rb --with-zlib-include=/usr/local/zlib/include/ --with-zlib-lib=/usr/local/zlib/lib // 会生成一个 Makefile 文件
继续下一步:make make install
又出现报错信息:
这个时候打开 ext/zlib/Makefile 文件,找到下面一行把路径进行修改一下。
zlib.o: $(top_srcdir)/include/ruby.h 改成:zlib.o: ../../include/ruby.h
如下图:
修改完成,然后保存, 然后重新:make make install
zlib 的错误都解决以后再继续重新安装 rubygems。
cd /usr/local/rubygems/rubygems-3.0.6
ruby setup.rb
这次就安装成功了,如下图:
(9) 安装 redis-3.0.0.gem
cp redis-3.0.0.gem /usr/local/redis/redis
cd /usr/local/redis/redis
gem install redis-3.3.0.gem
出现以下错误信息:
因为 Redis 集群交互是需要 OpenSSL,所系我们还需要安装 OpenSSL。
(10) 安装 openssl
mkdir /usr/local/openssl // 创建 openssl 工作目录
cp openssl-1.0.2t.tar.gz /usr/local/openssl // 将安装包拷贝到该目录下
cd /usr/local/openssl // 进入 openssl 工作目录
tar -vxf openssl-1.0.2t.tar.gz // 解压缩
cd openssl-1.0.2t/
./config -fPIC --prefix=/usr/local/openssl enable-shared
./config -t
make make install
安装成功:
(11) 编译 ruby 中的 openssl
cd /usr/local/ruby/ruby-2.5.6/ext/openssl/
ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib 此时会生成 Makefile 文件,下面出现的错误需要修改本文件
make make install
出现以下错误信息:
解决办法:vim Makefile 把 Makefile 文件中所有的 $(top_srcdir) 换成 ../.. 注意替换所有
替换完成后,重新进行
make make install
安装成功:
安装成功以后继续进行第九步的安装 redis-3.0.0.gem
cd /usr/local/redis/redis/
gem install redis-3.0.0.gem
安装成功:
到这里 ruby 环境总算是安装成功了,真是不容易啊,其实 redis cluster 的安装的主要内容还是上面的 Ruby 环境的安装配置过程。
(12) 启动 redis 集群
cd /usr/local/redis/redis/src/
在该目录下执行命令:
./redis-trib.rb create --replicas 1 192.168.182.132:7000 192.168.182.132:7001 192.168.182.132:7002 192.168.182.132:7003 192.168.182.132:7004 192.168.182.132:7005
输入 yes
安装成功:
(13) 验证集群状态
以普通方式连接到 7002 端口的节点 redis-cli -p 7002 -h 192.168.182.132
参数说明:-p port 端口 -h host 主机 -c cluster 集群
连接进集群之后 输入 ping , 如果响应了 pong 表示连接集群成功;
CLUSTER INFO 列出当前节点的信息,CLUSTER NODES 列出当前集群中的节点信息;
执行命令:set hello word
7002 节点报错,客户端该数据应该使用 7000 端口的客户端才能添加 (是因为登录的时候没有加 -c)
登录 7000 端口的客户端重新 set hello world,添加数据成功 (上次在 7002 中添加 hello world 没有成功,所以在 7000 中获取 hello 是没有内容的)
使用集群方式连接集群 redis-cli -p 7003 -h 192.168.182.132 -c(7003 是 7000 的备机)
查询 hello:
get hello
重新设置 hello 的值:
set hello java
设置成功:
通过对比发现如果登录的时候不加 -c(非集群模式登录,登录的是单节点), 添加数据时,如果数据的 key 的虚拟槽位没有在该 redis 上则不能添加成功,即单节点登录,对 redis 的操作不会进行重定向。
(14) 验证集群的主从配置
关闭 7002 端口的节点
kill -9 7002redis 节点的 pid
登录到 7000 端口的节点:
redis-cli -p 7000 -h 192.168.182.132 -c
cluster nodes
CLUSTER NODES 前面的字符串是节点的 id。从这个命令还可以知道哪些节点还活着,哪些节点已经挂了。带着 fail 的都是已经挂掉的节点。
集群信息显示 7002 节点已经 down 掉,7005 取代 7002 成为主节点
感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“如何离线安装 Redis 集群”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!