redis 5.x 三主三从集群模式部署详细文档

Posted qishiai819

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis 5.x 三主三从集群模式部署详细文档相关的知识,希望对你有一定的参考价值。

工作部署中客户生产环境为了考虑redis服务的高可用,决定使用redis的集群模式,此文档以redis-5.0.5为例,简单介绍redis的集群模式部署和维护。

方案采用的静态编译redis和脚本维护启停及保活,因为是新方案的文档,所以细节部分写的比较多,适合新手练手

redis集群的原理

一、部署前的编译及打包准备

1、安装包准备

下载redis,下载地址:https://download.redis.io/releases/

选择5.0.5版本下载压缩包,其他5.x版本也可以,最新尝试过5.0.13,最新的6.x没有在生产尝试,理论上也没有问题。

2、编译可执行文件

Notice:考虑到客户服务器环境不允许连接外网,redis的安装需要gcc依赖,因此,需要提前找一台机器安装好redis服务,完成后从redis-5.0.5/src目录下拷贝出编译好的二进制文件,并将二进制文件和配置文件提前编辑好后打包,传到客户服务器使用

解压reidis-5.0.5.tar.gz

tar -zxvf redis-5.0.5.tar.gz

编译redis

进入reids解压目录,执行make安装

cd redis-5.0.5/
make

执行完毕后有如下提示:

执行make test检查安装是否完成: 

如出现以上提示,则需安装8.5及以上版本的tcl库,可以在网上找下tcl的安装包或者yum安装(这里写写yum的方式:yum install tcl)

上述问题解决后回到redis-5.0.5目录,重新执行make test,等待检查结束,出现如下提示表明安装完成

3.获取编译后的二进制文件

安装完成后,在redis-5.0.5/src/目录下会生成编译好的二进制文件,将需要的二进制文件拷贝到对应自建的目录下

需要拷贝的二进制文件包括:

redis-server

redis-cli

redis-sentinel

redis-trib.rb

redis-check-rdb

redis-check-aof

redis-benchmark

创建打包目录

mkdir -p /opt/redis-cluster/redis-7000/bin
mkdir -p /opt/redis-cluster/redis-7000/data
mkdir -p /opt/redis-cluster/redis-7000/log
mkdir -p /opt/redis-cluster/redis-7000/conf

拷贝文件

cp /opt/redis-5.0.5/src/redis-server /opt/redis-cluster/redis-7000/bin/
cp /opt/redis-5.0.5/src/redis-cli /opt/redis-cluster/redis-7000/bin/
cp /opt/redis-5.0.5/src/redis-sentinel /opt/redis-cluster/redis-7000/bin/
cp /opt/redis-5.0.5/src/redis-trib.rb /opt/redis-cluster/redis-7000/bin/
cp /opt/redis-5.0.5/src/redis-check-rdb /opt/redis-cluster/redis-7000/bin/
cp /opt/redis-5.0.5/src/redis-check-aof /opt/redis-cluster/redis-7000/bin/
cp /opt/redis-5.0.5/src/redis-benchmark /opt/redis-cluster/redis-7000/bin/

如使用其他端口,可在/opt/redis-cluster/目录下创建相应的节点,如redis-16380,并将redis-7000/bin下的二进制文件拷贝到redis-16380/bin下。

 4、创建配置文件

创建配置文件

touch /opt/redis-cluster/redis-7000/conf/redis-7000.conf

redis-7000.conf配置文件的内容为

############### 网络 ###############
# 端口
port 7000
# 非保护模式,如果值为yes,则必须是 bind配置指定的ip的机器连接或者使用密码连接
protected-mode no 

############### 通用 ###############
# 后台运行
daemonize yes 
# 记录redis进程pid
pidfile  /var/run/redis_7000.pid
# redis日志级别
#debug:会打印出很多信息,适用于开发和测试阶段 
#verbose(冗长的):包含很多不太有用的信息,但比debug要清爽一些  
#notice:适用于生产模式 
#warning : 警告信息
loglevel notice
# 日志存储路径
logfile "/opt/redis-cluster/redis-7000/log/redis.log"

############### 集群 ###############
# 启用集群模式
cluster-enabled yes 
cluster-config-file nodes_7000.conf
# 集群节点如果在该超时时间(毫秒)内不可达,则认为节点处于故障状态
cluster-node-timeout 15000

############### 持久化 ###############
# AOF, RDB持久化文件目录
dir /opt/redis-cluster/redis-7000/data

# 开启AOF持久化
appendonly yes
# 正在导出rdb快照的过程中,是否停止同步aof
no-appendfsync-on-rewrite  yes
#aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-percentage 100 
#aof文件,至少超过64M时,才重写
auto-aof-rewrite-min-size 64mb 
# AOF文件名
appendfilename "append_7000.aof"

#RDB持久化
#如果300秒内有1000次写入,则产生快照
save 300 1000
#后台备份进程出错时,主进程是否停止写入
stop-writes-on-bgsave-error yes  
#导出的rdb文件是否压缩
rdbcompression yes   
#导入rbd恢复数据时,是否验证rdb的完整性
rdbchecksum  yes 
#导出来的rdb文件名
dbfilename dump-7000.rdb

