Redis集群搭建&访问
集群搭建步骤
1、创建多个节点;
2、为每个节点指派槽,并将多个节点连接起来,组成一个集群;
3、当集群数据库的16384个槽都有节点在处理时,集群进入上线状态;
要求:搭建一个包含6个节点的Redis集群,其中三个主节点,三个从节点,每个主节点都有一个从节点
注:在极端情况下,如果将16384个槽都指派给一个主节点,那么只有一个主节点也可以让集群进入上线状态,但是要让集群的故障转移特性生效,最起码要有3个主节点,而要让故障转移真正有意义,至少要为三个主节点分别设置一个从节点,这也是本例子中使用6个节点的原因。
1、创建节点
集群中的节点就是运行在集群模式下的Redis服务器,为了构建一个集群,我们需要一一创建集群中的每个节点;
为了让Redis服务器以集群模式运行,我们需要在启动服务器时,打开服务器的集群模式选项:
cluster-enabled yes
另外,如果有多个节点运行在同一台集群上,那么我们还需要为每个节点指定一个不同的端口号
port 7000
将如上的两个配置值写入redis.conf文件中,然后执行如下命令来启动一个Redis节点
redis-server redis.conf
为了能在同一台机器上构建一个包含6个节点的集群,其中三个主节点分别运行在机器的7000、7001和7002端口上,而三个从节点分别运行在7003、7004和7003端口上;
我们可以先创建一个redis-cluster文件夹,然后分别创建7000到7005共6个文件夹,每个文件夹都包含一个redis.conf文件,文件内容如下:
port <number>
cluster-enabled yes
目录结构如下:
[ochadoop@och165 redis-cluster]$ ll
drwxrwxr-x ochadoop ochadoop Oct :
drwxrwxr-x ochadoop ochadoop Oct :
drwxrwxr-x ochadoop ochadoop Oct :
drwxrwxr-x ochadoop ochadoop Oct :
drwxrwxr-x ochadoop ochadoop Oct :
drwxrwxr-x ochadoop ochadoop Oct :
drwxrwxr-x ochadoop ochadoop Sep :
drwxrwxr-x ochadoop ochadoop Aug : redis-3.0.-beta8
-rwxrwxr-x ochadoop ochadoop Aug : redis-server
[ochadoop@och165 redis-cluster]$ cd
[ochadoop@och165 ]$ ll-rw-rw-r-- ochadoop ochadoop Aug : redis.conf
然后分别执行:
cd
../redis-server ./redis.conf & cd
../redis-server ./redis.conf & cd
../redis-server ./redis.conf & cd
../redis-server ./redis.conf & cd
../redis-server ./redis.conf & cd
../redis-server ./redis.conf &
判断各个节点的Redis服务是否启动成功:
[ochadoop@och165 redis-cluster]$ ps -ef|grep redis
ochadoop : pts/ :: ../redis-server *: [cluster]
ochadoop : pts/ :: ../redis-server *: [cluster]
ochadoop : pts/ :: ../redis-server *: [cluster]
ochadoop : pts/ :: ../redis-server *: [cluster]
ochadoop : pts/ :: ../redis-server *: [cluster]
ochadoop : pts/ :: ../redis-server *: [cluster]
ochadoop : pts/ :: grep redis
经过如上操作,创建了6个节点。
2、创建集群
在第一步中已经创建了6个节点,此时我们需要将这6个节点互相连接以后吃一个集群,然后为三个主节点指派槽,并为这三个主节点分别设置一个从节点;
创建集群的操作可以通过使用位于Redis安装文件夹内的redis-trib.rb来完成,redis-trib.rb是使用ruby开发的Redis集群管理程序,具有创建集群,检查集群的上线情况和槽指派情况、对集群进行重新分片、向集群添加新节点或者从集群中移除节点等功能;
redis-trib.rb的用户
[ochadoop@och165 src]$ ./redis-trib.rb
Usage: redis-trib <command> <options> <arguments ...> create host1:port1 ... hostN:portN
--replicas <arg>
check host:port
fix host:port
reshard host:port
--from <arg>
--to <arg>
--slots <arg>
--yes
add-node new_host:new_port existing_host:existing_port
--slave
--master-id <arg>
del-node host:port node_id
set-timeout host:port milliseconds
call host:port command arg arg .. arg
import host:port
--from <arg>
help (show this help)
为创建一个包含三个主节点和三个从节点的集群,我们需要执行如下命令:
./redis-trib.rb create --replicas 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1:
其中:
create:表示我们要创建一个集群;
replicas:表示让redis-trib.rb为集群中的每个主节点设置一个从节点;
输入该命令后,redis-trib会为每个节点指派槽以及角色,并询问用户是否接受这种节点配置;
[ochadoop@och165 src]$ ./redis-trib.rb create --replicas 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1:
>>> Creating cluster
Connecting to node 127.0.0.1:: OK
Connecting to node 127.0.0.1:: OK
Connecting to node 127.0.0.1:: OK
Connecting to node 127.0.0.1:: OK
Connecting to node 127.0.0.1:: OK
Connecting to node 127.0.0.1:: OK ###首先尝试连接给定的六个节点,检查它们是否存在
>>> Performing hash slots allocation on nodes...
Using masters:
127.0.0.1:
127.0.0.1:
127.0.0.1:
Adding replica 127.0.0.1: to 127.0.0.1:
Adding replica 127.0.0.1: to 127.0.0.1:
Adding replica 127.0.0.1: to 127.0.0.1:7002 ###在确定这些节点都是可连接之后,redistrib.rb 再将7000、7001和7002设置为主节点,
而7003、7004和7005则分别被设置为三个主节点的从节点
M: 86377351db5e39c8ac78ae57d1c9ed747fc6287e 127.0.0.1:
slots:- ( slots) master
M: 41da4216d8011ba56e491fe3a938eaf5d4b30449 127.0.0.1:
slots:- ( slots) master
M: c98b085a68d26d6e779eaf7802bdd309ac263b8f 127.0.0.1:
slots:- ( slots) master ###对于三个主节点,redis-trib.rb 会分别为它们指派5461、5462和5461个槽(默认情况下使用平均分配)
S: a1591907f9a6e8398d6ca76875a4b9d2ae488d4b 127.0.0.1:
replicates 86377351db5e39c8ac78ae57d1c9ed747fc6287e
S: 23ee21f3992eeea33137f086aaed70e4b0d1926d 127.0.0.1:
replicates 41da4216d8011ba56e491fe3a938eaf5d4b30449
S: 36daa7806f59775f09ef4df339737b0973136679 127.0.0.1:
replicates c98b085a68d26d6e779eaf7802bdd309ac263b8f
Can I set the above configuration? (type 'yes' to accept): yes ###这个配置没问题的话,就可以键入 yes 并按下回车
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
:M Oct ::13.768 # configEpoch set to via CLUSTER SET-CONFIG-EPOCH
:M Oct ::13.768 # configEpoch set to via CLUSTER SET-CONFIG-EPOCH
:M Oct ::13.769 # configEpoch set to via CLUSTER SET-CONFIG-EPOCH
:M Oct ::13.769 # configEpoch set to via CLUSTER SET-CONFIG-EPOCH
:M Oct ::13.770 # configEpoch set to via CLUSTER SET-CONFIG-EPOCH
:M Oct ::13.770 # configEpoch set to via CLUSTER SET-CONFIG-EPOCH
>>> Sending CLUSTER MEET messages to join the cluster
:M Oct ::13.787 # IP address for this node updated to 127.0.0.1
:M Oct ::13.956 # IP address for this node updated to 127.0.0.1
:M Oct ::13.958 # IP address for this node updated to 127.0.0.1
:M Oct ::13.988 # Cluster state changed: ok
:M Oct ::14.156 # IP address for this node updated to 127.0.0.1
:M Oct ::14.375 # IP address for this node updated to 127.0.0.1
:M Oct ::14.463 # Cluster state changed: ok
:M Oct ::14.563 # IP address for this node updated to 127.0.0.1
Waiting for the cluster to join.:M Oct ::15.465 # Cluster state changed: ok
.:M Oct ::16.468 # Cluster state changed: ok
:M Oct ::16.592 # Cluster state changed: ok
.:M Oct ::17.060 # Cluster state changed: ok ###在键入yes之后,redis-trib.rb 就会向各个节点发送指令,首先将它们连接为一个集群,然后再为它们指派槽和设置角色
>>> Performing Cluster Check (using node 127.0.0.1:)
M: 86377351db5e39c8ac78ae57d1c9ed747fc6287e 127.0.0.1: slots:- ( slots) master
M: 41da4216d8011ba56e491fe3a938eaf5d4b30449 127.0.0.1: slots:- ( slots) master
M: c98b085a68d26d6e779eaf7802bdd309ac263b8f 127.0.0.1: slots:- ( slots) master
M: a1591907f9a6e8398d6ca76875a4b9d2ae488d4b 127.0.0.1: slots: ( slots) master replicates 86377351db5e39c8ac78ae57d1c9ed747fc6287e
M: 23ee21f3992eeea33137f086aaed70e4b0d1926d 127.0.0.1: slots: ( slots) master replicates 41da4216d8011ba56e491fe3a938eaf5d4b30449
M: 36daa7806f59775f09ef4df339737b0973136679 127.0.0.1: slots: ( slots) master replicates c98b085a68d26d6e779eaf7802bdd309ac263b8f
###redis-trib.rb 会对集群进行测试,检查是否每个节点都按照原先展示的配置设置好了
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All slots covered.
###如果整个集群数据库的16384个槽都有节点在处理,那么集群就会进入上线状态,之后用户就可以开始向集群发送命令请求了
集群访问
使用集群客户端向集群发送命令请求
目前主要的 Redis 集群客户端(或者说,支持集群功能的 Redis 客户端)有以下这些:
1、redis-rb-cluster:antirez 使用 Ruby 编写的 Redis 集群客户端,集群客户端的官方实现;
2、predis:Redis 的 PHP 客户端,支持集群功能;
3、jedis:Redis 的 JAVA 客户端,支持集群功能;
4、StackExchange.Redis:Redis 的 C# 客户端,支持集群功能;
5、内置的 redis-cli :在启动时给定 -c 参数即可进入集群模式,支持部分集群功能;
为了让示例保持简单,我们这里使用集群模式的 redis-cli 来进行演示。
[ochadoop@och165 src]$ ./redis-cli -p -c #连接节点并执行命令
127.0.0.1:> SET date -- #键date所在的槽位于节点 ,节点直接执行命令
OK
127.0.0.1:> SET msg "hello world" #键msg所在的槽位于节点
-> Redirected to slot [] located at 127.0.0.1: #客户端从转向至
OK
127.0.0.1:> SADD fruits "apple" "banana" "cherry" #键fruits所在的槽位于节点
-> Redirected to slot [] located at 127.0.0.1: #客户端从转向至
(integer)
127.0.0.1:> #转向是自动完成的,无需任何用户操作
集群和twemproxy的区别

