热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linuxredis集群安装Redis3.2.1集群搭建

一、概述Redis3.0版本之后支持Cluster.1.1、rediscluster的现状目前redis支持的cluster特性:1):节点自动发现2):slave

一、概述

    Redis3.0版本之后支持Cluster.

1.1、redis cluster的现状

   目前redis支持的cluster特性:

  1):节点自动发现

  2):slave->master 选举,集群容错

  3):Hot resharding:在线分片

  4):进群管理:cluster xxx

  5):基于配置(nodes-port.conf)的集群管理

  6):ASK 转向/MOVED 转向机制.

1.2、redis cluster 架构

  1)redis-cluster架构图

  架构细节:

  (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

  (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

  (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

  (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

 

   2) redis-cluster选举:容错

  (1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

  (2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用&#xff0c;收到((error) CLUSTERDOWN The cluster is down)错误

      a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态.

      b:如果进群超过半数以上master挂掉&#xff0c;无论是否有slave集群进入fail状态.

 

二、redis cluster安装

    1、下载和解包

1

2

3

cd /usr/local/

wget http://download.redis.io/releases/redis-3.2.1.tar.gz

tar -zxvf /redis-3.2.1.tar.gz

 2、 编译安装

cd redis-3.2.1make && make install

  3、创建redis节点

     测试我们选择2台服务器&#xff0c;分别为&#xff1a;192.168.1.237&#xff0c;192.168.1.238.每分服务器有3个节点。

  我先在192.168.1.237创建3个节点&#xff1a;

cd /usr/local/mkdir redis_cluster //创建集群目录mkdir 7000 7001 7002 //分别代表三个节点 其对应端口 7000 7001 7002//创建7000节点为例&#xff0c;拷贝到7000目录cp /usr/local/redis-3.2.1/redis.conf ./redis_cluster/7000/ //拷贝到7001目录cp /usr/local/redis-3.2.1/redis.conf ./redis_cluster/7001/ //拷贝到7002目录cp /usr/local/redis-3.2.1/redis.conf ./redis_cluster/7002/

   分别对7001&#xff0c;7002、7003文件夹中的3个文件修改对应的配置

daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7002,7003
port 7000 //端口7000,7002,7003
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 5000 //请求超时 设置5秒够了
appendonly yes //aof日志开启 有需要就开启&#xff0c;它会每次写操作都记录一条日志

   在192.168.1.238创建3个节点&#xff1a;对应的端口改为7003,7004,7005.配置对应的改一下就可以了。

   4、两台机启动各节点(两台服务器方式一样)

cd /usr/local
redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf

   5、查看服务

      ps -ef | grep redis   #查看是否启动成功

     netstat -tnlp | grep redis #可以看到redis监听端口

三、创建集群

  前面已经准备好了搭建集群的redis节点&#xff0c;接下来我们要把这些节点都串连起来搭建集群。官方提供了一个工具&#xff1a;redis-trib.rb(/usr/local/redis-3.2.1/src/redis-trib.rb) 看后缀就知道这鸟东西不能直接执行&#xff0c;它是用ruby写的一个程序&#xff0c;所以我们还得安装ruby.

yum -y install ruby ruby-devel rubygems rpm-build

  再用 gem 这个命令来安装 redis接口    gem是ruby的一个工具包.

gem install redis //等一会儿就好了
当然&#xff0c;方便操作&#xff0c;两台Server都要安装。

  上面的步骤完事了&#xff0c;接下来运行一下redis-trib.rb

/usr/local/redis-3.2.1/src/redis-trib.rb

   Usage: redis-trib

   reshard        host:port
                  --to
                  --yes
                  --slots
                  --from
  check          host:port
  call            host:port command arg arg .. arg
  set-timeout    host:port milliseconds
  add-node        new_host:new_port existing_host:existing_port
                  --master-id
                  --slave
  del-node        host:port node_id
  fix            host:port
  import          host:port
                  --from
  help            (show this help)
  create          host1:port1 ... hostN:portN
                  --replicas

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

     看到这&#xff0c;应该明白了吧&#xff0c; 就是靠上面这些操作 完成redis集群搭建的.

 确认所有的节点都启动&#xff0c;接下来使用参数create 创建 (在192.168.1.237中来创建)

/usr/local/redis-3.2.1/src/redis-trib.rb create --replicas 1 192.168.1.237:7000 192.168.1.237:7001 192.168.1.237:7003 192.168.1.238:7003 192.168.1.238:7004 192.168.1.238:7005

    解释下&#xff0c; --replicas  1  表示 自动为每一个master节点分配一个slave节点    上面有6个节点&#xff0c;程序会按照一定规则生成 3个master&#xff08;主&#xff09;3个slave(从)

    前面已经提醒过的 防火墙一定要开放监听的端口&#xff0c;否则会创建失败。

 运行中&#xff0c;提示Can I set the above configuration? (type &#39;yes&#39; to accept): yes    //输入yes

 接下来 提示  Waiting for the cluster to join..........  安装的时候在这里就一直等等等&#xff0c;没反应&#xff0c;傻傻等半天&#xff0c;看这句提示上面一句&#xff0c;Sending Cluster Meet Message to join the Cluster.

    这下明白了&#xff0c;我刚开始在一台Server上去配&#xff0c;也是不需要等的&#xff0c;这里还需要跑到Server2上做一些这样的操作。

    在192.168.1.238, redis-cli -c -p 700*  分别进入redis各节点的客户端命令窗口&#xff0c; 依次输入 cluster meet 192.168.1.238 7000……

    回到Server1&#xff0c;已经创建完毕了。

    查看一下 /usr/local/redis/src/redis-trib.rb check 192.168.1.237:7000

    到这里集群已经初步搭建好了。

 

四、测试

1&#xff09;get 和 set数据

    redis-cli -c -p 7000

    进入命令窗口&#xff0c;直接 set  hello  howareyou

    直接根据hash匹配切换到相应的slot的节点上。

    还是要说明一下&#xff0c;redis集群有16383个slot组成&#xff0c;通过分片分布到多个节点上&#xff0c;读写都发生在master节点。

  2&#xff09;假设测试

    果断先把192.168.1.238服务Down掉&#xff0c;&#xff08;192.168.1.238有1个Master, 2个Slave&#xff09; ,  跑回192.168.1.238, 查看一下 发生了什么事&#xff0c;192.168.1.237的3个节点全部都是Master&#xff0c;其他几个Server2的不见了

    测试一下&#xff0c;依然没有问题&#xff0c;集群依然能继续工作。

    原因&#xff1a;  redis集群  通过选举方式进行容错&#xff0c;保证一台Server挂了还能跑&#xff0c;这个选举是全部集群超过半数以上的Master发现其他Master挂了后&#xff0c;会将其他对应的Slave节点升级成Master.

    疑问&#xff1a; 要是挂的是192.168.1.237怎么办&#xff1f;    哥试了&#xff0c;cluster is down!!    没办法&#xff0c;超过半数挂了那救不了了&#xff0c;整个集群就无法工作了。 要是有三台Server&#xff0c;每台两Master&#xff0c;切记对应的主从节点

            不要放在一台Server,别问我为什么自己用脑子想想看&#xff0c;互相交叉配置主从&#xff0c;挂哪台也没事&#xff0c;你要说同时两台crash了&#xff0c;呵呵哒......

  3&#xff09;关于一致性

    我还没有这么大胆拿redis来做数据库持久化哥网站数据&#xff0c;只是拿来做cache&#xff0c;官网说的很清楚&#xff0c;Redis Cluster is not able to guarantee strong consistency. 

 

遇到的问题

redis requires Ruby version >&#61; 2.2.2 系统默认 ruby 版本过低&#xff0c;导致 Redis 接口安装失败

推荐阅读
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 基于分布式锁的防止重复请求解决方案
    一、前言关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同,如查 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 前段时间做一个项目,需求是对每个视频添加预览图,这个问题最终选择方案是:用canvas.toDataYRL();来做转换获取视频的一个截图,添加到页面中,达到自动添加预览图的目的。 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
author-avatar
没搜摸索摸索_685
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有