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成为主节点

总结:

虽然整个过程是让人很糟心的,但是总归是成功了,实践出真理。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • Redis集群搭建全记录

    Redis集群是一个提供在多个Redis节点间共享数据的程序集. Redis集群中不支持处理多个keys的命令. Redis集群通过分区来提供一定程度的可用性.在某个节点宕机或者不可用的时候可以继续处理命令. Redis集群数据分片 在Redis集群中,使用数据分片(sharding)而不是一致性hash(consistency hashing)来实现,一个Redis集群包含16384个哈希槽(hash slot),数据库中的每个键都存在这些哈希槽中的某一个,通过CRC16校验后对16384取模

  • Windows环境部署Redis集群

    一.准备文件 1.下载Redis for windows 的最新版本 下载地址:https://github.com/MSOpenTech/redis/releases 安装到 c:\Redis 目录下(Redis-x64-3.2.100.msi <Windows服务版>) 2.下载 RubyInstaller 下载地址:http://rubyinstaller.org/downloads/ 安装时,勾选:(所使用版本rubyinstaller-2.3.1-x64.exe) Install T

  • 简单注解实现集群同步锁(spring+redis+注解)

    互联网面试的时候,是不是面试官常问一个问题如何保证集群环境下数据操作并发问题,常用的synchronized肯定是无法满足了,或许你可以借助for update对数据加锁.本文的最终解决方式你只要在方法上加一个@P4jSyn注解就能保证集群环境下同synchronized的效果,且锁的key可以任意指定.本注解还支持了锁的超时机制. 本文需要对Redis.spring和spring-data-redis有一定的了解.当然你可以借助本文的思路对通过注解对方法返回数据进行缓存,类似com.googl

  • 详解docker搭建redis集群的环境搭建

    本文介绍了docker搭建redis集群的环境搭建,分享给大家,废话不多说,具体如下: 下载镜像 docker pull redis 准备配置文件 mkdir /home/docker/redis/ wget https://raw.githubusercontent.com/antirez/redis/3.0/redis.conf -O /home/docker/redis/redis.conf cd /home/docker/redis/ sed -i 's/# slaveof <maste

  • redis集群搭建教程及遇到的问题处理

    这里,在一个Linux虚拟机上搭建6个节点的redis伪集群,思路很简单,一台虚拟机上开启6个redis实例,每个redis实例有自己的端口.这样的话,相当于模拟出了6台机器了,然后在以这6个实例组建redis集群就可以了. 前提:redis已经安装,目录为/usr/local/redis-4.0.1 如不会,可以参考一下文章  windows下安装redis    Linux下安装redis redis集群是用的ruby脚本,所以要想执行该脚本,需要ruby环境..对应redis的源码src目

  • 详解centos下搭建redis集群

    必备的工具: redis-3.0.0.tar redis-3.0.0.gem (ruby和redis接口) 分析: 首先,集群数需要基数,这里搭建一个简单的redis集群(6个redis实例进行集群). 在一台服务器上操作,因此仅需要6个不同的端口号即可.分别是:7001.7002.7003.7004.7005.7006. 步骤: 1.上传redis-3.0.0.tar到服务器(自己指定自己的软件目录),解压redis-3.0.0.tar. 2.安装c语言环境(安装centos之后,自带c语言环

  • 详细分析Redis集群故障

    故障表象: 业务层面显示提示查询redis失败 集群组成: 3主3从,每个节点的数据有8GB 机器分布: 在同一个机架中, xx.x.xxx.199 xx.x.xxx.200 xx.x.xxx.201 redis-server进程状态: 通过命令ps -eo pid,lstart | grep $pid, 发现进程已经持续运行了3个月 发生故障前集群的节点状态: xx.x.xxx.200:8371(bedab2c537fe94f8c0363ac4ae97d56832316e65) master

  • 基于redis集群设置密码的实例

    注意事项: 1.如果是使用redis-trib.rb工具构建集群,集群构建完成前不要配置密码,集群构建完毕再通过config set + config rewrite命令逐个机器设置密码 2.如果对集群设置密码,那么requirepass和masterauth都需要设置,否则发生主从切换时,就会遇到授权问题,可以模拟并观察日志 3.各个节点的密码都必须一致,否则Redirected就会失败 config set masterauth abc config set requirepass abc

  • Redis 集群搭建和简单使用教程

    前言 Redis集群搭建的目的其实也就是集群搭建的目的,所有的集群主要都是为了解决一个问题,横向扩展. 在集群的概念出现之前,我们使用的硬件资源都是纵向扩展的,但是纵向扩展很快就会达到一个极限,单台机器的Cpu的处理速度,内存大小,硬盘大小没办法一直满足需求,而且机器纵向扩展的成本是相当高的.集群的出现就是能够让多台机器像一台机器一样工作,实现了资源的横向扩展. Redis是内存型数据库,当我们要存储的数据达到一定程度时,单台机器的内存满足不了我们的需求,搭建集群则是一种很好的解决方案. 介绍安

  • Redis集群的离线安装步骤及原理详析

    前言 本文主要是记录一下Redis集群在linux系统下离线的安装步骤,毕竟在生产环境下一般都是无法联网的,Redis的集群的Ruby环境安装过程还是很麻烦的,涉及到很多的依赖的安装,所以写了一个文章来进行记录.本文分为两部分,第一部分先通过原生命令的安装来实现redis集群的部署,通过原生命令的安装对于了解redis集群的实现原理有很大的帮助,第二部分通过官方工具Ruby来进行Redis集群的安装,通过Ruby安装Redis集群的时候主要是搭建好Ruby环境,真正Redis集群的安装配置通过R

  • Docker下Redis集群(主从+哨兵)安装配置的实现步骤

    目录 一.所有机器拉去镜像 二.主从集群搭建 2.1.redis.cong 文件 2.2.创建本地映射文件夹,并将 redis.conf 放到 /usr/local/redis/conf 文件夹内 2.3.启动redis 2.4.校验redis主从集群安装是否成功 三.开启哨兵模式 3.1.sentinel.conf 配置文件 3.2.创建本地映射文件夹,并将 sentinel.conf 放到 /usr/local/redis-sentinel/conf 文件夹内 3.3.启动 redis-se

  • docker实现redis集群搭建的方法步骤

    目录 一.创建redis docker基础镜像 二.制作redis节点镜像 三.运行redis集群 引用: 摘要:接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试下使用docker搭建redis集群. 首先,我们需要理论知识:Redis Cluster是Redis的分布式解决方案,它解决了redis单机中心化的问题,分布式数据库--首要解决把整个数据集按照分区规则映射到多个节点的问题. 这边就需要知道分区规则--哈希分区规则.Redis Clus

  • kafka与storm集群环境的安装步骤详解

    前言 在开始之前,需要说明下,storm和kafka集群安装是没有必然联系的,我将这两个写在一起,是因为他们都是由zookeeper进行管理的,也都依赖于JDK的环境,为了不重复再写一遍配置,所以我将这两个写在一起.若只需一个,只需挑选自己选择的阅读即可.下面话不多说了,来一起看看详细的介绍吧. 这两者的依赖如下: Storm集群:JDK1.8 , Zookeeper3.4,Storm1.1.1: Kafa集群 : JDK1.8 ,Zookeeper3.4 ,Kafka2.12: 说明: Sto

  • Redis集群增加节点与删除节点的方法详解

    前言 本文主要是承接上一篇文章Redis集群的离线安装成功以后,我们如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容),也就是集群的伸缩,集群伸缩的原理是控制虚拟槽和数据在节点之间进行移动,通过实际操作来整理一下集群的伸缩. 上篇文章中搭建好的集群为三主三从,端口号为7000.7001.7002.7003.7004.7005. 查看集群启动情况:ps -ef | grep redis 查看集群的slots分配情况以及节点之间的主从关系: 首先登陆节点7000:redi

  • 在K8s上部署Redis集群的方法步骤

    一.前言 架构原理:每个Master都可以拥有多个Slave.当Master下线后,Redis集群会从多个Slave中选举出一个新的Master作为替代,而旧Master重新上线后变成新Master的Slave. 二.准备操作 本次部署主要基于该项目:https://github.com/zuxqoj/kubernetes-redis-cluster 其包含了两种部署Redis集群的方式: StatefulSet Service&Deployment 两种方式各有优劣,对于像Redis.Mong

  • Redis的Cluster集群搭建的实现步骤

    目录 一.引言 二.Redis的Cluster模式介绍 1.Redis群集101 2.Redis群集TCP端口 3.Redis集群和Docker 4.Redis集群数据分片 5.Redis集群之主从模型 6.Redis集群一致性保证 7.Redis群集配置参数 三.创建和使用Redis群集 四.使用创建群集脚本创建Redis群集 五.测试故障转移 六.手动故障转移 七.总结 一.引言 本文档只对Redis的Cluster集群做简单的介绍,并没有对分布式系统的所涉及到的概念做深入的探讨.本文只是针

  • Windows下搭建Redis集群的方法步骤

    目录 Redis集群: 在Windows系统下搭建Redis集群: 1.下载并安装Redis 2.下载并安装ruby 3.创建Redis集群 Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用率. 在Windows系统下搭建Redis集群: 需要4个部件: Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建

  • redis sentinel监控高可用集群实现的配置步骤

    目录 一.端口转发. 如果在一个主机里面,安装了两个redis实例,可以在项目里面配置IP端口,用iptables转发. iptables -t nat -A PREROUTING -p tcp --dport 6379 -j REDIRECT --to-ports 7379 当发生切换的时候,触发了脚本,执行语句.端口可以马上转发带正确的redis上面.参数的含义: 脚本配置: 脚本实例: #!/bin/bash iptables -t nat -I PREROUTING -p tcp --d

  • redis sentinel监控高可用集群实现的配置步骤

    目录 一.端口转发 二.修改HOST文件 三.用第三方代理haproxy 四.插曲 一.端口转发 如果在一个主机里面,安装了两个redis实例,可以在项目里面配置IP端口,用iptables转发. iptables -t nat -A PREROUTING -p tcp --dport 6379 -j REDIRECT --to-ports 7379 当发生切换的时候,触发了脚本,执行语句.端口可以马上转发带正确的redis上面.参数的含义: 脚本配置: 脚本实例: #!/bin/bash  i

随机推荐