18. 【实战】重新搭建一套读写分离+高可用+多master的redis cluster集群

本文详述了如何重新构建一套具备读写分离、高可用及多master特性的Redis Cluster。首先停止旧实例,然后配置重要参数如集群状态文件和节点存活时间。接着,在3台机器上启动6个Redis实例,确保每个master至少有一个slave。通过特定脚本启动实例,并创建集群,确保master与slave不在同一台机器。最后,检查集群状态,实现读写分离、高可用性和多master的集群架构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis cluster: 自动实现master+slave复制和读写分离,master+slave高可用和主备切换,支持多个master的hash slot,支持数据分布式存储

下面搭建过程基于master + 多slave,实际上生产环境中redis cluster读写都是放在master上的,如果实现master + slave读写分离需要配合java客户端 jedis进一步封装,操作难度大,且没有必要,后面会在详细讲的。

搭建redis-cluster

停止之前redis进程

停止之前所有的测试实例,包括redis主从和哨兵集群
在这里插入图片描述

重要配置

  1. cluster-enabled <yes/no>
  2. cluster-config-file <filename>:这是指定一个文件,供cluster模式下的redis实例将集群状态保存在那里,包括集群中其他机器的信息,比如节点的上线和下限,故障转移,不是我们去维护的,给它指定一个文件,让redis自己去维护的
  3. cluster-node-timeout <milliseconds>:节点存活超时时长,超过一定时长,认为节点宕机,master宕机的话就会触发主备切换,slave宕机就不会提供服务

三台机器启动6个redis实例

  1. eshop-cache03上部署redis日志和持久化目录,因为之前只是用到了哨兵,并没有启动。
mkdir -p /etc/redis		# 存放redis的配置文件
mkdir -p /var/redis/6379	# 存放redis的持久化文件
  1. redis cluster集群要求至少3个master,去组成一个高可用,健壮的分布式的集群,每个master都建议至少给一个slave,3个master,3个slave,最少的要求

正式环境下,建议都是说在6台机器上去搭建,至少3台机器,保证,每个master都跟自己的slave不在同一台机器上,如果是6台自然更好,一个master+一个slave就死了

  1. 3台机器去搭建6个redis实例的redis cluster,创建需要目录
mkdir -p /etc/redis-cluster
mkdir -p /var/log/redis
mkdir -p /var/redis/7001(相应的机器上7002,7003....)
  1. 将下面配置文件,放在相应机器上目录/etc/redis下,分别为:
  • 192.168.0.106 7001.conf,7002.conf
  • 192.168.0.107 7003.conf,7004.conf
  • 192.168.0.108 7005.conf,7006.conf
port 7001
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7001.conf
cluster-node-timeout 15000
daemonize	yes							
pidfile		/var/run/redis_7001.pid 						
dir 		/var/redis/7001		
logfile 	/var/log/redis/7001.log
bind 192.168.0.106		
appendonly yes

至少要用3个master节点启动,每个master加一个slave节点,先选择6个节点,启动6个实例

生产环境启动脚本

  1. 三台机器分别在目录/etc/init.d下,分别对应放下自己端口的启动脚本,分别为: redis_7001, redis_7002, redis_7003, redis_7004, redis_7005, redis_7006

每个启动脚本内,都修改对应的端口号

在这里插入图片描述

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

# chkconfig:   2345 90 10
# description:  Redis is a persistent key-value 

REDISPORT=7003
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

分别在3台机器上,启动6个redis实例

  1. 之前主从的时候,配置了slave noe,所以将每个配置文件中的slaveof给删除,如果有就删除掉。
    在这里插入图片描述
  2. 一次执行3台机器上的6个节点。并查看/var/log/redis/700X.log日志。
cd /etc/init.d
./redis_7001 start
cd /var/log/redis/
tail -fn 200 7001.log

在这里插入图片描述

创建集群

  1. 安装ruby
yum install -y ruby
yum install -y rubygems
gem install redis
cp /usr/local/redis-3.2.8/src/redis-trib.rb /usr/local/bin
  1. 出现类似 redis requires Ruby version >= 2.3.0 问题参考:https://www.cnblogs.com/shamo89/p/9862321.html
    在这里插入图片描述
  2. 创建启动集群命令
redis-trib.rb create --replicas 1 192.168.0.106:7001 192.168.0.106:7002 192.168.0.107:7003 192.168.0.107:7004 192.168.0.108:7005 192.168.0.108:7006

--replicas 1: 每个master有几个slave,所以上面命令每个master1个slave,一共6台机器,3个master,3个slave,尽量让master和slave不在一台机器上。

yes

  1. 检查redis cluster状态: redis-trib.rb check 192.168.0.106:7001

总结

读写分离+高可用+多master

  1. 读写分离:每个master都有一个slave
  2. 高可用:master宕机,slave自动被切换过去
  3. 多master:横向扩容支持更大数据量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值