本文主要是记录一下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集群的离线安装以及原理理解的更多相关文章

  1. Hadoop_Hbase集群完全离线安装[CDH 5.13.1]

    here 一.环境准备:(这儿准备了三台虚拟机:内存6-3-3) JDK: -openjdk rpm -e java--openjdk-headless rpm -e java--openjdk-he ...

  2. Redis集群增加节点和删除节点

    本文主要是承接上一篇文章Redis集群的离线安装成功以后,我们如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容),也就是集群的伸缩,集群伸缩的原理是控制虚拟槽和数据在节点之 ...

  3. Redis单机版以及集群版的安装搭建以及使用

    1,redis单机版 1.1   安装redis n  版本说明 本教程使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install g ...

  4. Redis单机版和集群版的安装和部署

    1.单机版的安装 本次使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install gcc-c++ 1.1 安装redis 1.下载re ...

  5. LINUX安装REDIS集群

    linux安装单机版redis已经在另一篇文章说过了,下边来搞集群,环境是新浪云服务器: redis3.0以后开始支持集群. 前言:redis用什么做集群? 用一个叫redis-trib.rb的rub ...

  6. 在linux环境下安装redis并且搭建自己的redis集群

    此文档主要介绍在linux环境下安装redis并且搭建自己的redis集群 搭建环境: ubuntun 16.04 + redis-3.0.6 本文章分为三个部分:redis安装.搭建redis集群 ...

  7. 模拟安装redis5.0集群并通过Java代码访问redis集群

    在虚拟机上模拟redis5.0的集群,由于redis的投票机制,一个集群至少需要3个redis节点,如果每个节点设置一主一备,一共需要六台虚拟机来搭建集群,此处,在一台虚拟机上使用6个redis实例来 ...

  8. 剑指架构师系列-Redis集群部署

    初步搭建Redis集群 克隆已经安装Redis的虚拟机,我们使用这两个虚拟机中的Redis来搭建集群. master:192.168.2.129 端口:7001 slave:192.168.2.132 ...

  9. 利用docker部署redis集群

    目录 一.首先配置redis.conf文件,... 1 1.获取配置文件... 1 2.修改各配置文件的参数... 2 二.下载redis镜像.启动容器... 2 1.创建网络... 2 2.拉取镜像 ...

随机推荐

  1. requestAnimationFrame 兼容方案

    [toc] 编写涉及:css, html, js 在线演示codepen html代码 <div class="roll-box"> <div class=&qu ...

  2. React 练习项目,仿简书博客写作平台

    Introduction 技术栈:react + redux + react-router + express + Nginx 练习点: redux 连接 react-router 路由跳转 scss ...

  3. 洛谷 P2657 [SCOI2009]windy数

    题意简述 求l~r之间不含前导零且相邻两个数字之差至少为2的正整数的个数 题解思路 数位DP 代码 #include <cstdio> #include <cstring> # ...

  4. (三十五)c#Winform自定义控件-Tab页

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  5. Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别

    转载来源 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚. ...

  6. 苹果电脑基本设置+Linux 命令+Android 实战集锦

    本文微信公众号「AndroidTraveler」首发. 背景 大多数应届毕业生在大学期间使用的比较多的是 windows 电脑,因此初入职场如果拿到一台苹果电脑,可能一时间不能够很快的上手.基于此,这 ...

  7. springboot项目中的普通Session和使用redis存储session

    普通session: session store type使用来存放session的存储方式,目前Spring boot中只支持Redis方式, 由于本应用暂无需将session放入redis的需求, ...

  8. 随笔编号-16 MySQL查看表及索引大小方法

    目标:阿里云OS数据库DMS,单个主库最大存储空间为2T.最近公司业务扩展很快,一天数据量达到7.9G左右.要求备份清理历史数据,备份到其他磁盘. 准备: 如果想知道MySQL数据库中每个表占用的空间 ...

  9. 2019年7-8月Leetcode每日训练日志

    2019-08-29 #274 H指数 2019-08-28 #287 寻找重复数 #875 爱吃香蕉的珂珂 #704 二分查找 2019-08-27 #744 寻找比目标字母大的最小字母 #225 ...

  10. HDU5988 - 2016icpc青岛 - G - Coding Contest 费用流(利用对数化乘为加

    HDU5988 题意: 有n个区域,每个区域有s个人,b份饭.现在告诉你每个区域间的有向路径,每条路有容量和损坏路径的概率.问如何走可以使得路径不被破坏的概率最小.第一个人走某条道路是百分百不会损坏道 ...