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

相关推荐
未来之窗软件服务35 分钟前
solidwors插件 开发————仙盟创梦IDE
前端·javascript·数据库·ide·仙盟创梦ide
yc_122435 分钟前
SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
数据库·c#
小白学大数据41 分钟前
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
javascript·redis·分布式·scrapy
Kookoos1 小时前
Redis + ABP vNext 构建分布式高可用缓存架构
redis·分布式·缓存·架构·c#·.net
Leo.yuan2 小时前
基于地图的数据可视化:解锁地理数据的真正价值
大数据·数据库·信息可视化·数据挖掘·数据分析
好吃的肘子2 小时前
MongoDB入门
数据库·mongodb
noravinsc2 小时前
人大金仓数据库 与django结合
数据库·python·django
代码配咖啡2 小时前
《Navicat之外的新选择:实测支持国产数据库的SQLynx核心功能解析》
数据库
懒大王爱吃狼3 小时前
怎么使用python进行PostgreSQL 数据库连接?
数据库·python·postgresql
时序数据说3 小时前
IoTDB集群的一键启停功能详解
大数据·数据库·开源·时序数据库·iotdb