首页 > 数据库 >NoSQL之Redis集群

NoSQL之Redis集群

时间:2024-07-07 23:09:36浏览次数:19  
标签:NoSQL Redis redis 集群 usr conf local 节点

目录

1.Redis 主从复制

(1)Redis 主从复制工作原理

1.slave启动后,向master发送SYNC命令,master接收到SYNC命令后通过bgsave保存快照,并使用缓冲区记录保存快照这段时间内执行的写命令
2.master将保存的快照文件发送给slave,并继续记录执行的写命令
3.slave接收到快照文件后,加载快照文件,载入数据4.master快照发送完后开始向slave发送缓冲区的写命令,slave接收命令并执行,完成复制初始化
5.master每次执行一个写命令都会同步发送给slave保持master与slave之间数据的一致性

(2)搭建Redis 主从复制

环境准备

修改内核参数

vim /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 20480

sysctl -p



安装redis

rpm -q gcc gcc-c++ makec
 #yum install -y gcc gcc-c++ make  
cd /opt/
rz -E 上传redis-7.0.13.tar.gz
tar xf redis-7.0.13.tar.gz
cd redis-7.0.13/
make
make PREFIX=/usr/local/redis install




注:由于Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,不用先执行 ./configure 进行配置,可直接执行 make 与 make install 命令进行安装。
创建redis工作目录

mkdir /usr/local/redis/{conf,log,data}
cp /opt/redis-7.0.13/redis.conf /usr/local/redis/conf/
cd /usr/local/redis/conf/
useradd -M -s /sbin/nologin redis
chown -R redis.redis /usr/local/redis/



环境变量

vim /etc/profile 
export PATH=$PATH:/usr/local/redis/bin	

source /etc/profile



定义systemd服务管理脚本

vim /usr/lib/systemd/system/redis-server.service
[Unit]
Description=Redis Server
After=network.target

[Service]
User=redis
Group=redis
Type=forking            
TimeoutSec=0             
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target



修改 Redis 配置文件(Master节点操作)
Master节点:20.0.0.100
Slave1节点:20.0.0.110
Slave2节点:20.0.0.120











修改 Redis 配置文件(Slave节点操作)Slave1节点:20.0.0.110
Slave1节点:20.0.0.110
Slave2节点:20.0.0.120


2.Redis 哨兵模式

(1)Redis 哨兵工作原理

1)每个哨兵都会定时探测主节点、从节点、及其它哨兵节点的运行状态
2)当哨兵节点探测主节点异常,则认为主节点主观下线
3)当超过指定数量的哨兵节点认为主节点主观下线,则认定主节点客观下线
4)哨兵节点会通过raft算法选举出leader,再由leader负责故障转移和通知
5)将一个从节点提升为新的主节点,让其它从节点指向新的主节点做主从复制
6)写VIP也会漂移到新的主节点上
7)原主节点恢复后也会自动变成从节点指向新的主节点做主从复制

(2)搭建Redis 哨兵模式

修改 Redis 哨兵模式的配置文件(所有节点操作)

cp /opt/redis-7.0.13/sentinel.conf /usr/local/redis/conf/
chown redis:redis /usr/local/redis/conf/sentinel.conf


















3.Redis 集群模式

采用的算法是哈希槽分区算法
通过数据分片的方式来进行数据共享问题,同时提供数据复制和故障转移功能。
之前的两种模式数据都是在一个节点上的,单个节点存储是存在上限的。集群模式就是把数据进行分片存储,当一个分片数据达到上限的时候,就分成多个分片。
要是针对海量数据+高并发+高可用的海量数据场景,Redis集群模式的性能和高可用性均优于哨兵模式。

(1)集群模式的工作原理

在Redis的每个节点上,都有一个插槽(slot),取值范围为0-16383
当我们存取key的时候,Redis会根据CRC16的算法得出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作
为了保证高可用,Cluster模式也引入主从复制模式,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点
当其它主节点ping一个主节点A时,如果半数以上的主节点与A通信超时,那么认为主节点A宕机了。如果主节点A和它的从节点都宕机了,那么该集群就无法再提供服务了


(2)集群模式的特点

自动分片:数据自动分布在不同的节点上,客户端不需要关心数据的具体位置。
高可用性:即使某个节点失败,只要大多数节点可用,集群仍然可以提供服务。
读写分离:可以通过在每个主节点上设置从节点来实现读写分离,进一步提高性能。
容错性:集群能够在节点故障时自动进行故障转移。
集群模式的局限性
多键操作限制:由于数据分布在不同的节点上,多键操作(比如 MSET、MGET、SUNION 等)要求所有相关的键必须在同一节点上。
数据迁移复杂性:当集群进行扩容或缩容时,数据迁移过程可能会比较复杂。

(3)搭建Redis 群集模式

redis的集群一般需要6个节点,3主3从。方便起见,这里所有节点在同一台服务器上模拟:
以端口号进行区分:3个主节点端口号:6001/6002/6003,对应的从节点端口号:6004/6005/6006。

##环境准备
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
        disabled

##修改内核参数
vim /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 20480

sysctl -p

##安装redis
rpm -q gcc gcc-c++ makec
  #yum install -y gcc gcc-c++ make
cd /opt/
rz -E 上传redis-7.0.13.tar.gz
tar zxvf /opt/redis-7.0.13.tar.gz -C /opt/
cd /opt/redis-7.0.13/
make -j 2
make PREFIX=/usr/local/redis install

##创建redis工作目录
mkdir /usr/local/redis/{conf,log,data}
cp /opt/redis-7.0.13/redis.conf /usr/local/redis/conf/
cd /usr/local/redis/conf/
useradd -M -s /sbin/nologin redis
chown -R redis:redis /usr/local/redis/

