Linux下Redis集安装部署及使⽤详解(在线和离线两种安装+相关错误解决⽅
案)
⼀、应⽤场景介绍
本⽂主要是介绍Redis集在Linux环境下的安装讲解,其中主要包括在联⽹的Linux环境和脱机的Linux环境下是如何安装的。因为⼤多数时候,公司的⽣产环境是在内⽹环境下,⽆外⽹,服务器处于脱机状态(最近公司要上线项⽬,就是⽆外⽹环境的Linux,被离线安装坑惨了,⾛了很多弯路,说多了都是⾎泪史啊%>_<%)。这也是笔者写本⽂的初衷,希望其他⼈少⾛弯路,下⾯就介绍如何在Linux安装部署Redis集。
⼆、安装环境及⼯具
系统:Red Hat Enterprise Linux Server release 6.6
⼯具:XShell5及Xftp5
安装包:GCC-7.1.0
Ruby-2.4.1
Rubygems-2.6.12
Redis-3.2.9(3.x版本才开始⽀持集功能)
三、安装步骤
要搭建⼀个最简单的Redis集,我们⾄少需要6个节点:3个Master和3个Slave。那为什么需要3个Master呢?其实就是⼀个“铁三⾓”的关系,当1个Master下线的时候,其他2个Master 和对应的Salve⽴马就能顶替上去,确保集能够正常使⽤,如果你之前了解Mongodb/Hadoop/Strom这些的话,你就很容易⽬标⼀般分布式的最低要求基数个数节点,这样便于选举(少数服从多数的原则)。本⽂当中,我们就偷下懒,在⼀台Linux虚拟机上搭建6个节点的Redis集(实际真正⽣产环境,需要3台Linux服务器分布存放3个Master)
1、安装GCC环境
安装Redis需要依托GCC环境,先检查Linux是否已经安装了GCC,如果没有安装,则需要进⾏安装
检查GCC是否安装,可以看看版本号
$ gcc -v
hadoop安装详细步骤linux如果已经安装了GCC,则会显⽰以下信息
如果没有任何信息,则我们可以通过命令yum install gcc-c++进⾏在线安装
$ yum install gcc-c++
如果没有⽹络的时候,我们就需要下载GCC的安装包进⾏⼿动安装了,具体⽅法还是⽐较复杂的,具体离线安装GCC的⽅法,请参考我的另外⼀篇⽂章《》
2、安装Ruby和Rubygems
如果有⽹的话,则通过yum命令进⾏安装,⾃动将关联的依赖包全部安装
$ yum install ruby
$ yum install rubygems
如果是离线的状态,我们则可以选择下载Ruby和Rubygems,解压⼿动进⾏安装,具体的⽅法请参考我的另外两篇⽂件《》和《》,这⾥我们不做多讲解。
四、安装Redis
2、安装Redis
转到Redis的存放⽬录,然后通过命令解压Redis压缩包
$ cd /home/xxxxxxxx/redis
$ tar -zxvf redis-3.2.
通过make命令进⾏安装Redis(需要root权限)
$ cd /home/xxxxxxxx/redis/redis-3.2.9
$ make && make install //make 这⾥如果不指定PREFIX,默认将安装在/usr/local/bin下,保持默认就好
如果没有root权限是⽆法安装的,如图所⽰
我们获取root权限之后再进⾏安装,看到如下信息,说明Redis安装成功了,也可以到/usr/local/bin⽬录下看看
如果只是想要单机,不存在集功能,我们现在就可以将Redis运⾏起来,我们直接在刚刚解压的Redis
⽬录下运⾏命令就可以将单机的Redis 运⾏起来
$ cd /home/xxxxxxxx/redis/redis-3.2.9
$ f //所有相关配置信息都在conf⾥⾯,如果不设置,默认端⼝号为:6379
五、配置Redis集
刚刚上⾯讲到如果只是想运⾏单机版的Redis(个⼈研究Redis可以安装单机版),上⾯的讲解已经够了,不过现实当中,我们往往是需要使⽤到集功能的,进⾏容错。
之前讲到是我们需要6个节点的Redis作为集,所以我们需要创建6个⽂件夹,分别存放6个节点的配置信息,6个节点需要对应6个端⼝号,⽐如7001~7006,这个端⼝号我们⾃⾏定
义,我们通过xftp5可视化创建⼀下。
第⼀步、我们也可以通过命令mkdir批量创建,,命令可能会更快点。
下⾯重点来了,需要6个节点,所有我们需要配置各⾃的f配置⽂件。到我们Redis的安装⽬录usr/local/bin,将redis-cli、redis-server、f(没有conf⽂件,可以从压缩包⾥拷个出来,或者⾃⼰直接新建⼀个空的conf⽂件,后⾯再配置相关信息),分别复制到刚刚创建的6个⽂件夹当中。
第⼆步、接下来,我们需要配置f⽂件,如果你是从压缩包拷贝出来,你会发现特别多的备注,这些是都是官⽹的备注讲解,你可以全部删除,只配置你想配置的信息就⾏。我们主要配置相对应的端⼝信息和集配置信息
还有很多f配置信息,实际场景我们再⾃⾏配置,关于配置f的相关信息,可以参考笔者另⼀篇⽂件《》。我们分别配置相对应的6个f信息。
分别将这6个redis服务启动起来(命令f),⼀个⼀个去启动有点复杂,在redis⽬录创建⼀个sh脚本来启动6个实例
1 $cd /home/xxxxxxxx/redis
2 $vim startall.sh 就会打开vim编辑器,创建⼀个空的⽂本
:wq!保存脚本,创建成功:
执⾏./startall.sh 提⽰permission denied说明权限不⾜,执⾏命令chmod 777 startall.sh修改权限获取root⽤户执⾏脚本
$ chmod 777 startall.sh 分配权限
$ sh -x startall.sh 执⾏脚本
=======补充说明:2017-12-14 =========
有⽹友跟博主反应,上⾯这个批量脚本不能执⾏,是博主漏加了命令:kill -2
因为:每次执⾏⼀个redis启动,都会停留在redis的启动界⾯(上⽂说到的单机启动redis的那个界⾯),所以我们需要模拟退出当前界⾯,执⾏下⼀条命令
Kill -2 :功能类似于Ctrl + C 是程序在结束之前,能够保存相关数据,然后再退出。
将上⽂的脚本改造下就⾏;如图所⽰
Ps:如果出现路径不到的问题,将上⽂的路径全部换成绝对路径
=================================
再执⾏./startall.sh, 然后通过命令netstat -tnulp | grep redis和ps aux | grep redis查看redis运⾏情况,可以看到端⼝7001、7002、7003、7004、7005、7006的redis都起来了。噢耶~~~~
第三步、实际上,Redis集的操作在后⽂你可以看到是通过Ruby脚本来完成的,因此我们需要安装Ru
by相关的RPM包,以及Redis和Ruby的接⼝包。我们要⽤到之前安装的Ruby。我们到之前解压的⽂件redis-3.2.9/src⽬录下到⽂件为:redis-trib.rb,如图所⽰
将该⽂件拷贝到与6个⽂件夹的同级⽬录下
在redis⽬录下执⾏命令:
$ ./redis-trib.rb create --replicas 1127.0.0.1:7001127.0.0.1:7002127.0.0.1:7003127.0.0.1:7004127.0.0.1:7005127.0.0.1:7006
===============相关错误汇总解决⽅案(你以为上⾯是重点%>_<%,其实下⾯这才是本⽂重点(太多坑))===============
如果执⾏上述命令出现Ruby和Rubygems错误的话,那是没有安装Ruby和Rubygems,所有这就是为什么我们⽂章之前就要提前安装好Ruby和Rubygems。但是有些⼈说这两个我们已经安装了,为什么还会报如下错误的话
/home/xxxxxxxx/ruby/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
from /home/xxxxxxxx/ruby/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from ./redis-trib.rb:25:in `<main>'
执⾏gem install redis-3.命令安装。
$ gem install redis-3.
但是执⾏这个⼜报了错误,如果没有报错的话那就说明⼈品好啊......真是⼼塞~~~如图所⽰,这是因为需要依赖zlib⼯具。
ERROR: Loading command: install (LoadError)
cannot load such file -- zlib
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
1 $tar -xvzf zlib-1.2.
2 $cd zlib-1.2.
3 $./configure --prefix=/usr/local/zlib 设置安装路径
4 $make
5 $make instal
安装完zlib之后,我们再需要执⾏以下命令
1 $ cd /home/xxxxxxxx/ruby/ruby-2.4.1/ext/zlib 备注:/home/xxxxxxxx/ruby/ruby-2.4.1这个⽬录是ruby安装包后解压的⽬录,就是前⾯提到的ruby离线安装
2 $ ruby extconf.rb
3 $ make && make install
可是⼜报错了,真是⽆⼒吐槽了~~~错误信息如下
checking for deflateReset() in -lz... no
checking for deflateReset() in - no
checking for deflateReset() in - no
checking for deflateReset() in - no
checking for deflateReset() in - no
checking for deflateReset() in - no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
本着不放弃的原则,只能去外国⽹站查查资料看怎么解决了,发现原来是要将⽂件安装到本地运⾏库的⾥⾯才⾏,所有安装的时候需要额外配置信息,但是前提是我们需要安装zlib,才能继续下⼀步。
安装好zlib,然后我们重新输⼊命令
1 $ cd /home/xxxxxxxx/ruby/ruby-2.4.1/ext/zlib
备注:/home/xxxxxxxx/ruby/ruby-2.4.1这个⽬录是ruby安装包后解压的⽬录,就是前⾯提到的ruby离线安装
2 $ ruby extconf.rb --with-zlib-include=/usr/local/zlib/include/ --with-zlib-lib=/usr/local/zlib/lib //会⽣成⼀个Makefile⽂件
备注:/usr/local/zlib是我的zlib安装⽬录
3 $ make && make install
这个时候会⾃动⽣成⼀个Makefile⽂件,如图所⽰
接下来我们make && make install 安装⼀下,但是当我们make的时候,⼜出现了错误如下
make: *** No rule to make target `/include/ruby.h', needed by `zlib.o'. Stop
这个时候打开ext/zlib/Makefile⽂件,到下⾯⼀⾏把路径进⾏修改⼀下。
zlib.o: $(top_srcdir)/include/ruby.h 改成:zlib.o: ../../include/ruby.h
如图所⽰
修改完成,然后保存:接着我们再make && make install,这个时候安装成功了~~所以就放⼼地接着⼲吧!(没有看到我也⽆能为⼒了)安装完成后如下显⽰
我们回到redis的gem⽬录下,继续执⾏命令:gem install redis-3.
但是......⼜出现了错误,原来我们还需要安装OpenSSL,因为Redis集互是需要OpenSSL
1 $ tar -xzvf openssl-1.0.
2 $ cd openssl-1.0.2l
3 $ ./config -fPIC --prefix=/usr/local/openssl enable-shared
4 $ ./config -t
5 $ make && make install
安装openssl成功界⾯如下:
我们⼜要到到Ruby解压的源码[/home/xxxxxxxx/ruby-2.4.1]⽬录下的ext/openssl ⽬录,如图所⽰
安装和zlib⼀样的⽅式安装openssl
1 $ cd /home/xxxxxxxx/ruby-2.4.1/ext/openssl
2备注:/home/xxxxxxxx/ruby/ruby-2.4.1这个⽬录是ruby安装包后解压的⽬录,就是前⾯提到的ruby离线安装
3 $ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib //会⽣成⼀个Makefile⽂件
4备注:/usr/local/openssl是我的openssl安装⽬录
5 $ make && make install
但是我们make的时候,⼜出现了和zlib类似的错误
make: *** No rule to make target `/include/ruby.h', needed by `ossl.o'. Stop
还是按照刚刚zlib操作⼀样,打开Makefile⽂件,将$(top_srcdir)全部改成../..
修改后保存,再执⾏make && make install,这⼀次安装成功了~~
然后我们再回到之前redis⽬录下执⾏命令:gem install redis-3.
第六步、启动Redis集
完成以上步骤之后,我们再回到第三步执⾏命令
在redis⽬录下执⾏命令:
$ ./redis-trib.rb create --replicas 1127.0.0.1:7001127.0.0.1:7002127.0.0.1:7003127.0.0.1:7004127.0.0.1:7005127.0.0.1:7006
我们选择yes,意思是服从这种主从分配⽅式,我们也可以通过配置⽂件⾃⼰指定slave
第五、Redis集设置密码
在实际场景当中,我们都需要考虑到安全问题,设置密码这个环节也是必不可少,Redis单⽚机设置密码都挺简单的,⼀般分为两种⽅式:
1、先设置各个Redis单机的密码
⽅法⼀:修改所有Redis集中的f配置⽂件
masterauth password123//设置master密码,是为了Salve能够连接上Master
requirepass password123//设置Redis访问请求密码
⽅法⼆:进⼊各个Redis集中的实时配置
./redis-cli -c -p 7001//分别进⼊各个Redis⽚机进⾏各⾃设置
config set masterauth passwd123
config set requirepass passwd123
config rewrite
注意:各个节点密码都必须⼀致,否则Redirected就会失败,个⼈推荐第⼆种⽅式,这种⽅式会把密码写⼊到f⾥⾯去,且不⽤重启。
建议设置好masterauth的密码,否则后期的Master和Salve⽆法进⾏数据同步,如图所⽰:
2、再设置redis-trib.rb的密码进⾏集分配启动(最关键⼀步)
如果你设置了各个Redis密码,但是使⽤下⾯的命令还是报错了,对的~错了那就是对了,因为你还需要进⾏关键的⼀步需要设置,O(∩_∩)O哈哈~。
$ ./redis-trib.rb create --replicas 1127.0.0.1:7001127.0.0.1:7002127.0.0.1:7003127.0.0.1:7004127.0.0.
1:7005127.0.0.1:7006
⼀般会出现以下错误:./redis-trib.rb check 127.0.0.1:7001,则会报错ERR] Sorry, can’t connect to node 127.0.0.1:7001,我们需要再次设置client.rb的配置⽂件
解决⽅法,到系统的client.rb(温馨提⽰:不知道这个再哪⾥,可以使⽤find命令进⾏查:ind / -name 'client.rb'),然后修改passord,具体设置如图所⽰:
设置好密码保存退出之后,再执⾏上⾯集redis-trib.rb的命令,这样就⼤功告成了~~~O(∩_∩)O
第六、Redis集测试
我们来测试⼀下Redis集,通过连接任⼀redis端⼝,添加数据
[root@localhost redis7001]# redis-cli -p 7001 -c
[root@localhost redis7001]# redis-cli -c -h 127.0.0.1 -p 7001 shutdown //关闭集,如果没有-h参数,默认连接127.0.0.1,如果没有-p参数,默认连接6370端⼝(所有如果⽤默认的,就没有-h -p)说明:-h+host –p+端⼝号 –c 是要连接集,注意坑,不加会报错的
可以看到连接的是7001的节点,set name的时候计算了存在哪个hash槽上,会跳转到那个槽对应的节点
结束语:⾄此,Redis的集配置的前世今⽣已到此结束,在没有⽹络的环境下中途碰到了很多坑,现在我们可以尽情享受Redis,纵使虐我千百遍,我待它如初恋
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论