1、概述:

  redis是一种工作在内存里no-sql的非关系型数据库,广泛应用于缓存需求,以减少大量的数据访问对数据库的压力,还很适合用来充当整个互联网架构中各级之间的cache 比如lvs的4层转发层 nginx的7层代理层

  虽然是工作在内存中,但官方也提供了数据可持续化方案,目前有三种:aof\rdb\point

  aof 就像是mysql数据库的binlog日志,将每一次写操作以追加的形式记录在其中以文件的形式刷到磁盘里

  rdb 则是一种快照机制,redis工作在内存中 rdb就是每隔一段时间,对内存中的数据做一次快照,保存在rdb文件中

  point 在redis4.0的新特性中 采用了aof-rdb的混合方案来保障数据的持久性 但是官方的说法是还不成熟

2、安装

 下载redis,我这里使用的是redis-3.0.7.tar.gz,将它放在/usr/local/src下



[root@CentOS7 redis-3.0.7]# make PREFIX=/usr/local/redis install



 解压redis-3.0.7.tar.gz进入解压目录运行redis-server,但这种运行方式是以前台的方式运行,运行后就不可以再输入其它的命令,将/usr/local/src/redis-3.0.7/redis.conf里的daemonize yes改为daemonize no

 然后再以这种方式进行运行



[root@CentOS7 bin]# ./redis-server ../../src/redis-3.0.7/redis.conf 



  安装rubdy



[root@CentOS7 src]# yum install ruby rubygems -y



  安装ruby和redis的接口程序



[root@CentOS7 src]# gem install redis



遇到报错信息



Fetching: redis-4.0.2.gem (100%)
ERROR:  Error installing redis:
    redis requires Ruby version >= 2.2.2.



那么利用rvm来安装高版本的ruby



[root@CentOS7 src]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
[root@CentOS7 src]# curl -sSL https://get.rvm.io | bash -s stable
[root@CentOS7 src]# source /usr/local/rvm/scripts/rvm
[root@CentOS7 src]# rvm install 2.4.4



使用新版本ruby生效并安装ruby和redis的接口



[root@CentOS7 src]# rvm use 2.4.4
Using /usr/local/rvm/gems/ruby-2.4.4
[root@CentOS7 src]# rvm use 2.4.4 --default
Using /usr/local/rvm/gems/ruby-2.4.4
[root@CentOS7 src]# ruby -v
ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-linux]
[root@CentOS7 src]# gem install redis
Fetching: redis-4.0.2.gem (100%)
Successfully installed redis-4.0.2
Parsing documentation for redis-4.0.2
Installing ri documentation for redis-4.0.2
Done installing documentation for redis after 0 seconds
1 gem installed



在/usr/local下创建redis-cluster文件夹,并在其文件夹下创建7001~7006的目录

redis cluster lua脚本 redis-cluster_rvm

并将源码里的redis-trib.rb拷贝到此目录下



[root@CentOS7 redis-cluster]# cp /usr/local/src/redis-3.0.7/src/redis-trib.rb /usr/local/redis-cluster/redis-trib.rb



将之前安装redis的bin目录下的文件和配置文件分别拷贝到7001~7006,并修改配置

redis cluster lua脚本 redis-cluster_rvm_02



port 7001
cluster-enabled yes



分别修改完成之后 ,分别至7001~7006的文件内,分另启动redis-cluster



[root@CentOS7 redis-cluster]# cd 7001
[root@CentOS7 7001]# ./redis-server redis.conf



redis cluster lua脚本 redis-cluster_ruby_03

这样就可以执行集群的创建命令了,至/usr/local/redis-cluster下



[root@CentOS7 redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.133.159:7001 192.168.133.159:7002 192.168.133.159:7003 192.168.133.159:7004 192.168.133.159:7005 192.168.133.159:7006



其中的“1”代表的一主有一个从的节点,而集群最少要有三个节点,这样一主一从,即6台服务器了

有其它博主遇到过以下的错误信息



[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0



解决方案为(本人没有遇到类似的错误,但感觉遇到的人不少,记录在这里一下)



解决方法是删除生成的配置文件nodes.conf,如果不行则说明现在创建的结点包括了旧集群的结点信息,需要删除redis的持久化文件后再重启redis,比如:appendonly.aof、dump.rdb