Redis集群

Redis主从复制:

“三高”架构:高并发、高性能、高可用

点击redis的风险与问题:

1、机器故障:硬盘故障、系统崩溃

本质:数据丢失、很可能对业务造成灾难性打击

2、容量瓶颈:内存不足,从16G升级到64G,从64G升级到128G,无限升级内存

本质:穷,硬件条件跟不上

为了避免单点Redis服务器故障,准备多台服务器相互联通。数据复制多个副本在不同服务器上,连接在一起,保证数据是同步的。一台宕机其他可以提供服务,实现Redis的高可用,同时实现数据冗余备份。

主从复制:

主从复制即将master中的数据及时、有效的复制到slave中

特征:一个master可以拥有多个slave,一个slave只对应一个master

职责:

master:

1、写数据

2、执行写操作时,将出现变化的数据自动同步到slave

3、读数据(可忽略)

slave:

1、读数据

2、写数据(禁止)

主从复制的作用主要包括:

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式。
  2. 故障恢复:当主节点故障时,从节点可以暂时替代主节点提供服务,是一种服务冗余的方式
  3. 负载均衡:在主从复制的基础上,配合读写分离,由主节点进行写操作,从节点进行读操作,分担服务器的负载;尤其是在多读少写的场景下,通过多个从节点分担负载,提高并发量。
  4. 高可用基石:主从复制还是哨兵和集群能够实施的基础。

主从复制的工作流程:

  • 建立连接阶段(准备阶段)
  • 数据同步阶段
  • 命令传播阶段

阶段一:主从连接:

1、客户端发送命令:

slaveof <masterip> <masterport>

2、启动服务器参数:

redis-server -slaveof <materip> <masterport>

3、服务器配置:

slaveof <masterip> <materport>

阶段二:数据同步阶段工作流程

在slave除此连接master后,复制master中的所有数据到slave

将slave的数据库状态更新成master当前的数据库状态

阶段三:命令传播阶段:

部分复制:

命令传播阶段出现断网现象:

  • 网络闪断闪连    忽略
  • 短时间网络中断   部分复制
  • 长时间网络中断   全量复制

部分复制的三个核心要素:

  • 服务器的运行id(run id)
  • 主服务器的复制缓冲区
  • 主从服务器的复制偏移量

服务器运行ID(runnid):服务器运行id是每一台服务器每次运行的身份识别码,一台服务器多次运行可以生成多个运行id

复制缓冲区:是一个先进先出(FIFO)的队列,用于存储服务器执行过的命令,每次传播命令,master都会讲传播的命令记录下来,并存储在复制缓冲区中。

由来:每台服务器启动时,如果开启有AOF或者被连接成为master节点,即创建复制缓冲区

作用:用于保存master收到的所有指令(仅影响数据变更的指令,如:set、select)

runid:服务器运行ID是每一天服务器每次运行的身份识别码,一台服务器多次运行可以生成多个运行id

主从服务器复制偏移量(offset):

一个数字,面熟复制缓冲区中的指令字节位置

分类:

master复制偏移量:记录发送给所有slave的指令字节对应的位置(多个)

slave复制偏移量:记录slave接受master发送过来的指令字节对应的位置(一个)

数据来源:

    master端:发送一次记录一次

    slave端:接收一次记录一次

作用:同步信息,比对master与slave的差异,当slave断线后,恢复数据使用

心跳机制:

当slave掉线过多,或延迟过高,master为保障数据稳定性,将拒绝所有信息同步操作

min-slaves-to-wirte 2

min-slaves-max-lag 8

slave数量少于2个,或所有slave的延迟都大于10s,强制关闭master写功能,停止数据同步

slave发送REPLCONF ACK命令确认slave数量和延迟

主从复制的问题:

1、频繁的全量复制:

由于重启,runid发生变化

由于网络原因:

2、频繁的网络中断

3、数据不一致

 

