转自http://meia.fun/article/1544161420745

手动搭建 redis 集群

redis 基本命令:

  • 启动 redis 服务:redis-server xxx.conf
  • 连接 redis 服务:redis-cli -h xx -p xx
  • 停止 redis 服务:redis-cli -p {port} shutdown

单机模式主要配置:

  • port:端口
  • logfile:日志文件
  • dir:redis 工作目录(存放持久化文件和日志文件)
  • dbfilename:数据库文件名
  • daemonize:是否已守护进程的方式启动 redis

集群模式主要配置:

  • cluster-enabled: 是否开启集群
  • cluster-node-timeout:节点超时时间,单位毫秒
  • cluster-config-file:集群内部配置文件 (此文件由 redis 自动生成,自动维护)

目录结构:

redis:根目录
config:放置redis配置文件
data:dir配置的目录
log:放置logfile配置的日志文件

集群搭建步骤

  1. 创建 6 个配置文件 (至少 6 个节点才能保证组成完整高可用的 redis 集群) 放在 config 目录下,本教程使用的端口区间是 6379~6384
    推荐的配置文件命名规则redis-{port}.conf
    修改每个配置文件的 port 属性为各自的端口、logfile 修改为../log/各自端口号.log、dir 修改为../data/、dbfilename 修改为各自的端口号-dump.rdb、daemonize 修改为yes、cluster-enabled 修改为yes、cluster-node-timeout 修改为15000、cluster-config-file 修改为nodes-各自的端口号.conf

  2. 配置修改完毕,逐个启动 6 个 redis
    redis-server redis-{port}.conf

  3. 执行 cluster meet {ip} {port} 进行节点之间握手通信
    注意: 握手时 ip 建议使用服务器真实 ip,因为此 ip 会被保存在集群配置文件中,如果使用 127.0.0.1 这个地址,当服务器外部的客户端 (例如 java 的 redis 客户端) 连接集群时会通过集群配置的这个地址 (127.0.0.1) 去访问节点,但实际节点并不在本地,所以会导致连接出现异常。
    首先使用redis-cli连接上其中一个 redis 服务,然后执行cluster meet {ip} {port}命令和其它端口的服务逐个进行握手
    完成后执行cluster nodes命令查看集群节点信息,如果展示 6 个节点说明节点之间已经彼此建立了联系
    节点建立联系之后集群还不能正常工作,这时集群处于下线状态, 所有的数据读写都被禁止
    执行cluster info可以查看集群状态
    只有当 16384 个槽全部分配给节点后, 集群才进入在线状态。

  4. 分配槽
    Redis Cluster 采用虚拟槽分区,槽范围是 0~16383
    把 16384 个 slot 平均分配给 6379、 6380、 6381 三个节点,以下命令利用了 bash 的字符展开特性

    redis-cli -h 127.0.0.1 -p 6379 cluster addslots {0..5461}
    redis-cli -h 127.0.0.1 -p 6380 cluster addslots {5462..10922}
    redis-cli -h 127.0.0.1 -p 6381 cluster addslots {10923..16383}

    执行完成用cluster nodes命令可查看节点已分配的槽集合

  5. 主从复制
    目前还有三个节点没有使用, 作为一个完整的集群, 每个负责处理槽的节点应该具有从节点, 保证当它出现故障时可以自动进行故障转移。
    由于首次启动的节点和被分配槽的节点都是主节点, 从节点负责复制主节点槽信息和相关的数据
    使用cluster replicate {nodeId}命令让一个节点成为从节点,命令执行必须在对应的从节点 (6382、6383、6384) 上执行, nodeId是要复制主节点的节点 ID

    //复制6379
    127.0.0.1:6382>cluster replicate cfb28ef1deee4e0fa78da86abe5d24566744411e
    OK
    //复制6380
    127.0.0.1:6383>cluster replicate 8e41673d59c9568aa9d29fb174ce733345b3e8f1
    OK
    //复制6381
    127.0.0.1:6384>cluster replicate 40b8d09d44294d2e23c7c768efc8fcd153446746
    OK

    执行完成后用cluster nodes命令可查看节点主从状态

目前为止, 我们依照 Redis 协议手动建立一个集群。 它由 6 个节点构成,3 个主节点负责处理槽和相关数据, 3 个从节点负责故障转移。
如果服务器外使用 Java 连接集群发生异常,请检查节点bind属性是否绑定了127.0.0.1,如果是请改成0.0.0.0,另外还要注意查看防火墙是否开放端口。

