Redis部署踩坑事记

AI 摘要 / TL;DR

Redis部署踩坑事记 来源: https://www.ucloud.cn/yun/130078.html 作者: IT那活儿 发布日期: 发布于2023 01 11 13:20 Redis部署踩坑事记 项目实施需要在Centos7.5上部署Redis集群 不是docker版 ,系统最小化安装后,发现许多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

最后在集群初始化节点(通常为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

**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