系统:Red Hat Enterprise Linux Server
工具:XShell5及Xftp5等远程工具
安装包:Ruby-2.4.1及以上
Rubygems-2.6.12及以上
Redis-3.2.8及以上(3.x版本才开始支持集群功能)
Redis-3.0.0-gem及以上(该版本不一定要和redis版本保持一致,只要保证redis-trib.rb能够运行即可)
要搭建一个最简单的Redis集群,我们至少需要6个节点,具体的原理暂不讨论,只说明搭建步骤,我们这里使用两台服务器搭建。
安装redis之前首先检查GCC环境,如果没有安装GCC环境,则需要进行安装,检查GCC是否安装,可以看看版本号,通过命令gcc –v,如果已经安装了GCC,则会显示以下信息
如果没有任何信息,则我们需要通过命令yum install gcc-c++进行在线安装,如果没有网络的时候,我们就需要下载GCC的安装包进行手动安装了,具体方法比较复杂,不在这里说明。
2. 解压编译redis
执行命令cd /usr/local/ ,mkdir redis,创建一个redis目录,将redis压缩包放在redis目录下,执行解压操作,通过命令
tar –xvf redis-3.2.9-tar.gz,解压后如下信息
然后进入到redis-3.2.9目录里,执行命令:make && make install,也可以安装到指定目录,这里如果不指定PREFIX,则默认安装在/usr/local/bin下,保持默认就好。如果没有root权限是无法安装的。
我们获取root权限后再进行安装,安装成功的信息如下:
也可以到/usr/local/bin目录下查看。信息如下:
如果我们安装单机模式,不存在集群功能的话,我们现在就可以将redis运行起来,直接在刚刚解压的Redis目录下运行./redis-server命令就可以将单机的Redis运行起来。
$ cd /home/cmfchina/redis/redis-3.2.9
$ redis-server redis.conf //所有相关配置信息都在conf里面,如果不设置,默认端口号为:6379
3. 配置Redis集群
由于需要集群,我们需要建立多个节点,一般是建立6个节点,也就对应6个端口,端口号我们可以自行定义,保证唯一性即可。我们可以通过xftp5可视化工具创建3个节点目录。可以建立在root目录下,也可以建立在/etc目录下。也可以通过命令批量创建。可视化工具创建样例如下:
命令创建如下:
上述两个图片是建立6个目录,我们不理睬,我们自己建立三个,建完之后,需要配置各自的redis.conf文件,我们复制一份之前安装生成的redis.conf文件到我现在保留7001-7003这三个目录,复制完文件后,例如我复制一份到7001目录下,现在需要修改这个配置文件,主要修改以下内容:
port 7001 //配置集群的端口,分别是7001、7002、7003
bind 本机的IP //这里的默认配置是127.0.0.1改为内网ip。
daemonsize yes //允许redis在后台运行
pidfile /var/run/redis_7001.pid //改成和端口一致
cluster-enabled yes // 开启集群 把注释去掉
cluster-config-file node_7001.conf //集群的配置,和端口一致
cluster-node-timeout 15000 // 请求超时,默认为15秒
appendonly yes // aof日志开启,有需要就开启,每一次写操作都会记录一条日志。
配置完这个文件后,依次复制然后去修改配置文件。修改完这些配置文件以后,我们可以试下是否可以启动服务。依次启动三个节点。
./redis-server /etc/redis/redis7001/redis.conf
./redis-server /etc/redis/redis7002/redis.conf
./redis-server /etc/redis/redis7003/redis.conf
通过命令查看启动情况:
3.1 另一台机器执行同样的操作
另一台机器只安装redis,分配三个端口:7004、7005、7006,看然后修改相应的配置文件。
3.2 安装Ruby环境
3.2.1 下载、安装ruby
通过命令先创建目录,提前下e载好ruby,将ruby拷贝到新建目录下,新建目录的命令如下:mkdir /usr/local/ruby,把包放在该目录下,解压该包,命令如下:tar –vxf ruby-2.5.0.tar.gz
cd ruby-2.5.0/
./configure
make && make install
验证ruby安装是否成功,查看版本执行命令:
ruby –v
3.2.2 下载安装rubygems
通过命令创建rubygems目录,cd/usr/local,执行mkdir rubygems,把压缩包放在该目录下,解压该包。
tar –vzxf rubygems-2.7.4.tgz(下载不同的压缩包,执行命令的-..f有所不同,按照实际情况执行)
cd rubygems-2.7.4/
ruby setup.rb(执行命令)
执行完该命令后,没有显示报错,那最好了,如果有报错一般是如下:
解决办法:缺少了zlib包,需要下载并安装zlib。
3.2.3 下载安装zlib
cd /usr/local
mkdir zlib
tar –vxf zlib-1.2.11.tar.gz
./configure –-prefix=/usr/local/zlib
make
make install
3.2.4 编译ruby的zlib
cd /usr/local/ruby-2.5.0/ext/zlib/
ruby extconf.rb –with-zlib-include=/usr/local/zlib/include/ --with-zlib-lib=/usr/local/zlib/lib
make
如果还有报错:
解决办法:执行完extconf.rb之后又会生成一个Makefile vim Makefile
把$(top_srcdir) 换成 ../../.
然后再make
make.make install
错误都解决之后,回到安装rubygems的步骤。
进入rubygems的安装目录,执行ruby setup.rb
cd rubygems-2.7.4/
ruby setup.rb(执行命令)
安装成功:
3.2.5 安装ruby-redis插件
下载redis-3.2.2.gem,刚刚安装的rubygems就是为了安装这个插件,把文件放到/usr/local/redis目录下,执行安装命令:
gem install redis-3.2.2.gem
执行完如果不报错,那万事大吉了,如果有报错,那就再解决报错。
解决办法:缺少OpenSSL,下载安装。
这个问题和zlib问题类似。
cd /usr/local
mkdir openssl
tar -xvf openssl-1.0.2n.tar.gz
./config -fPIC --prefix=/usr/local/openssl enable-shared
./config -t
make && make install
编译ruby中的openssl
然后回到安装redis-3.2.2.gem,在redis目录下安装。
gem install redis-3.2.2.gem
安装成功。
3.2.6 启动集群
cd /usr/local/redis/redis-3.2.9/src
./redis-trib.rb create –replicas 1 192.168.0.1:7001 192.168.0.1:7002 192.168.0.1:7003 192.168.0.2:7004 192.168.0.2:7005 192.168.0.2:7006
图不重要,重要的是启动命令。
上面标红的选择yes。
然后测试一下集群,随便连接一个节点
./redis-cli –h 192.1686.0.2 –p 7005 –c
连接成功之后:
存值
set myKey “0001”
然后会显示OK
然后再连接另外一个节点取值,
./redis-cli –h 192.1686.0.2 –p 7006 –c
get myKey
会显示“0001”
到此一个集群就创建成功了。
4. 集群后节点操作
通过命令进入集群,./redis-cli –h 192.1686.0.2 –p 7005 –c
,进入集群后输入ping,如果响应了pong,表示集群连接成功。连接进集群之后可以查看当前集群的信息和节点的信息.CLUSTER INFO 列出当前节点的信息
CLUSTER NODES 列出当前集群中的节点信息
前面一段很长的字符串就是节点的id。从这个命令可以知道哪些节点还活着,哪些节点已经挂了。端口后面带着fail的都是挂掉的节点。
退出集群连接才能关闭某一个节点:
./redis-cli –c –h 192.168.0.2 –p 7000 shutdown
这条命令的意思是关闭2机器上端口为7000的redis节点。.关闭之后可以连接集群去执行 CLUSTER NODES ,这个节点的状态已经是fail。
节点加入、移出集群
添加一个节点之前务必保证该节点已经启动了,如果该节点之前在创建集群时已经在集群里面了,关闭该节点然后再重新启动,该节点会自动加入集群。
./redis-server ../redis_cluster/7000/redis.conf
然后连接进集群,如果该节点之前不在集群中,连接集群输入cluster meet 命令就可以指定某个节点加入集群。
CLUSTER MEET 192.168.0.1:7001
CLUSTER forget fd72b78b1eaa430ca309bc5226d90fe67199a576
这个一长段字符串是节点的id,forget之后可以再去看节点的信息
forget之后,如果一分钟不进行任何操作,该节点会自动加入集群。
Redis集群常见问题汇总
问题1:
执行命令:./redis-trib.rb
/usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- redis (LoadError)from /usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'from ./redis-trib.rb:25:in `'
解决方法:下载安装rubygem 进入解压包中.configure make && make install
问题2:
在Redis 4 之后的版本,出于安全考虑,默认只处理本机的请求,如果需要处理除了其他服务器的请求,需要修改上述配置文件的第二个地方。但是在Redis 4之前的版本,例如redis-3.0.0 则不需要手动更改,默认处理所有请求。
如果出现DENIED Redis is running in protected mode because protected mode is enabled这个错误,详细错误如下图,
问题描述所说:只能用本地连接,不能用网络IP,因为处于保护模式。所以只需要更改redis.conf 文件 protected-mode no