Redis集群部署3.0

我用的Mac的终端
-------------------------
1.Redis简介 centos(5.4)

redis Redis是一个key-value存储系统。和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表)、sets(集合)和zsets(有序集合)几种数据类型。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。

2.Redis的性能

下面是官方的bench-mark数据:

  • The test was done with 50 simultaneous clients performing 100000 requests.
  • The value SET and GET is a 256 bytes string.
  • The Linux box is running Linux 2.6, it’s Xeon X3320 2.5Ghz.
  • Text executed using the loopback interface (127.0.0.1).

    Results: about 110000 SETs per second, about 81000 GETs per second.

更多详细数据请见官方bench-mark page(http://code.google.com/p/redis/wiki/Benchmarks)

3.安装Redis

Redis的代码遵循ANSI-C编写,可以在所有POSIX系统(如Linux, *BSD, Mac OS X, Solaris等)上安装运行。而且Redis并不依赖任何非标准库,也没有编译参数必需添加。redis的安装出奇的简单,这可能也是他风靡的一个原因,让人很容易上手,不像某些东西,编译阶段就能让人完全绝望。

先去官网下载源码:

wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz

解压:

tar –zxvf redis-2.4.6.tar.gz

编译

需要说明的事,redis的安装非常简单,已经有现成的Makefile文件,直接运行make命令即可。

make

make install

Redis 由四个可执行文件:redis-benchmarkredis-cliredis-serverredis-stat 这四个文件,加上一个redis.conf就构成了整个redis的最终可用包。它们的作用如下:

  • redis-server:Redis服务器的daemon启动程序
  • redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
  • redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
  • redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况

现在就可以启动redis了,redis只有一个启动参数,就是他的配置文件路径。

redis-server /etc/redis.conf

注意,默认复制过去的redis.conf文件的daemonize参数为no,所以redis不会在后台运行,这时要测试,我们需要重新开一个终端。修改为yes则为后台运行redis。另外配置文件中规定了pid文件,log文件和数据文件的地址,如果有需要先修改,默认log信息定向到stdout.

下面是redis.conf的主要配置参数的意义:

  • daemonize:是否以后台daemon方式运行
  • pidfile:pid文件位置
  • port:监听的端口号
  • timeout:请求超时时间
  • loglevel:log信息级别
  • logfile:log文件位置
  • databases:开启数据库的数量
  • save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
  • rdbcompression:是否使用压缩
  • dbfilename:数据快照文件名(只是文件名,不包括目录)
  • dir:数据快照的保存目录(这个是目录)
  • appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
  • appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)

这时你可以打开一个终端进行测试了,配置文件中默认的监听端口是6379

我们可以开启一个Redis客户端进行测试

[root@SNDA-192-168-1-114 ~]# redis-cli 
Could not connect to Redis at 127.0.0.1:6379: Connection refused 
not connected> exit 
[root@SNDA-192-168-1-114 ~]# redis-server /etc/redis.conf 
[root@SNDA-192-168-1-114 ~]# redis-cli 
redis 127.0.0.1:6379> quit

4.redis数据结构

redis 的作者antirez曾称其为一个数据结构服务器(data structures server),这是一个非常准确的表述,redis的所有功能就是将数据以其固有的几种结构保存,并提供给用户操作这几种结构的接口。我们可以想象我们在各种语言中的那些固有数据类型及其操作。

redis目前提供四种数据类型:string,list,setzset(sorted set)和Hash

  • string是最简单的类型,你可以理解成与Memcached一模一个的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能更丰富。
  • list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。
  • set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。
  • zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解了有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。
  • Hash数据类型允许用户用Redis存储对象类型,Hash数据类型的一个重要优点是,当你存储的数据对象只有很少几个key值时,数据存储的内存消耗会很小.更多关于Hash数据类型的说明请见:http://code.google.com/p/redis/wiki/Hashes

在官网上给出了所有支持的接口列表,并副副附有详细的介绍,地址:

http://code.google.com/p/redis/wiki/CommandReference

另外,作者还提供了一个非常贴心的web命令行模拟页面,供初学者试用redis,地址:

http://try.redis-db.com/

5.redis数据存储

redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。

save seconds updatessave配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。

appendonly yes/no appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。

appendfsync no/always/everysec appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。

6.redis主从配置

redis支持master-slave的主从配置,配置方法是在从机的配置文件中指定slaveof参数为主机的ip和port即可

