手动搭建 redis 集群
转自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配置的日志文件
集群搭建步骤
创建 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
配置修改完毕,逐个启动 6 个 redis
redis-server redis-{port}.conf
执行 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 个槽全部分配给节点后, 集群才进入在线状态。分配槽
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
命令可查看节点已分配的槽集合主从复制
目前还有三个节点没有使用, 作为一个完整的集群, 每个负责处理槽的节点应该具有从节点, 保证当它出现故障时可以自动进行故障转移。
由于首次启动的节点和被分配槽的节点都是主节点, 从节点负责复制主节点槽信息和相关的数据
使用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 集群的更多相关文章
- 手动搭建redis集群(3台)
安装redis 1.搜索源中的redis包 apt-cache pkgnames | grep redis 2.安装redis-server apt-get install redis-server ...
- Windows下搭建Redis集群
Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用 ...
- Redis集群搭建(转自一菲聪天的“Windows下搭建Redis集群”)
配置Redis参考:http://blog.csdn.net/zsg88/article/details/73715947 使用Ruby配置集群参考:https://www.cnblogs.com/t ...
- windows环境下搭建Redis集群
转载请注明出处,原文章地址: https://www.cnblogs.com/tommy-huang/p/6240083.html Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Red ...
- 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)
前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...
- Windows下搭建REDIS集群
Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用 ...
- 基于 twemproxy 搭建 redis 集群
概述 由于单台redis服务器的内存管理能力有限,使用过大内存redis服务器的性能急剧下降,且服务器发生故障将直接影响大面积业务.为了获取更好的缓存性能及扩展型,我们将需要搭建redis集群来满足需 ...
- linux系统centOS7下搭建redis集群中ruby版本过低问题的解决方法
问题描述: 在Centos7中,通过yum安装ruby的版本是2.0.0,但是如果有些应用需要高版本的ruby环境,比如2.2,2.3,2.4... 那就有点麻烦了,譬如:我准备使用redis官方给的 ...
- Windows 环境搭建Redis集群(win 64位)
转: http://blog.csdn.net/zsg88/article/details/73715947 参考:https://www.cnblogs.com/tommy-huang/p/6240 ...
随机推荐
- Android中实时预览UI和编写UI的各种技巧
一.啰嗦 之前有读者反馈说,你搞这个所谓的最佳实践,每篇文章最后就给了一个库,感觉不是很高大上.其实,我在写这个系列之初就有想过这个问题.我的目的是:给出最实用的库来帮助我们开发,并且尽可能地说明这个 ...
- docker网络之macvlan
macvlan接口类型简单说类似于子接口,但相比子接口来说,macvlan接口拥有自己独立的mac地址,因此使用macvlan接口可以允许更多的二层操作.macvlan有四种模式:VEPA,bridg ...
- lintcode-->翻转字符串
给定一个字符串,逐个翻转字符串中的每个单词. 您在真实的面试中是否遇到过这个题? Yes 说明 单词的构成:无空格字母构成一个单词 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包 ...
- java的日期格式化
原博客地址: http://blog.csdn.net/yangbobo1992/article/details/9965105 日期格式: 时间日期标识符: yyyy:年 MM:月 dd:日 hh: ...
- Jquery的toggle()方法
toggle()并不是仅仅能 显示/隐藏而已 它的格式如下 toggle(fn1,fn2,fn3.....) 也就是说,它的参数可以说不定数目的 若干个方法,然后每个方法按顺序轮番调用 $(docum ...
- printf()函数中\t,水平制表符,空格的个数
在控制台输出数据的时候,也就是用printf()的时候,我们经常用\t来控制对齐,以使输出的结果更加整齐美观. 然而有时候我们发现及时使用了\t 也会出现数据对不齐的情况,这就跟\t究竟对应几个空格有 ...
- nginx 学习笔记(3) nginx管理
nginx可以通过向其发送信号来进行管理.默认情况下主进程的进程ID写到文件/usr/local/nginx/logs/nginx.pid中.当然也可以在配置文件中自定义该pid文件,自定义使用pid ...
- MJRefresh源码框架分析
MJRefresh是一款非常优秀的刷新控件.代码简洁,优雅.今天有时间对源代码阅读了一下.对MJRefresh的宏观设计非常赞叹.所谓大道至简就是这样吧. MJRefresh所采用的主要设计模式非 ...
- Uploadify火狐出现302错误
$(function () { var auth = "@(Request.Cookies[FormsAuthentication.FormsCookieName] == null ? st ...
- api.execScript
在指定 window 或者 frame 中执行脚本,对于 frameGroup 里面的 frame 也有效,若 name 和 frameName 都未指定,则在当前 window 中执行脚本,具体执行 ...