手动搭建 redis 集群的更多相关文章

  1. 手动搭建redis集群(3台)

    安装redis 1.搜索源中的redis包 apt-cache pkgnames | grep redis 2.安装redis-server apt-get install redis-server ...

  2. Windows下搭建Redis集群

    Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用 ...

  3. Redis集群搭建(转自一菲聪天的“Windows下搭建Redis集群”)

    配置Redis参考:http://blog.csdn.net/zsg88/article/details/73715947 使用Ruby配置集群参考:https://www.cnblogs.com/t ...

  4. windows环境下搭建Redis集群

    转载请注明出处,原文章地址: https://www.cnblogs.com/tommy-huang/p/6240083.html Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Red ...

  5. 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)

    前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...

  6. Windows下搭建REDIS集群

    Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用 ...

  7. 基于 twemproxy 搭建 redis 集群

    概述 由于单台redis服务器的内存管理能力有限,使用过大内存redis服务器的性能急剧下降,且服务器发生故障将直接影响大面积业务.为了获取更好的缓存性能及扩展型,我们将需要搭建redis集群来满足需 ...

  8. linux系统centOS7下搭建redis集群中ruby版本过低问题的解决方法

    问题描述: 在Centos7中,通过yum安装ruby的版本是2.0.0,但是如果有些应用需要高版本的ruby环境,比如2.2,2.3,2.4... 那就有点麻烦了,譬如:我准备使用redis官方给的 ...

  9. Windows 环境搭建Redis集群(win 64位)

    转: http://blog.csdn.net/zsg88/article/details/73715947 参考:https://www.cnblogs.com/tommy-huang/p/6240 ...

随机推荐

  1. [转]ASP.NET Core 十种方式扩展你的 Views

    http://www.cnblogs.com/savorboard/p/aspnetcore-views.html

  2. 一款高效视频播放控件的设计思路(c# WPF版)

    因工作的需要,开发了一款视频播放程序.期间也经历许多曲折,查阅了大量资料,经过了反复测试,终于圆满完成了任务. 我把开发过程中的一些思路.想法写下来,以期对后来者有所帮助. 视频播放的本质 就是连续的 ...

  3. cgroups简单使用

    Cgroups控制系统资源的分配(cpu.mem.io) 1.cgroups概述 CGroup是Linux内核提供的可以限制.隔离进程组 (process groups) 所使用的物理资源 (如 cp ...

  4. Rails 增加一个模型(model)

      之前我们已经看到用脚手架运行的model程序.现在是时候第二个model了. 第二个model用来处理post的评论. 7.1 新建一个模型 Rails模型使用一个单一的的名称,其相应的数据库表使 ...

  5. C语言——<计算>_较大两个数相乘

    例题:9876543210*1234567890 的乘积 分析:正常的数据结构已经无法满足这么大的数相乘的结果.只能使用数组来进行操作. 1.两个数都用字符数组来接收. 2.接收后,因为每一位要乘以另 ...

  6. lua热更框架之XLua

    框架介绍 xLua是当下最流行的unity热更方案之一,作者是腾讯的车雄生前辈,自2016年初推出以来,已经在腾讯的多款游戏项目上应用,目前xLua已经开源到了GitHub.xLua最大的特色是不仅支 ...

  7. vue基于d2-admin的RBAC权限管理解决方案

    前两篇关于vue权限路由文章的填坑,说了一堆理论,是时候操作一波了. vue权限路由实现方式总结 vue权限路由实现方式总结二 选择d2-admin是因为element-ui的相关开源项目里,d2-a ...

  8. WPF备忘录(7)WPF图片资源路径介绍

    在项目中增加两张图片Content.jpg和Resource.jpg,分别将其生成操作属性设置为Content和Resource.     在界面中增加两个Image控件ImgContent和ImgR ...

  9. Abp中SwaggerUI的多个接口文档配置说明

    对外提供的接口在实际生成过程中,可能是需要一个接口版本的,比如说v1,manage.效果如下:     在swagger中怎么实现呢? 1. 添加SwaggerVersionHelper.cs pub ...

  10. 通向全栈之路——(3)node环境搭建

    1:更新系统 sudo apt-get update2:安装相关软件 sudo apt-get install vim openssl build-essential libssl-dev wget ...