Redis集群的离线安装以及原理理解
本文主要是记录一下Redis集群在linux系统下离线的安装步骤,毕竟在生产环境下一般都是无法联网的,Redis的集群的Ruby环境安装过程还是很麻烦的,涉及到很多的依赖的安装,所以写了一个文章来进行记录。本文分为两部分,第一部分先通过原生命令的安装来实现redis集群的部署,通过原生命令的安装对于了解redis集群的实现原理有很大的帮助,第二部分通过官方工具Ruby来进行Redis集群的安装,通过Ruby安装Redis集群的时候主要是搭建好Ruby环境,真正Redis集群的安装配置通过Ruby还是很简单的。
一、通过原生命令安装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成为主节点
总结:虽然整个过程是让人很糟心的,但是总归是成功了,实践出真理。
Redis集群的离线安装以及原理理解的更多相关文章
- Hadoop_Hbase集群完全离线安装[CDH 5.13.1]
here 一.环境准备:(这儿准备了三台虚拟机:内存6-3-3) JDK: -openjdk rpm -e java--openjdk-headless rpm -e java--openjdk-he ...
- Redis集群增加节点和删除节点
本文主要是承接上一篇文章Redis集群的离线安装成功以后,我们如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容),也就是集群的伸缩,集群伸缩的原理是控制虚拟槽和数据在节点之 ...
- Redis单机版以及集群版的安装搭建以及使用
1,redis单机版 1.1 安装redis n 版本说明 本教程使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install g ...
- Redis单机版和集群版的安装和部署
1.单机版的安装 本次使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install gcc-c++ 1.1 安装redis 1.下载re ...
- LINUX安装REDIS集群
linux安装单机版redis已经在另一篇文章说过了,下边来搞集群,环境是新浪云服务器: redis3.0以后开始支持集群. 前言:redis用什么做集群? 用一个叫redis-trib.rb的rub ...
- 在linux环境下安装redis并且搭建自己的redis集群
此文档主要介绍在linux环境下安装redis并且搭建自己的redis集群 搭建环境: ubuntun 16.04 + redis-3.0.6 本文章分为三个部分:redis安装.搭建redis集群 ...
- 模拟安装redis5.0集群并通过Java代码访问redis集群
在虚拟机上模拟redis5.0的集群,由于redis的投票机制,一个集群至少需要3个redis节点,如果每个节点设置一主一备,一共需要六台虚拟机来搭建集群,此处,在一台虚拟机上使用6个redis实例来 ...
- 剑指架构师系列-Redis集群部署
初步搭建Redis集群 克隆已经安装Redis的虚拟机,我们使用这两个虚拟机中的Redis来搭建集群. master:192.168.2.129 端口:7001 slave:192.168.2.132 ...
- 利用docker部署redis集群
目录 一.首先配置redis.conf文件,... 1 1.获取配置文件... 1 2.修改各配置文件的参数... 2 二.下载redis镜像.启动容器... 2 1.创建网络... 2 2.拉取镜像 ...
随机推荐
- springboot整合websocket高级版
目录 sockjs介绍 产生的原因 环境搭建 springboot整合sockjs 使用场景 聊天室开发 点对点通信 群聊 效果 总结 加入战队 微信公众号 上一章节我们说了websocket的优缺点 ...
- 重学计算机组成原理(七)- 程序无法同时在Linux和Windows下运行?
既然程序最终都被变成了一条条机器码去执行,那为什么同一个程序,在同一台计算机上,在Linux下可以运行,而在Windows下却不行呢? 反过来,Windows上的程序在Linux上也是一样不能执行的 ...
- (二十九)c#Winform自定义控件-文本框(二)
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- 集合中Iterator迭代器的使用以及实现原理。
collection集合元素通用的获取方式,在取之前先要判断集合中有没有元素,如果有就把这个元素取出来,继续在判断,如果还有就再取出来,一直把集合中的元素全取出来,这种去出方式叫做迭代. 迭代器的作用 ...
- 设计一个完美的http缓存策略
1.前言 作为一个前端,了解http缓存是非常必要,它不仅是面试的必要环节,也更是实战开发中必不可少需要了解的知识点,本文作者将从缓存的概念讲到如何在业务中设计一个合理的缓存架构,带你一步一步解开ht ...
- 吉特日化MES-电子批记录普通样本
在实施吉特日化配料系统的时候,客户希望一键式生成生产过程电子批记录,由于功能的缺失以及部分设备的数据暂时还无法完全采集到,先做一个普通样本的电子批记录格式打印. 电子批记录包含如下几个部分: 1. ...
- 因为配置了Always-On导致的无法Drop Login...
一个sysadmin离职了,但是因为之前是他配置的Always-on,所以试图Drop他的login就会失败,原因是这个login会赋予一个叫做“Hadr_endpoint”的endpoint权限,并 ...
- Java函数式编程原理以及应用
一. 函数式编程 Java8所有的新特性基本基于函数式编程的思想,函数式编程的带来,给Java注入了新鲜的活力. 下面来近距离观察一下函数式编程的几个特点: 函数可以作为变量.参数.返回值和数据类型. ...
- Linux设备驱动程序学习----3.模块的编译和装载
模块的编译和装载 更多内容请参考Linux设备驱动程序学习----目录 1. 设置测试系统 第1步,要先从kernel.org的镜像网站上获取一个主线内核,并安装到自己的系统中,因为学习驱动程序的编写 ...
- 2019强网杯babybank wp及浅析
前言 2019强网杯CTF智能合约题目--babybank wp及浅析 ps:本文最先写在我的新博客上,后面会以新博客为主,看心情会把文章同步过来 分析 反编译 使用OnlineSolidityDec ...