7.redis起步(链接整理)

项目首页,下方是各种语言支持列表:

http://code.google.com/p/redis/

作者在wiki中给出了一个非常好的例子,以使我们可以快速上手,地址:

http://code.google.com/p/redis/wiki/TwitterAlikeExample

同时作者推荐的另一个教程,地址:

http://labs.alcacoop.it/doku.php?id=articles:redis_land

一个redis爱好者创建的相关问题讨论网站:

http://www.rediscookbook.org/

为什么使用 Redis及其产品定位

http://www.infoq.com/cn/articles/tq-why-choose-redis

Redis内存使用优化与存储

http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage


----------------------------

Redis集群部署文档(centos6系统)

(要让集群正常工作至少需要3个主节点,在这里我们要创建6redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)

127.0.0.1:7000
127.0.0.1:7001

127.0.0.1:7002

127.0.0.1:7003

127.0.0.1:7004

127.0.0.1:7005

 

1:下载redis。官网下载3.0.0版本,之前2.几的版本不支持集群模式

下载地址:https://github.com/antirez/redis/archive/3.0.0-rc2.tar.gz

2:上传服务器,解压,编译

tar -zxvf redis-3.0.0-rc2.tar.gz 

mv redis-3.0.0-rc2.tar.gz redis3.0

cd /usr/local/redis3.0

make

make install

3:创建集群需要的目录

mkdir -p /usr.local/cluster

cd /usr.local/cluster

mkdir 7000

mkdir 7001

mkdir 7002

mkdir 7003

mkdir 7004

mkdir 7005

 

4:修改配置文件redis.conf

cp /usr/local/redis3.0/redis.conf  /usr.local/cluster

vi redis.conf

##修改配置文件中的下面选项

port 7000

daemonize yes

cluster-enabled yes

cluster-config-file nodes.conf 建议直接复制 你妹的手动改太坑了 是file不是files 啊啊啊啊!

cluster-node-timeout 5000

appendonly yes

##修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到7000/7001/7002/7003/7004/7005目录下面

cp /usr/local/cluster/redis.conf /usr/local/cluster/7000

cp /usr/local/cluster/redis.conf /usr/local/cluster/7001

cp /usr/local/cluster/redis.conf /usr/local/cluster/7002

cp /usr/local/cluster/redis.conf /usr/local/cluster/7003

cp /usr/local/cluster/redis.conf /usr/local/cluster/7004

cp /usr/local/cluster/redis.conf /usr/local/cluster/7005

 

##注意:拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称

 

5:分别启动这6redis实例

cd /usr/local/cluster/7000

redis-server redis.conf

cd /usr/local/cluster/7001

redis-server redis.conf

cd /usr/local/cluster/7002

redis-server redis.conf

cd /usr/local/cluster/7003

redis-server redis.conf

cd /usr/local/cluster/7004

redis-server redis.conf

cd /usr/local/cluster/7005

redis-server redis.conf

 

 

##启动之后使用命令查看redis的启动情况ps -ef|grep redis

如下图显示则说明启动成功

 

6:执行redis的创建集群命令创建集群

cd /usr/local/redis3.0/src

./redis-trib.rb  create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

6.1执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境

错误内容:/usr/bin/env: ruby: No such file or directory

所以需要安装ruby的环境,这里推荐使用yum install ruby安装

yum install ruby

 

6.2然后再执行第6步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装

 

错误内容:

./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)

from ./redis-trib.rb:24

yum install rubygems

6.3再次执行第6步的命令,还会报错,提示不能加载redis,是因为缺少redisruby的接口,使用gem 安装

错误内容:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)

from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

from ./redis-trib.rb:25

 

gem install redis

 

6.4 再次执行第6步的命令,正常执行

 

输入yes,然后配置完成。

 Redis集群部署3.0_第1张图片

至此redis集群即搭建成功!

7:使用redis-cli命令进入集群环境

redis-cli -c -p 7000


如果有需要大数据hadoop方面的资料请联系QQ:1967484968

6
1

我的同类文章

redis(1)
  • redis集群动态增加或者删除节点2015-01-21阅读7000
