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文件配置(包含持久化存储)
以上是关于redis 5.x 三主三从集群模式部署详细文档的主要内容,如果未能解决你的问题,请参考以下文章