企业级NoSql数据库Redis集群

devtools/2024/11/9 23:47:50/

关系型数据库和 NoSQL 数据库

数据库主要分为两大类:

关系型数据库与 NoSQL 数据库

关系型数据库是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库

NoSQL 数据库,全称为 Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适 用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键 值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库 (MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase),每种 NoSQL 都有其特有的使用 场景及优点

为什么还要用 NoSQL 数据库呢?

主要是由于随着互联网发展,数据量越来越大,对性能要求越来越高,传统数据库存在着先天性的缺 陷,即单机(单库)性能瓶颈,并且扩展困难。这样既有单机单库瓶颈,却又扩展困难,自然无法满足 日益增长的海量数据存储及其性能要求,所以才会出现了各种不同的 NoSQL 产品,NoSQL 根本性的优 势在于在云计算时代,简单、易于大规模分布式扩展,并且读写性能非常高

RDBMS和NOSQL的特点及优缺点:

Remote Dictionary Server 简介

中文官网

https://redis.cn

Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-value database),是一个非关系型数据库redis 提供将内存通过网络远程共享的一种服务,提供类似功能的 还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能。 Redis 在高并发、低延迟环境要求比较高的环境使用量非常广泛

Redis特性

速度快: 10W QPS,基于内存,C语言实现

单线程

持久化

支持多种数据结构

支持多种编程语言

功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能

简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单

主从复制

支持高可用和分布式

纯内存 非阻塞 避免线程切换和竞态消耗:单线程快的原因

Redis应用场景

数据读操作流程

Redis的安装

官方下载地址: http://download.redis.io/releases/

rpm包方式安装

dnf install redis -y

源码安装

解压并安装编译工具

执行编译命令

make 

make install

启动redis

报错该编辑此文件

解决该问题

vim install_server.sh

注释此部分

配置redis

vi /etc/redis/6379.conf

后启动

查看

Redis的基本操作

查看配置

#写入和读取数据

#选择数据库 redisa中有0-15个数据库

#移动数据

127.0.0.1:6379> set name lee

OK

127.0.0.1:6379> MOVE name 1

(integer) 1

127.0.0.1:6379> GET name

(nil)

127.0.0.1:6379> select 1

OK

127.0.0.1:6379[1]> get name "lee"

Redis 主从复制

环境配置

修改mastser节点的配置文件  三台都改

#关闭protected模式

重启

.配置slave节点

20 30 中

重启

测试效果

#在mastser节点

在slave中查看

主从同步过程

master节点会开启bgsave进程发送内存rbd到slave节点,在此过程中是异步操作,也就是说 master节点仍然可以进行写入动作

slave节点收到rdb后首先清空自己的所有数据

slave节点加载rdb并进行数据恢复

在master和slave同步过程中master还会开启新的bgsave进程把没有同步的数据进行缓存

然后通过自有的replactionfeedslave函数把未通过内存快照发动到slave的数据一条一条写入到 slave中

redis的哨兵(高可用)

实验环境:我们用主两从来实现Redis的高可用架构

每个哨兵(Sentinel)进程会向其它哨兵(Sentinel)、Master、Slave定时发送消息,以确认对方是否”活” 着,如果发现对方在指定配置时间(此项可配置)内未得到回应,则暂时认为对方已离线,也就是所谓的” 主观认为宕机” (主观:是每个成员都具有的独自的而且可能相同也可能不同的意识),英文名称: Subjective Down,简称SDOWN

有主观宕机,对应的有客观宕机。当“哨兵群”中的多数Sentinel进程在对Master主服务器做出SDOWN 的 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判 断,这种方式就是“客观宕机”(客观:是不依赖于某种意识而已经实际存在的一切事物),英文名称是: Objectively Down, 简称 ODOWN

通过一定的vote算法,从剩下的slave从服务器节点中,选一台提升为Master服务器节点,然后自动修改 相关配置,并开启故障转移(failover)

Sentinel 机制可以解决master和slave角色的自动切换问题,但单个 Master 的性能瓶颈问题无法解决,类 似于MySQL中的MHA功能

Redis Sentinel中的Sentinel节点个数应该为大于等于3且最好为奇数

哨兵的实验过程

在所有阶段中关闭 protected-mode no

.在master节点中

启动服务

测试在master中

出现

在整个架构中可能会出现的问题

在生产环境中如果master和slave中的网络出现故障,由于哨兵的存在会把master提出去 当网络恢复后,master发现环境发生改变,master就会把自己的身份转换成slave master变成slave后会把网络故障那段时间写入自己中的数据清掉,这样数据就丢失了。

解决问题

master在被写入数据时会持续连接slave,mater确保有2个slave可以写入我才允许写入 如果slave数量少于2个便拒绝写入

在matster中设定

也可永久写入

/etc/redis/6379.conf

Redis Cluster(无中心化设计)

工作原理

在哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动将slave提升为master, 从而可以保证redis服务的正常使用,但是无法解决redis单机写入的瓶颈问题,即单机redis写入性能受 限于单机的内存大小、并发数量、网卡速率等因素。 redis 3.0版本之后推出了无中心架构的redis cluster机制,在无中心的redis集群当中,其每个节点保存 当前节点数据和整个集群状态,每个节点都和其他所有节点连接

特点

1. 所有Redis节点使用(PING机制)互联

2. 集群中某个节点的是否失效,是由整个集群中超过半数的节点监测都失效,才能算真正的失效 3. 客户端不需要proxy即可直接连接redis,应用程序中需要配置有全部的redis服务器IP

4. redis cluster把所有的redis node 平均映射到 0-16383个槽位(slot)上,读写需要到指定的redis node上进行操作,因此有多少个redis node相当于redis 并发扩展了多少倍,每个redis node 承担 16384/N个槽位

5. Redis cluster预先分配16384个(slot)槽位,当需要在redis集群中写入一个key -value的时候,会使 用CRC16(key) mod 16384之后的值,决定将key写入值哪一个槽位从而决定写入哪一个Redis节点 上,从而有效解决单机瓶颈。

Redis cluster 主从架构

是对每个master 节点都实现主从复制,从而实现 redis 高可用性

创建redis cluster的前提

1.每个redis node节点采用相同的硬件配置、相同的密码、相同的redis版本。

2.每个节点必须开启的参数

cluster-enabled yes

#必须开启集群状态,开启后redis进程会有cluster显示

cluster-config-file nodes-6380.conf

#此文件有redis cluster集群自动创建和维护,不需要任何手 动操作

3.所有redis服务器必须没有任何数据

4.先启动为单机redis且没有任何key value

部署redis cluster

所有redis主机中

vi /etc/redis/redis.conf

#集群主从认证

#redis登陆密码 redis-cli 命令连接redis后要用“auth 密码”进行认证

开启cluster集群功能    指定集群配置文件   节点加入集群的超时时间单位是ms

可看到

创建redis-cluster

检测redis集群状态

检测集群

写入数据

集群扩容

添加master

#分配槽位

redis-cli -a 123456 --cluster reshard 172.25.254.10:6379

4096  

给50分配填写50id

all--从所有中分配

添加salve

clsuter集群维护

移除要下线主机的哈希槽位

删除master


http://www.ppmy.cn/devtools/100455.html

相关文章

树莓派制成的 — 带运动检测和摄像头的安防系统

自动布防/撤防、运动检测、带图片的移动通知 项目所用物品 硬件组件 Raspberry Pi 1 Model A 一个:任何支持摄像头模块的 Raspberry Pi 均可 Raspberry Pi 摄像头模块一个 USB WLAN/WiFi适配器一个:必须支持监控模式,推荐使用RT5370 M…

单例模式和多例模式

一.单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,用于确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例。这种模式在需要控制资源访问,如配置文件读取、数据库连接、线程池等场景中非常…

SSL连接出错原因有哪些?

在当今数字化时代,网络安全至关重要。SSL(Secure Sockets Layer,安全套接层)协议作为一种为网络通信提供安全及数据完整性的安全协议,被广泛应用于各种网络场景中,如网页浏览、电子邮件、在线支付等。然而&…

汉服文化平台网站

您好!本篇论文将详细介绍汉服文化平台网站的设计与实现,该项目基于Java语言,采用SSM框架,结合MySQL数据库完成开发。如果您对汉服文化或本项目有任何兴趣或疑问,欢迎随时与我联系。 开发语言 Java 数据库 MySQL 技…

Python中使用pip换源的详细指南

在Python开发过程中,我们经常需要安装各种第三方库。pip是Python的包管理工具,用于安装和管理Python库。然而,由于网络原因,有时访问默认的Python包索引(PyPI)可能会比较慢。这时,我们可以通过更…

强化学习5:策略梯度推导

1 介绍 Q-learning、SARSA 等算法都是基于值的学习方法。基于值的方法主要用于离散动作空间。如果动作空间是连续的,离散化可能会导致精度下降或增加计算复杂度。基于值的方法通常要求对每个状态-动作对估计值函数,这限制了策略的复杂性和灵活性。为了使…

抖音收购“联动优势”,存量客户将清退

持牌支付机构联动优势电子商务有限公司(以下简称“联动支付”)母公司海联金汇科技股份有限公司(以下简称“海联金汇”)发布公告:将联动支付作价14亿元转让天津同融电子商务有限公司(以下简称“同融电子”) …

Flink CDC Standalone模式部署及Flink CDC Job提交

目录 部署规划 Flink CDC下载 Flink CDC安装 安装包解压 添加connector包 添加MySQL驱动 提交Flink CDC任务 独立模式(Standalone mode)是Flink最简单的部署模式。本文将介绍如何下载、安装和运行Flink CDC。 Flink CDC是基于Flink开发的一个流式数据…