猜你在找
Linux环境C语言编程基础
【直通华为HCNA/HCNP系列R篇5】DHCP服务配置与管理
源码分析教程5部曲之5——redis源码分析
Linux下oracle 11g高可用DataGuard搭建
【直通华为HCNA/HCNP系列R篇3】路由器接口配置与管理
查看评论
28楼  CQUT_xiao 2016-03-03 13:37发表 [回复]
楼主您好,我想问一下:1、集群搭建成功了,如何关闭集群;2、我往集群中写入一些数据,直接关闭了虚拟机,但是下次创建集群是报错,说node is not empty,这个问题该怎么解决?
27楼  lcgissb 2016-03-02 12:18发表 [回复]
楼主,我想用java客户端连接redis,如果redis用集群部署的话,是否有类似于JedisClusterPool这样的连接池呢?还是需要自己实现一个吗?
26楼  lcgissb 2016-03-02 12:17发表 [回复]
楼主,我想用java客户端连接redis,如果redis用集群部署的话,是否有类似于JedisClusterPool这样的连接池呢?还是需要自己实现一个吗?
25楼  lcgissb 2016-02-29 18:00发表 [回复]
楼主,假如生产环境某个master挂到了,是不是它的从数据库会自动顶替上来,提供读写服务,是否需要我们格外配置呢?
24楼  lcgissb 2016-02-29 17:39发表 [回复]
楼主,我有几个问题,1:在生产环境,我是不是要在6台机子上面都安装redis,然后再使用命令 redis-trib.rb create --replicas 让他们组合到一起么?
2:sentinel和cluster都是做集群的,这两个有什么区别啊?
新手谢谢楼主
Re:  xu470438000 2016-02-29 17:42发表 [回复]
回复lcgissb:1:是的
2:sentinel是一个监控系统,监控主从节点的状态,不是集群。不支持分片存储
23楼  lcgissb 2016-02-29 16:44发表 [回复]
楼主你好,集群里面的从库和master一样,可以读写的吗?
Re:  xu470438000 2016-02-29 16:45发表 [回复]
回复lcgissb:对于用户而言 在哪个节点操作都可以,具体底层在操作的时候会自动跳转到对应的主节点执行
22楼  lcgissb 2016-02-29 16:26发表 [回复]
请问楼主 这六个节点都是master么?看说明是三个master三个slave是吧?如果是三个master三个从节点,那么你是如何制定哪些是master节点哪些是slave节点呢?难道3.x以后都不需要指定节点的从属关系么?不指定主从关系那么是怎么识别哪个节点是哪个master的从节点呢?cluster又是怎么在master宕机之后自动将master对应的从节点顶替master呢?主从都不需要自己再手动配置了吗?
Re:  xu470438000 2016-02-29 16:30发表 [回复]
回复lcgissb:这六个节点 三主三从,默认情况下redis集群会把前三个作为主节点,后面三个分别作为前面三个节点的从节点,
主从关系不需要我们知道,集群会按照你指定节点的先后顺序自动分配,
具体集群中的主从关系,可以连接到集群之后执行cluster nodes查看
主从切换这些都被集群封装了。
21楼  dev_test 2016-01-15 12:54发表 [回复]
好文章!
20楼  hzn947837903 2015-12-28 22:21发表 [回复]
请问下,集群模式下还可以设置登录密码吗?要每个节点都设置吗。。。
19楼  yiming_33 2015-12-12 20:21发表 [回复]
楼主 我的redis-trib.rb用不了 
我执行yum install ruby 也没有用 提示:
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
Updating certificate-based repositories.
Setting up Install Process
No package ruby available.
Error: Nothing to do
求救啊
18楼  淡忘-过去 2015-10-10 17:04发表 [回复]
配置了6个节点,怎么区分那个是主节点,那个是从节点啊,并且怎么区分那个从节点属于那个主节点?希望楼主解释一下
Re:  shy_snow 2015-12-30 09:11发表 [回复]
回复淡忘-过去:按顺序,前面的3个是主节点,后面的是从节点。
Re:  xu470438000 2015-10-27 13:14发表 [回复]
回复淡忘-过去:使用下面命令查看redis-cli -p 7000 cluster nodes
17楼  山西后生 2015-09-21 10:15发表 [回复]
楼主大神,怎么设置能同时启动着六个redis实例,现在挨个启动太麻烦了,求指点!!!!
Re:  xu470438000 2015-10-27 13:16发表 [回复]
回复山西后生:可以使用shell脚本实现,
16楼  cm493368061 2015-08-31 16:07发表 [回复]
更新淘宝的ruby 出错.rb:36:in `gem_original_require': no such file to load -- zlib (LoadError)
15楼  cm493368061 2015-08-31 16:03发表 [回复]
我更新成淘宝的ruby源 更该不了!
/usr/local/ruby-1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- openssl (LoadError)
14楼  lgq929 2015-07-22 10:10发表 [回复]
你好 ,讨论个问题
既然是集群,为何还要 主从,直接主不就可以了?
这样做 有什么作用吗?谢谢
Re:  xu470438000 2015-08-28 09:19发表 [回复]
回复lgq929:如果某一个主节点down了,那么集群就不能用了。如果有从节点的话,会把从节点切换为主节点
13楼  lgq929 2015-07-22 10:08发表 [回复]
你好 ,讨论个问题
既然是集群,为何还要 主从,直接主不就可以了?
这样做 有什么作用吗?谢谢
Re:  xu470438000 2015-10-27 13:15发表 [回复]
回复lgq929:某一个主节点如果down了,那集群就不能使用了
12楼  lgq929 2015-07-22 10:06发表 [回复]
你好 ,讨论个问题
既然是集群,为何还要 主从,直接主不就可以了?
这样做 有什么作用吗?谢谢
11楼  G55395162 2015-07-10 19:16发表 [回复]
Redis3.0所谓的ASK 转向/MOVED 转向机制,访问集群内的缓存数据需要二次定位,这绝对是一个大坑,详细分析见http://www.cnblogs.com/guoyinglin/p/4604279.html
10楼  姜龙 2015-06-24 15:12发表 [回复]
难道是按照配置的顺序前几个是master后几个是对应的slave?真要是这样 这也太坑爹了。。。
Re:  xu470438000 2015-08-28 09:20发表 [回复]
回复姜龙:是这样的,
9楼  姜龙 2015-06-24 15:09发表 [回复]
请问楼主 这六个节点都是master么?看说明是三个master三个slave是吧?如果是三个master三个从节点,那么你是如何制定哪些是master节点哪些是slave节点呢?难道3.x以后都不需要指定节点的从属关系么?不指定主从关系那么是怎么识别哪个节点是哪个master的从节点呢?cluster又是怎么在master宕机之后自动将master对应的从节点顶替master呢?我怎么看这这六个节点都是master呢,是在不明白 求明了。。。。
8楼  燧人氏 2015-06-15 16:13发表 [回复]
刚接触,有两个问题求助博主

一、
生产环境下,我有三台服务器。
要如何部署这6个节点,或者说N个节点合适?

二、
假如我代码中连接的是A节点(192.168.1.100:7000)挂了。
虽然A2节点会顶上,但是我代码是固定是连接A的节点,那也就是永远连不到A2上。那是不是还需要sentinel来配合?
Re:  xu470438000 2015-08-28 09:21发表 [回复]
回复燧人氏:可以把集群内的所有节点都配置到代码中,使用集群连接池
7楼  c314170122 2015-05-21 09:30发表 [回复]
我想知道,如果我手动把一个节点停掉,就是模拟宕机,然后再启动,怎么把这个节点再次加入到集群呢?
6楼  qq_28266543 2015-05-17 15:37发表 [回复]
请帮我看下这个是什么问题
/usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- redis (LoadError)
from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from ./redis-trib.rb:25:in `<main>' 请帮我看下这个是什么问题
Re:  andyNancy0106 2015-05-18 16:13发表 [回复]
回复qq_28266543:执行 gem install redis即可。
#由于源的原因,可能下载失败,就手动下载下来安装 (或者从csdn上下载)
#download地址:http://rubygems.org/gems/redis/versions/3.0.0 
gem install -l /data/soft/redis-3.0.0.gem
这样就好了
Re:  qq_28266543 2015-05-20 15:49发表 [回复]
回复andyNancy0106:CSDN 版本不好找 rubygems 官网下不了 可以 删除官网的gem 用淘宝的 gem 可以参考 ruby.taobao.org 再 gem install redis 就可以了
Re:  qq_28266543 2015-05-19 10:06发表 [回复]
回复andyNancy0106:好的 多谢 我刚试了 从CSDN下 下载了 redis-3.0.gem的 我redis-cluster 是3.0.1版本的 在创建集群的时候报了一大堆错。 错误语句都含 nil(因为我在家调试的 现在在公司 所以抱歉 贴不出错误信息)我在节点 6380(主节点) set 123 123 提示我 [error] move 5xxx 127.0.0.1:6381(主节点)可是我 进 6381端口查看 get 123 结果是 nil请问下 这个是版本 问题吗
Re:  qq_28266543 2015-05-19 10:05发表 [回复]
回复andyNancy0106:好的 多谢 我刚试了 从CSDN下 下载了 redis-3.0.gem的 我redis-cluster 是3.0.1版本的 在创建集群的时候报了一大堆错。 错误语句都含 nil(因为我在家调试的 现在在公司 所以抱歉 贴不出错误信息)我在节点 6380(主节点) set 123 123 提示我 [error] move 5xxx 127.0.0.1:6381(主节点)可是我 进 6381端口查看 get 123 结果是 nil请问下 这个是版本 问题吗
Re:  dreamyao5 2015-05-22 17:01发表 [回复]
回复qq_28266543:回复qq_28266543:妈蛋这个问题也撸了我一上午!!! 坑呀!!!!
比如 redis-cli -p 7000 这样连接,再 set foo bar 报错