############### 密码 ###############
masterauth 123456
requirepass 123456

############### 命令禁用 ###############
rename-command KEYS     ""
rename-command FLUSHALL ""
rename-command FLUSHDB  ""
rename-command CONFIG   ""

其中 port 、 pidfile、cluster-config-file、dir、appendfilename、 dbfilename、masterauth、requirepass配置需要随着节点的不同而调整

5.准备启动脚本

在redis-cluster目录下创建脚本redischeck.sh

touch /opt/redis-cluster/redischeck.sh
chmod 747 /opt/redis-cluster/redischeck.sh

redischeck.sh中配置如下:

#!/bin/bash

if [ "Xpush" != "X$(whoami)" ]; then
  echo "invalid user! please run with user [push]."
  exit 1
fi

n=`ps ax | grep redis | grep 7000 | grep -v grep  | wc -l`
if [ $n -lt "1" ]
then
    /opt/redis-cluster/redis-7000/bin/redis-server  /opt/redis/redis-7000/conf/redis-7000.conf  &
fi

脚本只是简单的限定push用户启动以及检查进程是否存在,不存在则执行配置启动

6.打包安装包

执行如下命令将redis-cluster打包为压缩包

cd /opt/
tar -zcvf redis-cluster.tar.gz redis-cluster

至此,预打包流程基本完成

二、Redis分发及集群搭建

1.安装包上传

将打包的redis-cluster.tar.gz压缩包打包并上传到对应的6台主机的/opt目录,可以用过ftp、U盘、内网传输等任意方式

2.启动redis进程

分别启动6台机器上的redis cluster

cd /opt/redis-cluster
bash redischeck.sh

查看reids进程是否起来

ps -ef |grep redis

3.创建集群

6台机器都启动后找其中一台机器配置集群

执行如下命令(一下ip为示例,实际使用需替换ip和实际端口)

/opt/redis-cluster/redis-7000/bin/redis-cli --cluster create 192.168.56.1:7000 192.168.56.2:7000 192.168.56.3:7000 192.168.56.4:7000 192.168.56.5:7000 192.168.56.6:7000 --cluster-replicas 1

之后后会打印如下信息:(以下为示例)

注意:需要检查下各节点的id是否有重复的情况,如有重复,需要停止redis进程(可以使用redis-server -p 7000 shutdown,也可以直接kill),删掉nodes-7000.conf的节点信息(此例在/opt/redis-cluster/redis-7000/data/目录下),然后重启redis,再重新create创建集群

检查节点没有问题输入yes,即可完成集群搭建

4.配置保活

redis在push用户下运行,需手动添加保活策略

## crontab保活,root下执行的,push用户下可以直接crontab -e打开文件操作添加

cat /var/spool/cron/push | grep /opt/redis/redischeck.sh || echo -e  '*/1 * * * * bash /opt/redis/redischeck.sh' >> /var/spool/cron/push

5.查看集群的状态

执行以下命令进入集群

/opt/redis-cluster/redis-7000/bin/redis-cli -p 7000 -c

-c为集群模式打开,进入后如过需要密码需要输入

auth 123456

然后输入cluster nodes查看各节点信息:

10.230.64.239:7000> cluster nodes

53090760c9240397d834c5298fe468bbeec8536a 10.230.64.242:7000@17000 master - 0 1592629740599 3 connected

78ddbf604c87af277eabdae69b84d470328de4fc 10.230.64.240:7000@17000 master - 0 1592629738000 1 connected

4d03a8b4df35ae95e0c4bda730878f8126e0cac8 10.230.64.244:7000@17000 master - 0 1592629741602 5 connected

c8cb132a048c6516b7ec3d20b3c8e1ba20fce7d1 10.230.64.239:7000@17000 myself,master - 0 1592629739000 0 connected

6ca8ee99b59b8073c5373e99d5a850645b1e0a87 10.230.64.241:7000@17000 master - 0 1592629739000 2 connected

97ffede81133762d8f9bcddffd3bd378805dd810 10.230.64.243:7000@17000 master - 0 1592629740000 4 connected

cluster info查看集群状态

127.0.0.1:7000> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:15
cluster_my_epoch:15
cluster_stats_messages_ping_sent:1375
cluster_stats_messages_pong_sent:1398
cluster_stats_messages_sent:2773
cluster_stats_messages_ping_received:1398
cluster_stats_messages_pong_received:1375
cluster_stats_messages_received:2773

cluster_state显示ok标识集群状态健康

参考文档:

redis cluster conf文件配置(包含持久化存储)

https://segmentfault.com/a/1190000020762868

以上是关于redis 5.x 三主三从集群模式部署详细文档的主要内容,如果未能解决你的问题,请参考以下文章

redis 5.x 三主三从集群模式部署详细文档

redis 5.x 三主三从集群模式部署详细文档

redis集群三主三从模式快速部署

Redis集群部署(三主三从)

Redis集群部署(三主三从)

Redis集群部署(三主三从)