# Redis部署踩坑事记

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 解决方案
> 标签: Linux, Docker
> 原文链接: http://117.50.162.249:3000/yun/articles/781

---

# Redis部署踩坑事记

> 来源: https://www.ucloud.cn/yun/130078.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:20

Redis部署踩坑事记

项目实施需要在Centos7.5上部署Redis集群(不是docker版)，系统最小化安装后，发现许多Redis依赖环境都不符合要求，特此记录踩坑过程。

## **1.****正常的****Redis****集群部署流程**

环境要求(每台需要gcc环境)：

yum install -y gcc

环境要求(集群初始化节点即可)ruby2.2以上,gemredis模块

yum install -y zlibzlib-devel openssl openssl-devel

然后每台机器分别解压源码包进行编译安装

tar -zxvfredis-4.0.14.tar.gz -C /data/

cd/data/redis-4.0.14/

make && makeinstall

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130078/images/130078_000.png)

最后在集群初始化节点(通常为1节点)创建集群：

创建新集群命令：

进入bin目录create集群

选项--replicas1:意味着我们希望每个创建的主服务器都有一个从节点

./redis-trib.rbcreate --replicas 1 172.16.10.15:7000 172.16.10.15:7001172.16.10.16:7000 172.16.10.16:7001 172.16.10.17:7000172.16.10.17:7001

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130078/images/130078_001.png)

## **2.****集群踩坑详解**

新建集群时，在所有节点单实例部署完成后，在1节点安装集群依赖的gem环境报错遇到以下两种情况

报错情况1：

/usr/local/ruby/bin/geminstall redis-4.1.0.gem

ERROR:Loading command: install (LoadError)

cannotload such file -- zlib

ERROR:While executing gem ... (NoMethodError)

undefinedmethod `invoke\_with\_build\_args for nil:NilClas

该报错解决办法：

yum -y installzlib-devel

进入ruby源码文件夹，安装ruby自身提供的zlib包：

cdruby-2.4.4/ext/zlib/

/usr/local/ruby/bin/rubyextconf.rb

make &&makeinstall

编译报错

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

#zlib.o:$(top\_srcdir)/include/ruby.h

zlib.o:../../include/ruby.h

报错情况2：

/usr/local/ruby/bin/geminstall redis-4.1.0.gem

ERROR:While executing gem ... (Gem::Exception)

Unableto require openssl, install OpenSSL and rebuild ruby (preferred) oruse non-HTTPS sources

解决办法：

进入ruby源码文件夹，安装ruby自身提供的openssl包：

cdruby-2.4.4/ext/openssl

# 找到各个组件的路径

/usr/local/ruby/bin/rubyextconf.rb --with-openssl-include=/usr/include/openssl/--with-openssl-lib=/usr/lib64/openssl/

make && makeinstal

编译报错

make:\*\*\* No rule to make target `/thread\_native.h, needed by `ossl.o.Stop.

打开Makefile文件：增加top\_srcdir= /opt/software/ruby-2.4.4路径

topdir =/usr/local/ruby/include/ruby-2.4.0

top\_srcdir =/opt/software/ruby-2.4.4

hdrdir = $(topdir)

arch\_hdrdir =/usr/local/ruby/include/ruby-2.4.0/x86\_64-linux

以上两种在集群初始化时安装依赖环境ruby，gem等遇到过,当然这些环境和redis版本也有着重要对应关系(上述部署的是redis4.1版本)，以上记录仅供参考，特此贴下部署文档如下,如有不当,请指正。

## **3.Redis****集群部署文档**

一.redis集群配置

环境要求(每台)：

yum install -y gcc

解压安装包,到解压后的目录进行安装

tar -zxvf redis-4.0.14.tar.gz -C /data/

cd /data/redis-4.0.14/

make && make install

提示以下信息，表示安装成功

Hint: Its a good idea to run make test ;)

make[1]: Leaving directory `/data/redis-4.0.14/src

cd src && make install

make[1]: Entering directory `/data/redis-4.0.14/src

    CC Makefile.dep

make[1]: Leaving directory `/data/redis-4.0.14/src

make[1]: Entering directory `/data/redis-4.0.14/src

Hint: Its a good idea to run make test ;)

    INSTALL install

    INSTALL install

    INSTALL install

    INSTALL install

    INSTALL install

make[1]: Leaving directory `/data/redis-4.0.14/src

安装成功后，再解压的目录创建一个以端口号的目录

mkdir 7000

mkdir 7000{data,log}

cd 7000

cat >>redis.conf<<EOF

#redis.config

port 7000

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

appendonly yes

daemonize yes

bind 172.16.10.16

pidfile  /data/redis-4.0.14/7000/redis\_7000.pid

dir  /data/redis-4.0.14/7000/data

logfile /data/redis-4.0.14/7000/log/redis\_7000.log

EOF

配置好目录和配置文件后 复制为其他端口号的目录

cd /data/redis-4.0.14/

