Redis cluster三主三从集群快速部署(十一)

简介: 部署三主三从redis cluster集群架构图

部署三主三从redis cluster集群

架构图

环境准备image.png

1.redis运维脚本

使用这个脚本管理redis

#!/bin/bash
#redis控制脚本
redis_port=$2
redis_name="redis_${redis_port}"
redis_home=/data/redis_cluster/${redis_name}
redis_conf=${redis_home}/conf/${redis_name}.conf
redis_host=`ifconfig ens33 | awk 'NR==2{print $2}'`
redis_pass=$3
red="\e[031m"
green="\e[032m"
yellow="\e[033m"
black="\e[0m"
Usage(){
  echo "usage: sh $0 {start|stop|restart|login|ps|logs|-h} PORT"
}
Start(){
        redis_cz=`netstat -lnpt | grep redis | grep "${redis_port}" | wc -l`
        if [ $redis_cz -eq 0 ];then
                redis-server ${redis_conf}
                if [ -z $state ];then
                        echo -e "${green}redis ${redis_port}实例启动成功!${black}"
                else
                        echo -e "${green}redis ${redis_port}实例重启成功!${black}"
                fi
                netstat -lnpt | grep ${redis_port}
        else
                if [ -z $state ];then
                        echo -e "${yellow}redis "${redis_port}"实例已经是启动状态!${black}"
                        netstat -lnpt | grep ${redis_port}
                fi
        fi
}
Stop(){
        redis_cz=`netstat -lnpt | grep redis | grep "${redis_port}" | wc -l`
        if [ $redis_cz -gt 0 ];then
                redis-cli -h $redis_host -p $redis_port shutdown
                if [ -z $state ];then
                        echo -e "${green}redis ${redis_port}实例关闭成功!"
                fi
        else
                if [ -z $state ];then
                        echo -e "${red}redis "${redis_port}"实例没有启动!${black}"
                fi
        fi
}
Restart(){
  state=restart
  Stop
  Start
}
Login(){
        redis_cz=`netstat -lnpt | grep redis | grep "${redis_port}" | wc -l`
        if [ $redis_cz -gt 0 ];then
    redis-cli -h $redis_host -p $redis_port 
  else
    echo -e "${red}redis ${redis_port}实例没有启动!${black}"
    echo -en  "${yellow}是否要启动reis? [y/n]${black}"
    read action
    case $action in 
    y|Y)
      Start
      Login
      ;;
    n|N)
      exit 1
      ;;
    esac
  fi
}
Ps(){
  ps aux | grep redis
}
Logs(){
  tail -f ${redis_home}/logs/${redis_name}.log
}
Help(){
  Usage
  echo "+-------------------------------------------------------------------------------+"  
  echo "| start   启动redis             |"
  echo "| stop    关闭redis             |"
  echo "| restart 重启redis             |"
  echo "| login   登陆redis             |"
  echo "| ps    查看redis的进程信息,不需要加端口号        |"
  echo "| logs    查看redis日志持续输出           |"
  echo "| 除ps命令外,所有命令后面都需要加端口号            |"  
  echo "+-------------------------------------------------------------------------------+"  
}
if [ $# -ne 2 ];then
  if [ "$1" != "ps" ] &&  [ "$1" != "-h" ];then
    Usage
    exit 1
  fi
fi
case $1 in 
start)
  Start
  ;;
stop)
  Stop
  ;;
restart)
  Restart
  ;;
login)
  Login
  ;;
ps)
  Ps
  ;;
logs)
  Logs
  ;;
-h)
  Help
  ;;
*)
  Help
  ;;
esac

2.部署redis节点

三个主机都执行,共部署两个redis节点,一个6380一个6381端口

1.创建部署路径
mkdir -p /data/redis_cluster/redis_{6380,6381}/{conf,data,logs,pid}
2.准备配置文件
cat > /data/redis_cluster/redis_6380/conf/redis_6380.conf <<EOF
bind $(ifconfig | awk 'NR==2{print $2}')
port 6380  
daemonize yes
logfile /data/redis_cluster/redis_6380/logs/redis_6380.log
pidfile /data/redis_cluster/redis_6380/pid/redis_6380.log
dbfilename "redis_6380.rdb"
dir /data/redis_cluster/redis_6380/data
cluster-enabled yes
cluster-config-file node_6380.conf
cluster-node-timeout 15000
save 60 10000
save 300 10
save 900 1
EOF
cat > /data/redis_cluster/redis_6381/conf/redis_6381.conf <<EOF
bind $(ifconfig | awk 'NR==2{print $2}')
port 6381  
daemonize yes
logfile /data/redis_cluster/redis_6381/logs/redis_6381.log
pidfile /data/redis_cluster/redis_6381/pid/redis_6381.log
dbfilename "redis_6381.rdb"
dir /data/redis_cluster/redis_6381/data
cluster-enabled yes
cluster-config-file node_6381.conf
cluster-node-timeout 15000
save 60 10000
save 300 10
save 900 1
EOF
3.启动
[root@redis-1 ~]# ./redis_shell.sh start 6380
redis 6380实例启动成功!
tcp        0      0 192.168.81.210:6380     0.0.0.0:*               LISTEN      127999/redis-server 
tcp        0      0 192.168.81.210:16380    0.0.0.0:*               LISTEN      127999/redis-server 
[root@redis-1 ~]# ./redis_shell.sh start 6381
redis 6381实例启动成功!
tcp        0      0 192.168.81.210:6381     0.0.0.0:*               LISTEN      128014/redis-server 
tcp        0      0 192.168.81.210:16381    0.0.0.0:*               LISTEN      128014/redis-server 