应该是这样redis-cli -c -p 7000 ; -c 呀!!!!  经常也懒得写就让人蛋疼了,  博主写了
官网上:http://redis.io/topics/cluster-tutorial
Re:  dreamyao5 2015-05-22 17:07发表 [回复]
回复dreamyao5:官网说:The redis-cli utility in the unstable branch of the Redis repository at GitHub implements a very basic cluster support when started with the -c switch.
5楼  jmp12315 2015-05-08 14:44发表 [回复]
>>> Creating cluster
Connecting to node 127.0.0.1:7001: OK 然后后面跟着好多/usr/local/ruby/lib/ruby/gems/2.1.0/gems/redis-3.0.0/lib/redis.rb:182: warning: this causes ArgumentError in the next release
最后[ERR] Node 127.0.0.1:7000 is not configured as a cluster node.
怎么解决啊
4楼  乐森林 2015-04-28 17:11发表 [回复]
/usr/local/lib/site_ruby/1.8/rubygems/core_ext/kernel_require.rb:54:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/local/lib/site_ruby/1.8/rubygems/core_ext/kernel_require.rb:54:in `require'
from ./redis-trib.rb:25
gem install redis

The program 'gem' can be found in the following packages:
* ruby1.9.1
* rubygems
Try: apt-get install <selected package>


然后我用apt-get 之后 还是不行
Re:  qq_28266543 2015-05-19 10:43发表 [回复]
回复乐森林:gem install redis这句话我电脑都执行不了 你那怎么行啊 好神奇
Re:  dengrenchao 2015-08-25 17:14发表 [回复]
回复qq_28266543:我一次就搞定了没有任何问题,请问,你怎么做的!
3楼  乐森林 2015-04-28 16:48发表 [回复]
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
2楼  anker127 2015-04-16 16:49发表 [回复]
>>> Creating cluster
Connecting to node 127.0.0.1:7001: OK
[ERR] Node 127.0.0.1:7001 is not configured as a cluster node.
大神这是怎么弄呢?没有设置为集群的?
1楼  h_d_yue 2015-04-10 15:26发表 [回复] [引用] [举报]
您好,执行./redis-trib.rb create --replicas 1 127.0.0.1* 命令时出现错误,如下:Connecting to node 127.0.0.1:7000: [ERR] Sorry, can't connect to node 127.0.0.1:7000,怎么 解决?
Re:  cc123ll456 2015-04-14 16:27发表 [回复] [引用] [举报]
回复h_d_yue:你是不是没有启动redis-server -p 7000
Re:  鼻涕过河 2015-07-24 14:36发表 [回复] [引用] [举报]
回复cc123ll456:我也是这个问题:
[ERR] Node 127.0.0.1:7001 is not configured as a cluster node.
但是用redis-server -p 7000这个命令也错误,信息如下:
[root@idh63 bin]# redis-server -p 7000
20685:C 24 Jul 14:29:51.082 # Fatal error, can't open config file '-p'
怎么办呀
Re:  xu470438000 2015-10-27 13:17发表 [回复] [引用] [举报]
回复鼻涕过河:查看集群的配置文件,redis.conf中的配置是否修改正确,应该是没有吧集群模式打开

你可能感兴趣的:(Redis集群部署3.0)