cp -r 7000 7001

修改端口号为7001,直接替换(记得修改bind的IP为服务器本机IP)

vim 7001/redis.conf

:%s/7000/7001/g

然后注册为系统服务方便启动维护

cd /data/redis-4.0.14/utils/

./install\_server.sh

################################################################################################

[root@domp03 utils]# ./install\_server.sh 

Welcome to the redis service installer

This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 7000

Please select the redis config file name [/etc/redis/7000.conf] /data/redis-4.0.14/7000/redis.conf

Please select the redis log file name [/var/log/redis\_7000.log] /data/redis-4.0.14/7000/log/redis\_7000.log

Please select the data directory for this instance [/var/lib/redis/7000] /data/redis-4.0.14/7000/data

Please select the redis executable path [/usr/local/bin/redis-server] 

Selected config:

Port           : 7000

Config file    : /data/redis-4.0.14/7000/redis.conf

Log file       : /data/redis-4.0.14/7000/log/redis\_7000.log

Data dir       : /data/redis-4.0.14/7000/data

Executable     : /usr/local/bin/redis-server

Cli Executable : /usr/local/bin/redis-cli

Is this ok? Then press ENTER to go on or Ctrl-C to abort.(确定配置回车即可)

Copied /tmp/7000.conf => /etc/init.d/redis\_7000

Installing service...

Successfully added to chkconfig!

Successfully added to runlevels 345!

Starting Redis server...

Installation successful

#####################################################################################

检测单实例安装情况

[root@domp03 7001]# systemctl restart redis\_7000

[root@domp03 7001]# systemctl restart redis\_7001

[root@domp03 7001]# ps -ef|grep redis

root      5081     1  0 16:35 ?        00:00:00 /usr/local/bin/redis-server 172.16.10.17:7000 [cluster]

root      5093     1  0 16:35 ?        00:00:00 /usr/local/bin/redis-server 172.16.10.17:7001 [cluster]

root      5098  1484  0 16:35 pts/1    00:00:00 grep --color=auto redis

集群配置(一台上做即可)

环境要求ruby2.2以上,gem redis模块

yum install -y zlib zlib-devel openssl openssl-devel

1.先解压ruby.gz包

tar -zxvf ruby-2.5.7.tar.gz -C /usr/local/

cd /usr/local/ruby-2.5.7/

./configure && make && make install 

检测安装后的版本

/usr/local/ruby-2.5.7/ruby -v

/usr/local/ruby-2.5.7/gem -v 

2.集成zlib库到ruby环境

cd /usr/local/ruby-2.5.7/ext/zlib

/usr/local/ruby-2.5.7/ruby extconf.rb 

修改Makefile文件中的zlib.o

zlib.o: $(top\_srcdir)/include/ruby.h,将$(top\_srcdir)修改为../..如下:

zlib.o: ../../include/ruby.h

make && make install 

3.集成openssl库到ruby环境

cd /usr/local/ruby-2.5.7/ext/openssl

/usr/local/ruby-2.5.7/ruby extconf.rb

修改Makefile文件，修改或新增

top\_srcdir=../..

make && make install 

4.安装gem redis模块

gem install /soft/redis-4.0.1.gem

5.配置redis集群

/data/redis-4.0.14/src

创建新集群命令：命令create，选项--replicas 1意味着我们希望每个创建的主服务器都有一个从服

./redis-trib.rb create --replicas 1 172.16.10.15:7000 172.16.10.15:7001 172.16.10.16:7000 172.16.10.16:7001 172.16.10.17:7000 172.16.10.17:7001

###############################################################

>>> Performing Cluster Check (using node 172.16.10.15:7000)

M: 8986394ba0b1dbe1111c86456a64bd4772b8b49c 172.16.10.15:7000

   slots:0-5460 (5461 slots) master

   1 additional replica(s)

M: 3c43b0063c47b6946a2908a2f7104b76763b39c9 172.16.10.17:7000

   slots:10923-16383 (5461 slots) master

   1 additional replica(s)

M: a60599db59814392385a1d047bd4f0b529eb1b31 172.16.10.16:7000

   slots:5461-10922 (5462 slots) master

   1 additional replica(s)

S: b7899e092d0affa3e0ca1d4a367eea3af98f986b 172.16.10.17:7001

   slots: (0 slots) slave

   replicates a60599db59814392385a1d047bd4f0b529eb1b31

S: f8f577ceca57142e83e1da6886eda590b8fb1e86 172.16.10.15:7001

   slots: (0 slots) slave

   replicates 3c43b0063c47b6946a2908a2f7104b76763b39c9

S: 8156d4655e6598f651af923e0cb0fd2bfcb53b82 172.16.10.16:7001

   slots: (0 slots) slave

   replicates 8986394ba0b1dbe1111c86456a64bd4772b8b49c

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

#################################################################

出现这个表示配置正常

集群节点状态查看

redis-cli -h 172.16.10.15 -p 7000 cluster nodes