3.配置集群节点之间相互发现

互相发现只需要在一个节点上操作即可

[root@redis-2 ~]# redis-cli -h 192.168.81.210 -p 6380
192.168.81.210:6380> CLUSTER MEET 192.168.81.210 6381
OK
192.168.81.210:6380> CLUSTER MEET 192.168.81.220 6380
OK
192.168.81.210:6380> CLUSTER MEET 192.168.81.220 6381
OK
192.168.81.210:6380> CLUSTER MEET 192.168.81.230 6380
OK
192.168.81.210:6380> CLUSTER MEET 192.168.81.230 6381
OK
192.168.81.210:6380> CLUSTER NODES
34e698b929948c3c61c4ba40c129161b736ee5cc 192.168.81.230:6381 master - 0 1612334628247 5 connected
4827ff5cbc7122a4459b1d91bd15a89e0661a91b 192.168.81.220:6381 master - 0 1612334624212 2 connected
8d918c708db4a9fbe6b08d9f707d501eb328885e 192.168.81.230:6380 master - 0 1612334625222 0 connected
4e99bc582fede8e359fb25d163e7267f616409ff 192.168.81.210:6381 master - 0 1612334626229 1 connected
5f19db5c04ccaea18270819f5af37cacbf41a800 192.168.81.210:6380 myself,master - 0 0 3 connected
454fe9862588f97f969c181b3f8c5e24f6135265 192.168.81.220:6380 master - 0 1612334627241 4 connected

6个redis节点已经全部发现

4.配置cluster分配槽位

在redis-1上操作即可

1.分配槽位
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster addslots {0..5461}
OK
[root@redis-1 ~]# redis-cli -h 192.168.81.220 -p 6380 cluster addslots {5462..10922}
OK
[root@redis-1 ~]# redis-cli -h 192.168.81.230 -p 6380 cluster addslots {10923..16383}
OK
2.查看集群状态
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 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:1
cluster_current_epoch:5
cluster_my_epoch:3
cluster_stats_messages_sent:488
cluster_stats_messages_received:488

5.配置三主三从集群

1.获取集群信息
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes | grep 6380 | awk '{print $1,$2}'
454fe9862588f97f969c181b3f8c5e24f6135265 192.168.81.220:6380
5f19db5c04ccaea18270819f5af37cacbf41a800 192.168.81.210:6380
8d918c708db4a9fbe6b08d9f707d501eb328885e 192.168.81.230:6380
2.配置交叉复制
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6381
192.168.81.210:6381> CLUSTER REPLICATE 454fe9862588f97f969c181b3f8c5e24f6135265
OK
[root@redis-1 ~]# redis-cli -h 192.168.81.220 -p 6381
192.168.81.220:6381> CLUSTER REPLICATE 8d918c708db4a9fbe6b08d9f707d501eb328885e
OK
[root@redis-1 ~]# redis-cli -h 192.168.81.230 -p 6381
192.168.81.230:6381> CLUSTER REPLICATE 5f19db5c04ccaea18270819f5af37cacbf41a800
OK
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes
454fe9862588f97f969c181b3f8c5e24f6135265 192.168.81.220:6380 master - 0 1612336046339 4 connected 5462-10922
4827ff5cbc7122a4459b1d91bd15a89e0661a91b 192.168.81.220:6381 slave 8d918c708db4a9fbe6b08d9f707d501eb328885e 0 1612336049371 2 connected
5f19db5c04ccaea18270819f5af37cacbf41a800 192.168.81.210:6380 myself,master - 0 0 3 connected 0-5461
8d918c708db4a9fbe6b08d9f707d501eb328885e 192.168.81.230:6380 master - 0 1612336047350 0 connected 10923-16383
34e698b929948c3c61c4ba40c129161b736ee5cc 192.168.81.230:6381 slave 5f19db5c04ccaea18270819f5af37cacbf41a800 0 1612336045330 5 connected
4e99bc582fede8e359fb25d163e7267f616409ff 192.168.81.210:6381 slave 454fe9862588f97f969c181b3f8c5e24f6135265 0 1612336048360 4 connected

已经交叉复制,到此三主三从redis cluster集群部署完成

6.快速删除一个redis cluster集群方式

两种方法:

  • 将所有redis节点的数据文件全部删除包括rdb、node_6380.conf
  • 登陆每一个节点,执行cluster reset
目录
相关文章
|
8月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
542 2
|
6月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
554 5
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
671 5
|
6月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
1948 8
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
734 6
|
7月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
9月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
264 5
|
8月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
11月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?