13.redis集群、主从复制、哨兵

1.redis主从复制

主从复制是指将一台redis服务器(主节点-master)的数据复制到其他的redis服务器(从节点-slave),默认每台redis服务器都是主节点,每个主节点可以有多个或没有从节点,但一个从节点只能有一个主节点

1.1 主从复制的作用

数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式

故障恢复:当主节点出现问题时,可以由从节点提供服务

负载均衡:在主从复制的基础上配合读写分离,主节点提供写服务,从节点提供读服务,分担服务器负载

高可用基石:主从复制是哨兵和集群能够实施的基础

1.2 常见主从结构

一主一从:用于主节点故障转移从节点,主要为了数据安全性和避免持久化对主节点的影响

一主多从:主要针对读较多的场景,读由多个节点分担,但影响主节点的稳定,影响带宽

树状主从:为了缓解一主多从导致的主节点压力大的问题,形成层级结构,主管从-从再管从

1.3 实现主从复制

将redis.conf复制多份并修改配置

92 prot 6379

158 pidfile /var/run/redis_6379.pid

171 logfile "redis6379.log"

253 dbfilename dump6379.rdb

可以用指令批量替换

:%s/6379/6380/g

启动不同服务器并开启不同终端连接不同服务器

redis-server redis6379.conf

redis-cli -p 6379

输入info replication可以查看当前服务器的角色等信息

在服务器下输入指令,设置当前服务为从服务器和其主服务器是谁

salveof 主服务器ip 端口号

2.redis哨兵

当主服务器宕机时,为了保持功能的正常实现,我们需要一个哨兵来选一台从服务器成为主服务器;(哨兵也是一台单独的redis服务器,连接主服务器,并经过主连接从)

为了防止单个哨兵出现宕机误判等问题,我们还可以使用多个哨兵(必须为奇数),设置一个投票参数,只有当达到这个数目的哨兵认为主服务器宕机,才会主从切换

哨兵的sentinel.conf应该如下设置(注释去掉)

protected-mode no # 关闭保护模式,方便测试

port 26379 # 哨兵的端口

sentinel monitor mymaster 192.168.41.226 6379 1

192.168.41.226:主机ip 6379:端口 1:至少几个哨兵认为主机下线时进行故障切换

输入redis-sentinel sentinel6379.conf 启动哨兵

3.redis集群

从redis 3.0后版本都支持redis-cluster集群,就是开启多台redis主服务器连接一起形成集群,

这是为了解决sentinel模式虽然能满足大多数需求,但无法处理大量写的请求的问题;

这也是经典的P2P(去中心化)

3.1 redis集群的实现

  • 在/usr/local/redis下创建redis-cluster目录

  • 拷贝redis6379到redis-cluster中并命名为redis8001.conf

  • 92 修改redis8001.conf中的端口号

  • 158 修改pidfile

  • 171 修改日志文件

  • 253 修改rdb文件

  • 699 开启aof设为yes

  • 703 指定aof文件名

  • 832 开启集群 设为yes

  • 840 指定nodes配置文件

为了方便多个redis服务器的启动,我们可以编写一个启动脚本,在/user/local/redis下创建start_all.sh文件,在文件中加入

redis-server redis-cluster/redis8001.conf

redis-server redis-cluster/redis8002.conf

redis-server redis-cluster/redis8003.conf

redis-server redis-cluster/redis8004.conf

redis-server redis-cluster/redis8005.conf

redis-server redis-cluster/redis8006.conf

ps -ef|grep redis

保存退出,为start_all.sh文件添加执行权限

chmod +x start_all.sh

启动redis

./start_all

创建集群

redis-cli --cluster create 192.168.74.130:8001 192.168.74.130:8002 192.168.74.130:8003 192.168.74.130:8004 192.168.74.130:8005 192.168.74.130:8006 --cluster-replicas 1

创建过程中要输入yes

连接redis集群要使用-c

redis-cli -c -p 8001

创建集群关闭脚本

#!/bin/bash

PORT=8001

ENDPORT=8006

while [ $((PORT <= ENDPORT)) != "0" ]; do

echo "Stopping Redis $PORT"

redis-cli -p $PORT shutdown

PORT=$((PORT+1))

done

echo "done"

exit 0

添加执行权限

chmod +x stop_all.sh

相关推荐
野犬寒鸦12 分钟前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL1 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·1 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德1 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫2 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i2 小时前
完全卸载MariaDB
数据库·mariadb
期待のcode2 小时前
Redis的主从复制与集群
运维·服务器·redis
纤纡.2 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn2 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot