Redis 3.0 cluster 集群环境搭建

最近学习用redis, 装了个centos-7虚拟机,在网上参考了很多博文,然后拼拼凑凑写了一点东东,跟大家共享。

安装redis 3.0

1、首先下载redis 3.0

  1. ·wget http://download.redis.io/releases/redis-3.0.0.tar.gz
  2. tar zxvf redis-3.0.0.tar.gz
  3. cd redis-3.0.0

2、编译

  1. make

make命令执行完成编译后,会在src目录下生成6个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump、redis-sentinel。 

至此,实际就可以到src目录下启动redis: 
3、后台启动redis服务

  1. ./redis-server &

如果没有修改配置,会看到下面的状态: 
这里写图片描述 
然后启动redis客户端:

  1. ./redis-cli

这里写图片描述 
出现上面的界面,说明成功进入redis,可以测试: 
这里写图片描述


上边是我们编译完就运行redis,但是通常,我们在编译之后会安装redis,这样就可以在所有路径下用redis的命令了:

  1. make install

安装后会将make编译生成的可执行文件拷贝到/usr/local/bin目录下,这样无论在哪儿都可以执行redis-server来启动redis服务了。 
注释: 
▲redis的默认端口号是6379,(据redis的作者antirez的博文说,6379在是手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字。而MERZ长期以来被antirez及其朋友当作愚蠢的代名词。) 
▲Redis有两种存储方式,默认是snapshot方式,实现方法是定时将内存的快照(snapshot)持久化到硬盘,这种方法缺点是持久化之 后如果出现crash则会丢失一段数据。因此在完美主义者的推动下作者增加了aof方式。aof即append only mode,在写入内存数据的同时将操作命令保存到日志文件。

以后台守护形式运行Redis 
需要读取配置文件方式启动 
注意,默认复制过去的redis.conf文件的daemonize参数为no,所以redis不会在后台运行,我们可以修改redis.conf文件,这个文件就是解压后的redis根目录下

  1. daemonize yes
  2. redis-server /usr/redis-3.0.0/redis.conf

查看redis进程

  1. ps aux | grep redis

redis cluster集群搭建

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

  1. 127.0.0.1:7000
  2. 127.0.0.1:7001
  3. 127.0.0.1:7002
  4. 127.0.0.1:7003
  5. 127.0.0.1:7004
  6. 127.0.0.1:7005

创建集群需要的目录

  1. mkdir -p /usr/local/cluster
  2. cd /usr/local/cluster
  3. mkdir 7000 7001 7002 7003 7004 7005

修改配置文件redis.conf

  1. cp /usr/local/redis3.0.0/redis.conf /usr/local/cluster
  2. vi redis.conf

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

  1. port 7000
  2. daemonize yes
  3. cluster-enabled yes
  4. cluster-config-file nodes.conf
  5. cluster-node-timeout 5000
  6. appendonly yes

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

  1. cp /usr/local/cluster/redis.conf /usr/local/cluster/7000
  2. cp /usr/local/cluster/redis.conf /usr/local/cluster/7001
  3. cp /usr/local/cluster/redis.conf /usr/local/cluster/7002
  4. cp /usr/local/cluster/redis.conf /usr/local/cluster/7003
  5. cp /usr/local/cluster/redis.conf /usr/local/cluster/7004
  6. cp /usr/local/cluster/redis.conf /usr/local/cluster/7005

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

  1. cd /usr/local/cluster/7000
  2. redis-server redis.conf
  3. cd /usr/local/cluster/7001
  4. redis-server redis.conf
  5. cd /usr/local/cluster/7002
  6. redis-server redis.conf
  7. cd /usr/local/cluster/7003
  8. redis-server redis.conf
  9. cd /usr/local/cluster/7004
  10. redis-server redis.conf
  11. cd /usr/local/cluster/7005
  12. redis-server redis.conf

启动之后使用命令查看redis的启动情况ps aux|grep redis,如果出现下面的结果,说明启动成功(注意:必须进入到每一个目录下,再执行redis-server redis.conf)。 
这里写图片描述

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

  1. cd /usr/local/redis3.0/src
  2. ./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

执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境。错误内容:/usr/bin/env: ruby: No such file or directory 
所以需要安装ruby的环境,这里推荐使用yum install ruby安装

  1. yum install ruby

然后再执行刚才的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装 
错误内容: 
./redis-trib.rb:24:in `require’: no such file to load – rubygems (LoadError) 
from ./redis-trib.rb:24

  1. yum install rubygems

再次执行第6步的命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用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

  1. gem install redis

出现错误:

ERROR: Could not find a valid gem ‘redis’ (>= 0), here is why: 
Unable to download data from https://rubygems.org/ - Errno::ECONNRESET: Connection reset by peer - SSL_connect 
(https://rubygems.org/latest_specs.4.8.gz)

解决方案: 
可以求助万能的淘宝镜像站 https://ruby.taobao.org/

  1. gem sources -a https://ruby.taobao.org/
  2. #然后在执行:
  3. gem install redis

再次执行刚才的创建集群的命令,正常执行。 
这里写图片描述 
至此redis集群即搭建成功!

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

  1. redis-cli -c -h 127.0.0.1 -p 7000
  2. #用 cluster nodes 可以查看节点信息,

redis-trib默认用前3个实例作为Master,后3个作为Slave。 

集群重启: 
目前redis-trib的功能还比较弱,需要重启集群的话先手动kill掉各个进程,删除掉所有redis instance的aof、node-config、rdb文件(这样,之前的数据会丢失),然后重新启动就可以了,如果不删除原实例的文件,重启的时候会报错。

  1. ps -ef | grep redis | awk '{print $2}' | xargs kill

故障转移 
在高可用性方面,Redis可算是能够”Auto”一把了!Redis Cluster重用了Sentinel的代码逻辑,不需要单独启动一个Sentinel集群,Redis Cluster本身就能自动进行Master选举和Failover切换。

执行:set name “zhangsan”,发现name被存到了 7000 节点上了。 
下面我们故意kill掉7000结点,之后可以看到结点状态变成了fail,而Slave 7003被选举为新的Master。 
尝试查询之前保存在7000上的Key “name”,可以看到7003顶替上来继续提供服务,整个集群没有受到影响。 
性能检测: 
redis 自己提供了一个性能测试工具redis-benchmark. redis-benchmark可以模拟N个机器,同时发送M个请求。 
用法:

  1. redis-benchmark [-h ] [-p ] [-c ] [-n <requests]> [-k ]
  2. -h <hostname> Server hostname (default 127.0.0.1)
  3. -p <port> Server port (default 6379)
  4. -s <socket> Server socket (overrides host and port)
  5. -c <clients> Number of parallel connections (default 50) 并发客户端数
  6. -n <requests> Total number of requests (default 10000) 请求数量
  7. -d <size> Data size of SET/GET value in bytes (default 2) set 数据大小
  8. -k <boolean> 1=keep alive 0=reconnect (default 1) 是否采用keep alive模式
  9. -r <keyspacelen> Use random keys for SET/GET/INCR, random values for SADD
  10. Using this option the benchmark will get/set keys
  11. in the form mykey_rand:000000012456 instead of constant
  12. keys, the <keyspacelen> argument determines the max
  13. number of values for the random number. For instance
  14. if set to 10 only rand:000000000000 - rand:000000000009
  15. range will be allowed.
  16. -P <numreq> Pipeline <numreq> requests. Default 1 (no pipeline). 是否采用Pipeline模式请求,默认不采用
  17. -q Quiet. Just show query/sec values 仅仅显示查询时间
  18. --csv Output in CSV format 导出为CSV格式
  19. -l Loop. Run the tests forever 循环测试
  20. -t <tests> Only run the comma separated list of tests. The test
  21. names are the same as the ones produced as output.
  22. -I Idle mode. Just open N idle connections and wait

经过测试,我的笔记本可以处理每秒3万多个请求,性能还不错。 

这里写图片描述

猜你喜欢

转载自zaizai2013.iteye.com/blog/2337093