##环境变量
vim /etc/profile 
export PATH=$PATH:/usr/local/redis/bin		

source /etc/profile

##定义systemd服务管理脚本
vim /usr/lib/systemd/system/redis-server.service
[Unit]
Description=Redis Server
After=network.target

[Service]
User=redis
Group=redis
Type=forking             
TimeoutSec=0            
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

##修改 Redis 配置文件(Master节点操作)
vim /usr/local/redis/conf/redis.conf


scp redis.conf 20.0.0.110:`pwd`  ##复制给其他五台服务器
....
systemctl restart redis-server.service
ps -elf | grep redis











启动集群

redis-cli --cluster create 20.0.0.100:6379 20.0.0.110:6379 20.0.0.130:6379 20.0.0.140:6379 20.0.0.150:6379 20.0.0.160:6379 --cluster-replicas 1

注:六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点。下面交互的时候 需要输入 yes 才可以创建。

redis-cli -h 20.0.0.100 -p 6379 -c  #加-c参数,节点之间就可以互相跳转
cluster slots  #查看节点的哈希槽编号范围
set name zhangsan
cluster keyslot name	#查看name键的槽编号
keys *		#对应的slave节点也有这条数据,但是别的节点没有

(4)集群模式与哨兵模式的主要区别

数据分片
集群模式通过数据分片提高了系统的扩展性和性能,而哨兵模式没有数据分片功能,适用于数据量较小的场景。

高可用性
哨兵模式主要提供高可用性,能够在主节点故障时迅速进行故障转移。集群模式也提供高可用性,但是它通过分片和多个副本来实现,比哨兵模式更复杂。

写能力
集群模式由于数据分片,可以在多个节点上进行写操作,提高了写能力。哨兵模式的写能力受限于单个主节点。

标签:NoSQL,Redis,redis,集群,usr,conf,local,节点
From: https://www.cnblogs.com/zsy828/p/18272675

相关文章

  • NoSQL之 Redis配置与优化
    目录1.关系数据库和非关系数据库2.Redis安装部署(1)Redis简介(2)Redis为什么那么快?(3)Redis安装部署(1)环境准备(2)安装redis(3)修改配置文件(4)定义systemd服务管理脚本(4)redis-benchmark测试工具3.Redis数据库常用命令(1)Redis数据类型4.Redis高可用(1)Redis持久化5.Redis性能管理(1)内存碎片6.re......
  • HDFS分布式集群搭建
    1、集群简介Hadoop集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。另外,对于Hadoop的集群来讲,可以分为两大类角色:master和slave。(1)HDFS集群:负责海量数据的存储,集群中的角色主要有:NameNode(一个,master)、DataNode(若干,slave)和SecondaryName......
  • Redis中间件与Web中间件
    易混淆概念辨析在不同的上下文中,“Redis中间件”可以有不同的含义,这可能导致一些混淆。让我们来分解一下:Web中间件与消息中间件的区别:Web中间件:在ASP.NETCore(或类似框架)中,中间件是指处理HTTP请求管道的组件,例如处理请求、认证、日志记录等。这些中间件按顺序构成一个请求......
  • 2.基于Containerd运行时搭建Kubernetes多控制平面集群实践-腾讯云开发者社区-腾讯云
    https://cloud.tencent.com/developer/article/2129846 2.基于Containerd运行时搭建Kubernetes多控制平面集群实践发布于2022-09-2919:27:53 1K0 举报文章被收录于专栏:全栈工程师修炼之路[TOC] 0x00前言简述本章主要讲述,如果使用kubead......
  • 【后端面试题】【中间件】【NoSQL】MongoDB查询优化3(拆分、嵌入文档,操作系统)
    拆分大文档很常见的一种优化手段,在一些特定的业务场景中,会有一些很大的文档,这些文档有很多字段,而且有一些特定的字段还特别的大。可以考虑拆分这些文档大文档对MongoDB的性能影响还是很大的,就我个人经验而言,认为可以考虑从两个角度出发拆分大文档:按照字段的访问频率拆分:......
  • 【后端面试题】【中间件】【NoSQL】MongoDB提高可用性的方案(主从结构、仲裁节点、分片
    主从结构MongoDB的高可用和别的中间件的高可用方案基本类似。比如在MySQL里,接触了分库分表和主从同步;在Redis里,Redis也有主从结构;在Kafka里,分区也是有主从结构的。所以先介绍启用了主从同步我们的系统有一个关键组件-MongoDB,但是在最开始的时候,MongoDB没有启用主从,是......
  • 无人机集群路径规划:四种优化算法(GOOSE、APO、LPO、SBOA)求解无人机集群路径规划,提供MAT
     一、单个无人机路径规划模型介绍无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。二、无人......
  • 无人机集群路径规划:四种优化算法(GOOSE、APO、DCS、SBOA)求解无人机集群路径规划,提供MAT
     一、单个无人机路径规划模型介绍无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。二、无人......
  • kubernetes集群部署:node节点部署和cri-docker运行时安装(四)
    安装前准备同《kubernetes集群部署:环境准备及master节点部署(二)》安装cri-docker在Kubernetes1.20版本之前,Docker是Kubernetes默认的容器运行时。然而,Kubernetes社区决定在Kubernetes1.20及以后的版本中逐步淘汰对Docker的直接支持,一直到Kubernetes1.24版本彻底......
  • Redis基本命令源码解析-字符串命令
    1.set用于将kv设置到数据库中2.mset批量设置kvmset(msetnx)key1value1key2value2...mset:msetCommandmsetnx:msetnxCommandmsetCommand和msetnxCommand都调用msetGenericCommand2.1msetGenericCommand如果参数个数为偶数,则响应参数错误并返回如果nx=1,则......