结论:
如果需要完整的分片、复制和高可用性,并且要避免使用代理带来的性能瓶颈和资源消耗,那么可以选择使用Redis集群;
如果只需要一部分特性(比如只需要分片,不需要复制和高可用等),那么可以单独选择twemproxy、Redis复制和Redis sentinel中的一个或者多个;
Redis集群服务器总结
Redis集群是一个由多个节点组成的分布式服务器群,它具有复制、高可用和分片特性;
Redis集群没有中心节点,并且带有复制和故障转移特性,这可以避免单个节点成为性能瓶颈,或者因为某个节点下线而导致整个集群下线;
集群中的主节点负责处理槽(存储数据),从节点则是主节点的复制品;
Redis集群将整个数据库分成16384个槽,数据库中的每个键都属于16384个槽中的其中一个;
集群中的每个主节点都可以负责0到16384个槽,当16384个槽都有节点在负责时,集群进入上线状态,可以执行客户端发送的数据命令;
主节点只会执行和自己负责的槽相关的命令,当节点接收到不属于自己处理的槽的命令时,它会将处理指定槽的节点的地址返回给客户端,而客户端会向正确的节点重新发送命令,这个过程称为“转向”;
Redis集群搭建&访问的更多相关文章
- Redis 集群搭建详细指南
先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公司?我的回答都是大城市!大公司! 为什么这么说呢,你想一下,无论女孩男孩找朋友都喜欢找个子高胸大的.同样的道理嘛 ...
- Linux Redis集群搭建与集群客户端实现(Python)
硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...
- [转载] Redis集群搭建最佳实践
转载自http://blog.csdn.net/sweetvvck/article/details/38315149?utm_source=tuicool 要搭建Redis集群,首先得考虑下面的几个问 ...
- Linux Redis集群搭建与集群客户端实现
硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...
- Redis集群搭建-韩国庆
认真一步一步搭建下来,就可以成功.... Redis-cluster集群架构讲解 redis集群专业名词称之为Redis-cluster,redis集群是从3.0版本以后才有的概念,也就是说在3.0之 ...
- redis集群搭建及设置账户(转)
Redis集群搭建以及为集群设置密码 介绍安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. ...
- redis 集群搭建: redis-cluster
前言 redis数据存储在内存中, 就会受到内存的限制, 大家都知道, 一台电脑, 硬盘可以有1T, 但是内存, 没有听说有1T的内存吧. 那如果数据非常多, 超过一台电脑的内存空间, 怎么办呢? 正 ...
- 分享知识-快乐自己:redis集群搭建
Redis介绍: 1.开源的NoSql数据库 2.C语言编写 3.基于内存运行,并且支持持久化 4.Key value存储 5.是主流的Nosql数据库之一 Redis优点: 1.内存使用方面,表现优 ...
- Redis集群搭建及选举原理
redis集群简述 哨兵模式中如果主从中master宕机了,是通过哨兵来选举出新的master,在这个选举切换主从的过程,整个redis服务是不可用的.而且哨兵模式中只有一个主节点对外提供服务,因此没 ...
随机推荐
- NET 2.0 OCR文字识别技术(Tesseract 引擎)[转]
一.OCR简介 参见http://baike.baidu.com/view/17761.htm?fr=ala0_1 大家参照,我第一次也是这么了解的,呵呵.高手见笑 现在市面上好多OCR 引擎,不 ...
- 构建VIM下的C++编程环境
1.VIM配置 Vim强大的配置与功能,其来源基本上就两个地方:Vim插件以及Vim配置文件. Vim本身的系统配置文件夹是在/usr/share/vim/和/etc/vim/两个文件夹下.一般情况下 ...
- 【转】Java集合框架综述
文章目录 1. 集合框架(collections framework) 2. 设计理念 3. 两大基类Collection与Map 3.1. Collection 3.2. Map 4. 集合的实现( ...
- MSSQL 随机查询且降序排列
--随机查询且降序排列 * FROM dbo.COMPANY_USER_INFO ORDER BY NEWID()) AS T ORDER BY T.cu_id DESC
- framework 安装出错 1603
安装frame work 3.5的时候老是出现 1603错误. 百度了一圈,各种方法都试了,仍不行. 像: 1.打开临时目录看安装日志,然后修改注册表Main的权限. 2.停止服务Cryptograp ...
- powerdesigner12.5 设置表字符集和存储引擎
powerdesigner12.5在做建模的时候发现没有找到哪儿设置表的字符集和存储引擎.于是研究了一番. 在菜单上方选择 Database => Edit Current DBMS 然后选 ...
- NAND flash和NOR flash的区别详解
我们使用的智能手机除了有一个可用的空间(如苹果8G.16G等),还有一个RAM容量,很多人都不是很清楚,为什么需要二个这样的芯片做存储呢,这就是我们下面要讲到的.这二种存储设备我们都统称为“FLASH ...
- 如何配置apache最大的并发数
如何配置apache最大的并发数MPM(多路处理模块)常见:1.perfork 预处理进程方式2.worker 工作者模式3.winnt 在windows使用 案例:把apache的最大并发数配置成1 ...
- Apple dev travel
Objective-C最基础语法之Class定义: http://mobile.51cto.com/iphone-281925.htm Table View: http://www.appcoda. ...
- (C/C++ )Interview in English - Virtual
Q: What is virtual function?A: A virtual function or virtual method is a function or method whose be ...