python+opencv简谱识别音频生成系统源码含GUI界面+详细运行教程+数据 一、项目简介 提取简谱中的音乐信息,依据识别到的信息生成midi文件。 Extract music information from musical scores and generate a midi file according to it. 二、项目运行环境 python=3.11.1 第三方库依赖 opencv-python=4.7.0.68 numpy=1.24.1 可以使用命令 pip install -r requirements.txt 来安装所需的第三方库。 三、项目运行步骤 3.1 命令行运行 运行main.py。 输入简谱路径:支持图片或文件夹,相对路径或绝对路径都可以。 输入简谱主音:它通常在第一页的左上角“1=”之后。 输入简谱速度:即每分钟拍数,同在左上角。 选择是否输出程序中间提示信息:请输入Y或N(不区分大小写,下同)。 选择匹配精度:请输入L或M或H,对应低/中/高精度,一般而言输入L即可。 选择使用的线程数:一般与CPU核数相同即可。虽然python的线程不是真正的多线程,但仍能起到加速作用。 估算字符上下间距:这与简谱中符号的密集程度有关,一般来说纵向符号越稀疏,这个值需要设置得越大,范围通常在1.0-2.5。 二值化算法:使用全局阈值则跳过该选项即可,或者也可输入OTSU、采用大津二值化算法。 设置全局阈值:如果上面选择全局阈值则需要手动设置全局阈值,对于.\test.txt中所提样例,使用全局阈值并在后面设置为160即可。 手动调整中间结果:若输入Y/y,则在识别简谱后会暂停代码,并生成一份txt文件,在其中展示识别结果,此时用户可以通过修改这份txt文件来更正识别结果。 如果选择文件夹的话,还可以选择所选文件夹中不需要识别的文件以排除干扰
### Redis 集群的搭建与配置 #### 一、Redis 集群简介 Redis 是一种高性能的键值存储系统,支持多种数据结构操作。通过集群模式可以实现分布式存储和高可用性。Redis 集群允许多个 Redis 实例协同工作,提供更高的吞吐量和更强的数据持久化能力。 --- #### 二、环境准备 在开始之前,需确认以下条件已满足: - 所有服务器的操作系统版本一致(如 CentOS 7 或 Windows),并安装了相同版本的 Redis 软件。 - 已关闭防火墙或开放必要的端口(默认 Redis 使用 6379 及其衍生端口)。 - 每台服务器上至少有两个 Redis 实例运行,分别作为主节点和从节点[^1]。 --- #### 三、具体步骤 ##### 1. 下载并解压 Redis 文件 下载指定版本的 Redis 压缩包(如 Redis 6.2.5 或更高版本),将其解压到目标路径下。例如,在 Linux 中执行以下命令: ```bash wget http://download.redis.io/releases/redis-6.2.5.tar.gz tar -zxvf redis-6.2.5.tar.gz cd redis-6.2.5 make ``` ##### 2. 创建多个实例目录 为每个 Redis 实例创建独立的工作目录,并复制 `redis.conf` 至对应文件夹中。例如: ```bash mkdir -p /service/redis/{6379,6380} cp redis.conf /service/redis/6379/ cp redis.conf /service/redis/6380/ ``` ##### 3. 修改配置文件 编辑每个实例下的 `redis.conf` 文件,设置不同的监听端口号和其他必要参数。以下是关键配置项: - 设置绑定 IP 地址:`bind 0.0.0.0` - 关闭保护模式:`protected-mode no` - 开启集群功能:`cluster-enabled yes` - 指定集群配置文件位置:`cluster-config-file nodes-{port}.conf` - 设定日志级别:`loglevel notice` ##### 4. 启动 Redis 实例 依次启动各个 Redis 实例。例如: ```bash redis-server /service/redis/6379/redis.conf redis-server /service/redis/6380/redis.conf ``` 如果是在多台物理机上部署,则需要远程登录每台机器重复上述过程[^2]。 ##### 5. 构建集群拓扑 利用 `redis-cli` 的集群管理工具完成初始化操作。假设当前存在六个节点分布在三台主机上,则可输入如下指令构建集群关系: ```bash redis-cli --cluster create \ 192.168.x.y:6379 192.168.x.z:6379 ... \ --replicas 1 ``` 其中 `--replicas` 参数表示每个主节点分配几个副本[^4]。 ##### 6. 验证集群状态 最后可以通过以下方式验证集群是否正常运作: ```bash redis-cli -c -h {任意IP} -p {任一口号} CLUSTER INFO CLUSTER NODES PING SET key value GET key ``` --- #### 四、注意事项 - 如果使用 Docker 容器来部署 Redis 集群,请确保容器间网络互通良好。 - 对于 Windows 平台上的开发测试场景,可通过批处理脚本来简化服务启动流程[^3]。 --- #### 五、示例代码片段 下面展示了一个简单的 Python 程序用于连接至 Redis 集群并向其中写入一条记录: ```python import redis r = redis.StrictRedisCluster(startup_nodes=[{"host": "127.0.0.1", "port": "6379"}], decode_responses=True) r.set('foo', 'bar') print(r.get('foo')) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值