CENTOS6.6下redis3.2集群搭建
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn
[参考:]http://blog.csdn.net/zhu_tianwei/article/details/44928779
Redis3.0 最大的特点就是有了cluster的能力,使用redis-trib.rb工具可以轻松构建Redis Cluster。Redis Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。节点之间使用gossip协议传播信息以及发现新节点,这种结构和Cassandra很相似,Cassandra节点可以转发请求。Redis集群中节点不作为client请求的代理,client根据node返回的错误信息重定向请求。
集群特性
1.数据可以在cluster的多个node之间进行共享;2.一次请求处理多批key的命令将不再被支持,因为这些命令处理的key可能在不同的node之间,使用了它们反而会降低cluster的性能;
3.提供高HA,即某个node failed后cluster依旧提供高可用性。
cluster提供如下能力保证:
1.在cluster内自动把数据划分到不同的set上;
2.当集群中一小群机器出现网络故障时或者其他种类的failure时,cluster要保证系统继续可用;
redis的每个node启动后占用两个port 6379 & 16379。redis通过port 6379继续对client提供服务,client通过redis独有的文本协议与node进行通信,所以这个port被成为client port or command port。redis node通过port 16379与cluster内部的其他node进行二进制形式的通信,所以被称为data port or bus port。通过port 16379,node之间进行 failure detection(探活)、configure update(配置更新)、failure authorization(失败确认)。如果node使用别的端口作为command port,那么data port 一定是command port + 10000。 两个不同的cluster之间也可以通过data port进行data migration。
# 分片 redis cluster内部没用提供一致性hash算法来保证集群的可伸缩能力,而是通过简单的crc16 hash算法来进行sharding,所以它最多提供16384个slot。如果cluster有三个node,分别为 A and B and C,则A负责0 - 5500 slots,B负责5501 - 11000 slots,C负责11001 - 16383 slots。进行扩容的时候,就得在不同的node之间进行slots的迁移,不需要关机,也不会出现服务不可用现象。
cluster内部每个node(也成为一个instance)由一个master和多个slave构成,当master fail的时候,可以通过选举机制选出一个slave代替master。
Redis Cluster不提供强一致性。例如cluster接受了一个写请求,给client返回ok,这个写请求的内容也可能丢失。因为其写流程如下:
1 master B接受了一个写请求;
2 B写成功,返回ok给client;
3 B把数据广播给slaves(B1、B2、B3)
如果第二步执行完毕后,B crash了,则会发生数据不一致现象。这与传统的DBMS类似,它们接收了写请求后,每隔1S才会把数据写入disk,这么做也是在性能和一致性之间做一个平衡。
如果用户对数据的一致性要求比较高,Redis可能也会兼顾这种需求,将来会提供相应的选项,让redis中的slave没用成功的接受数据之前不会给client返回ok给client。即先执行step 3,然后再执行step 2。
一致性还有一种场景。假设有client Z,与cluster内各个node A and B and C,以及各个node的replica A1 and B1 and C1,Z与B之间连接正常,但是B与B1以及cluster内其他nodes连接失败。如果Z发起write request,那么B会给他返回ok,但是B1无法获取到相应的数据,这就要求写的时候也要把node与cluster内其他的成员的探活也要考虑在内。基本要求就是,写时间周期要大于探活时间周期(node timeout)。当node B timeout之后,master B会自动进入failing状态,拒绝外部client的连接请求,而cluster则会选出slave B1来代替B。
安装配置redis3.2
安装ruby环境
由于通过redis-trib.rb工具构建Redis Cluster,需要rudy环境,执行如下命令安装:
yum -y install zlib ruby rubygems
安装ruby 的redis库:
gem install redis
安装配置redis3.2
这里我用两台服务器,6个节点,互为主从,即3个主节点3个从节点192.168.10.120和192.168.10.121
分别在两台上安装redis
wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar -zxvf redis-3.2..tar.gz
mkdir redis
cd redis-3.2.
make PREFIX=/usr/local/redis
make PREFIX=/usr/local/redis install
将集群工具复制到/usr/local/redis/bin下
cp /usr/local/redis-3.2./src/redis-trib.rb /usr/local/redis/bin/
创建数据配置目录
mkdir -p /usr/local/redis/{conf,data,logs}
两台都配置
cd /usr/local/redis
cp /usr/local/redis-3.2./redis.conf ./conf/redis-.conf
cp /usr/local/redis-3.2./redis.conf ./conf/redis-.conf
cp /usr/local/redis-3.2./redis.conf ./conf/redis-.conf
分别在两台服务器上修改这三个文件,如下,仅仅改对应的端口数字即可:
# 基本配置
daemonize yes
pidfile /usr/local/redis/data/redis-.pid
port
bind 192.168.10.120
unixsocket /usr/local/redis/data/redis-.sock
unixsocketperm
timeout
loglevel verbose
logfile /usr/local/redis/logs/redis-.log
databases
dbfilename dump-.rdb
dir /usr/local/redis/data/ # aof持久化
appendonly yes
appendfilename appendonly-.aof
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage -
auto-aof-rewrite-min-size 64mb
lua-time-limit # 集群配置
cluster-enabled yes
cluster-config-file /usr/local/redis/data/nodes-.conf
cluster-node-timeout
启动
分别把每个节点都启动起来
./bin/redis-server ./conf/redis-.conf ;tail -f logs/redis-.log
./bin/redis-server ./conf/redis-.conf ;tail -f logs/redis-.log
./bin/redis-server ./conf/redis-.conf ;tail -f logs/redis-.log # 查看是否都启动了 ps -ef |grep redis
创建集群
./bin/redis-trib.rb create --replicas 192.168.10.120: 192.168.10.120: 192.168.10.120: 192.168.10.121: 192.168.10.121: 192.168.10.121:
CENTOS6.6下redis3.2集群搭建的更多相关文章
- 【Data Cluster】真机环境下MySQL数据库集群搭建
真机环境下MySQL-Cluster搭建文档 摘要:本年伊始阶段,由于实验室对不同数据库性能测试需求,才出现MySQL集群搭建.购置主机,交换机,双绞线等一系列准备工作就绪,也就开始集群搭建.起初笔 ...
- redis3.0集群搭建
生产环境中准备使用redis3.0集群了,花了一天时间研究了一下,下面记录一下集群搭建的过程. 服务器规划: 192.168.116.129 7000,7003 192.168.116.130 ...
- 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)
Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...
- 【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)
Oracle 11G RAC数据库安装(九) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...
- windows下的redis集群搭建的艰辛历程
我是参照这两篇教程进行的操作: 1.https://www.cnblogs.com/weiqinl/p/6490372.html (主) 2.https://blog.csdn.net/qiu ...
- 【转】【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)
原文地址:http://www.cnblogs.com/baiboy/p/orc9.html 阅读目录 目录 检查RAC状态 检查创建的数据库 全部参考文献 相关文章 Oracle 11G RAC ...
- 【转】【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)
原文地址:http://www.cnblogs.com/baiboy/p/orc8.html 阅读目录 目录 数据库安装 参考文献 相关文章 Oracle 11G RAC数据库安装(八) 概述:写 ...
- Ubuntu 16.04下Redis Cluster集群搭建(官方原始方案)
前提:先安装好Redis,参考:http://www.cnblogs.com/EasonJim/p/7599941.html 说明:Redis Cluster集群模式可以做到动态增加节点和下线节点,使 ...
- Centos下Apache+Tomcat集群--搭建记录
一.目的 利用apache的mod_jk模块,实现tomcat集群服务器的负载均衡以及会话复制,这里用到了<Cluster>. 二.环境 1.基础:3台主机,系统Centos6.5,4G内 ...
随机推荐
- python通过scapy模块进行arp断网攻击
前言: 想实现像arpsoof一样的工具 arp断网攻击原理: 通过伪造IP地址与MAC地址实现ARP欺骗,在网络发送大量ARP通信量.攻击者 只要持续不断发送arp包就能造成中间人攻击或者断网攻击. ...
- 配置shiro错误
在web配置工程中配置shiro,如果启动Tomcat,报错:org.apache.shiro.web.config.WebIniSecurityManagerFactory.setDefaults ...
- 修改ncnn的openmp异步处理方法 附C++样例代码
ncnn刚发布不久,博主在ios下尝试编译. 遇上了openmp的编译问题. 寻找各种解决方案无果,亲自操刀. 采用std::thread 替换 openmp. ncnn项目地址: https://g ...
- c#动态编译并执行字符串
比较简单,步骤是这样的 string -> compiler -> assembly -> reflection -> execution 直接上代码: using Syste ...
- ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(四)—用户注册
修改用户注册 1.修改用户名注册规则. 打开Controllers目录下的AccountController.cs. 在控制器中找到 public async Task<IActionResul ...
- centos如何安装python库?
通过yum install安装,先解决yum不能安装python库的问题 yum install -y epel-release #先安装epel源,参考http://sharadchhetri. ...
- Django 类方式view进行进行用户验证
问题: Django中,view的书写方式有两种,一种是def函数方式,一种是class方式,函数方式通过@login_required装饰器标记函数,就必须通过用户验证,而类,则没办法通过此方法进行 ...
- Maven的Archetype简介
Archetype,骨架的意思. 文章出处:http://m.blog.csdn.net/blog/FireOfStar/42526027 Archetype是什么? 简单的说,Archetype是M ...
- java注解--Annotation
Annotation(注释) 概述 从 JDK 5.0 开始, Java 增加了对元数据(MetaData) 的支持, 也就是 Annotation(注释) Annotation 其实就是代码里的特殊 ...
- Ubuntu 安装 Nginx 实现反向代理
安装Nginx依赖库(ubuntu平台) 最近域名通过了备案, 想着应用总不能带着端口号访问吧, 于是在网上踩了很多坑, 终于找到了一步直达的方法,起码这一次很顺利的实现了 安装gcc g++的依赖库 ...