数据库:Redis哨兵及cluster集群部署

2023/6/5 22:23:27

一、redis数据库哨兵模式

目录

一、redis数据库哨兵模式

1、什么是哨兵模式

2、哨兵的作用

3、哨兵结构组成

4、哨兵故障转移机制

5、哨兵工作、切换原理

6、哨兵主节点选举原则

7、哨兵模式部署

二、redis数据库cluster集群

1、cluster集群优点、数据存储及同步方式

2、cluster集群原理

3、 cluster集群部署

①实验环境

② 群集部署-reids编译准备

③每台服务器创建2个实例并配置

③启动多实例并查看服务

​④启动redis群集

⑤验证群集结果


1、什么是哨兵模式

哨兵模式:可以自动切换解决单点故障,但是不能负载均衡,存储能力受限制。

哨兵核心功能:在主从复制的基础上,实现了主节点的自动故障转移

2、哨兵的作用

监控:监控主节点和从节点是否在正常运行

故障自动转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。

通知(提醒):哨兵将故障转移结果发送给客户端

3、哨兵结构组成

哨兵节点:一个或多个哨兵节点组成,特殊的redis节点不存储数据

数据节点:主节点和从节点即数据节点

4、哨兵故障转移机制

主观下线:一个哨兵认为主节点有问题,则进行下一步即选举

客观下线:多个哨兵(半数以上)认为主节点有问题(客观下线是主节点上才会有的概念)

①由哨兵节点定期监控主节点是否发生故障

1个从节点每隔1s向哨兵发送ping的命令做心跳检测,主节点在一定时间内不回复或回复有问题则单个从节点认为主节点下线即主观下线,若超过半数的哨兵认为主节点下线了即客观下线真正下线了。

5、哨兵工作、切换原理

哨兵原理:分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障是通过投票机制选新的master并将所有slave连接到新的master上,整个哨兵的集群数量不能少于3个节点(3台服务器)

①哨兵对主从复制进行监控,所有redis数据库节点

②哨兵之间进行相互监控。监控哨兵彼此

③监控目的:哨兵之间检测检测彼此的存好状态,检测主从复制redis数据库是为了实现故障切换

④当master挂掉,哨兵会即及时发现然后进行投票选出一个新的master服务器(哨兵个数要是奇数)。

⑤选出的slave完成从向主的一个切换

⑥完成其他服务器对新的maste的配置指向

6、哨兵主节点选举原则

①过滤掉不健康的(已下线的节点),没有回复哨兵ping响应的从节点

②选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)

③选择复制便宜量最大,也就是复制最完整的从节点

7、哨兵模式部署

①试验环境

redis端口哨兵端口
192.168.30.116379192.168.30.1126379
192.168.30.136379192.168.30.1326379
192.168.30.146379192.168.30.1426379

②哨兵模式基于主从复制,所有要先部署主从复制。主从复制在上一章节redis数据库高可用中有详细步骤,请参考。

③部署完成主从复制之后进行哨兵部署

三个节点配置:
vim /opt/redis-5.0.7/sentinel.conf  #编辑哨兵配置文件
protected-mode  no  #关闭保护机制 17行
port 26379    #配置监听端口 21行
daemonize  yes   #开启守护进程 26行
logfile “/var/log/sentinel.log”   #指定sentinel日志文件位置36行
dir   "/var/lib/redis/6379"           #65行,指定数据库存放路径
sentinel monitor mymaster 192.168.30.11 6379 2  #指定主节点为192.168.30.11 端口号6379   2表示至少2个哨兵同意才能进行故障转移
sentinel down-after-milliseconds mymaster 30000 #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000   #146行,故障节点的最大超时时间为180000(180秒)

④配置完成后启动哨兵模式,注意一定要先启动maste再启动俩个salve。

master:
redis-sentinel sentinel.conf   &  #先启动master
slave:
redis-sentinel sentinel.conf   &
redis-cli -p 26379 info sentinel  #启动完成后在maser上查看哨兵信息

⑤验证哨兵的故障迁移功能,关闭master的redis数据库。

/etc/init.d/redis_6379  stop #关闭master的redis数据库
tail  -f  /var/log/sentinel.log #试试查看slave的日志是否切换了主

⑥验证哨兵模式注意事项:若使用kill  -9 直接杀掉master的redis进程可能会导致再次重启redis报错:/var/run/redis_6379.pid exists, process is already running or crashed。此报错为reids的pid文件已经存在导致,强制杀死进程pid文件未删除。只需要将/var/run/redis_6379.pid文件删除再启动即可。

二、redis数据库cluster集群

1、cluster集群优点、数据存储及同步方式

cluster集群优点:读写可以负载均衡、自动故障转移、突破单机存储限制、分布式存储、三主三从

同步的两种方式:master1只给slave1同步数据、master和master同步数据(心跳线)

数据如何存储:使用Hash算法有16384个槽位,每个槽位有512字节。

2、cluster集群原理

3、 cluster集群部署

①实验环境

注意:本文基于三台机器所以只需每台机器2个实例端口不通即可,若是同一台机器则需要每个实例的端口都不一样

master

端口

slave

端口

192.168.30.11

6001

192.168.30.11

6002

192.168.30.13

6001

192.168.30.13

6002

192.168.30.14

6001

192.168.30.14

6002

② 群集部署-reids编译准备

三台机器执行:
systemctl stop firewalld #关闭防火墙
setenforce 0  #关闭selinux
yum install gcc gcc-c++ make -y  #安装编译工具
#将安装包传输到每台机器的/opt目录下,安装包本人资源中心中redis-5.0.7.tar.gz可自行下载
tar zxvf redis-5.0.7.tar.gz  #将安装包解压在当前目录
cd  redis-5.0.7   #进入解压后的文件夹中
make #编译为二进制语言
make install prefix=/url/local/redis #写入磁盘指定位置/url/local/redis

③每台服务器创建2个实例并配置

三台机器执行:
cd /etc       #进入/etc目录
mkdir reids   #创建 redis目录
cd redis      #进入redis目录
mkdir -p redis-cluster/redis6001 #创建实例1文件夹
mkdir -p redis-cluster/redis6002 #创建实例2文件夹
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6001 #实例1拷贝主配置文件
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6001 #实例1拷贝客户端、服务端工具
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6002 #实例2拷贝主配置文件
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6002 #实例2拷贝客户端、服务端工具
cd /etc/redis/redis-cluster/redis6001   #进入实例1进行配置文件修改
vim redis.conf              #编辑实例1的配置文件
bind 0.0.0.0      #69行,监听所有地址
protected-mode no #88行,修改,关闭保护模式
port 6001         #92行,修改,redis监听端口(同一台机器的2个实例端口号不能相同)
daemonize yes     #136行,开启守护进程,以独立进程启动
logfile /var/log/redis_6001.log    #172行,指定日志文件目录
cluster-enabled yes       #832行,取消注释,开启群集功能 
cluster-config-file nodes-6001.conf   #840行,取消注释,群集名称文件设置为实例端口.conf 
cluster-node-timeout 15000 #846行,取消注释群集超时时间设置 
appendonly yes #700行,修改,开启AOF持久化
#修改完成实例1后修改实例2,除端口号改为6002 日志文件目录改为6002.conf   群集名称文件改为nodes-6001.conf 其余与实例1一样即可。

③启动多实例并查看服务

三台机器执行:
cd /etc/redis/redis-cluster/redis6001  #进入对应实例1目录
redis-server redis.conf    #执行启动redis实例1
cd /etc/redis/redis-cluster/redis6002  #进入对应实例2目录
redis-server redis.conf    #执行启动redis实例2
ps -elf |grep redis  #查看是否为2个redis进程在运行

④启动redis群集

随便一台机器执行:
redis-cli --cluster create 192.168.30.11:6001 192.168.30.13:6001 192.168.30.14:6001 192.168.30.11:6002 192.168.30.13:6002 192.168.30.14:6002 --cluster-replicas 1
#前面三个ip+端口是master服务器,后面三个是slave服务器  --cluster-replicas 1 是指每个主节点有一个从节点

⑤验证群集结果

登录一台reids实例查看主从对应关系及哈希槽位范围
redis-cli -p 6001  #登录其中一台主redis
cluster slots  #查看主从对应关系及哈希槽位范围 
set  ky26  123  #主上设置ky26值为123查看对应备上是否有此键


http://www.jnnr.cn/a/369206.html

相关文章

【操作系统复习】第3章 处理机调度与死锁 3

死锁(Deadlock):指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,这些进程都将永远不能再向前推进。 对资源不加限制地分配可能导致进程间由于竞争资源而相互制约…

【Docker】1、Docker 基础知识随意介绍

文章目录一、什么是 Docker二、为什么要用 Docker 部署三、Ubuntu Docker 安装四、Dockerfile五、镜像5.1 镜像拉取5.2 镜像删除5.3 使用 docker save 将镜像保存成 tar 归档文件5.4 导入使用 docker save 导出的镜像5.5 使用 docker import 从归档文件中创建镜像5.6 将本地镜像…

CNStack 网络插件:hybridnet 的设计与实现

作者: 若禾 CNStack 是阿里云推出的一款开放的一站式企业级云原生技术中台。在异构的混合云基础设施上,对资源进行统一纳管和优化调度,以开放的、云原生的方式为平台及业务系统提供生产可用的产品及组件,帮助用户打造满足大规模、…

【Python小技巧】Anaconda环境下使用Notepad++运行python程序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、Anaconda、notepad是什么?二、配置过程1. 找到Python.exe2. 编辑运行命令3. 试运行一段代码4. 保存快捷方式总结前言 最近升级了电脑系统&#…

Qt音视频开发27-ffmpeg视频旋转显示

一、前言 用手机或者平板拍摄的视频文件,很可能是旋转的,比如分辨率是1280x720,确是垂直的,相当于分辨率变成了720x1280,如果不做旋转处理的话,那脑袋必须歪着看才行,这样看起来太难受,所以一定要想办法解析到视频的旋转角度,然后根据这个角度重新绘制。在窗体那边也…

《花雕学AI》05:令人惊奇的ChatGPT,一个能够与人类对话的人工智能

今天是周末,4月2日,早上五点就起床了,没有去打羽毛球。 我平时在手机上喜欢看今日头条,了解各种时事新闻,发现今年来频繁出现的单词就是:ChatGPT,通过简单搜索,我逐步接受了这个概念…

从零开始学OpenCV——图像灰度变换详解(线性与非线性变换)

文章目录图像灰度变化灰度变换介绍灰度线性变换灰度分段线性变换图像点运算灰度非线性变换线性点运算灰度的非线性变换:对数变换灰度的非线性变换:伽马变换灰度的非线性变换:对比拉伸灰度的非线性变换: S形灰度变换灰度的非线性变…

Spring Cloud Alibaba Sentinel

一、简介 官网: https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D Sentinel: 分布式系统的流量防卫兵 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、流量路由、熔断降级、系统…

HDFS Balancer负载均衡器

文章目录1、背景2、什么是平衡2.1 每个DataNode的利用率计算2.2 集群的利用率2.3 平衡3、hdfs balancer语法4、运行一个简单的balance案例4.1 设置平衡数据传输带宽4.2 执行banalce5、参考文档1、背景 当我们的hadoop集群运行了一段时间之后,各个DataNode上的数据分…

[LeetCode刷题] - LC006 ZigZag Conversion

题目描述 给定一个字符串,想让你用纵向zig-zag形式展开,然后在横向进行拼接输出最后的新字符串 LeetCode 006Can you solve this real interview question? - Level up your coding skills and quickly land a job. This is the best place to expand…

基于Java(SSM)的学生考勤管理系统

前端:jsp 框架:SSM 数据库:MySQL 有数据库文件,导入即可用 可作为毕设参考 资源路径: https://download.csdn.net/download/yw1990128/87630215 1.1功能需求 信息技术的广泛使用,传统的考勤管理已经不…

多传感器融合定位GNSS、IMU、Lidar、Camera

概述 1.纯激光雷达点云定位 2.融合GNSS的点云定位 3.融合IMU的点云定位 4.融合GNSS、IMU的点云定位 5.融合Camera的点云定位 参考AutoWare 或者 Apollo AutoWare: https://github.com/autowarefoundation/autoware_ai_perception Apollo: https://git…

关于uview2.0计步器最大值赋值问题

需求:当有设置最大值时,计步器则设置max为此数值,最小值1,加大最大值时即不能在往上增加,最大值设置为0则为不限;那么u-number-box的max就要根据设置的数值去判断 uview的u-number-box文档:htt…

oracle 低版本 11.2.0.1.0 创建DBlink访问 oracle 19c提示用户密码错误ORA-010107

由于导数据需要,在oracle 11.2.0.1创建dblink访问oracle19c数据库,提示用户密码错误。 当然不会存在创建是 用户密码错误的情况。 报错页面如下 后面猜想是由数据库版本太低问题导致, 11g版本信息如下: SELECT t.* FROM v$vers…

小白学Pytorch系列--Torch.nn API Quantized Functions(19)

小白学Pytorch系列–Torch.nn API Quantized Functions(19) 方法注释parametrizations.orthogonalparametrizations.spectral_normparametrize.register_parametrizationparametrize.remove_parametrizationsparametrize.cachedparametrize.is_parametrizedparametrize.Paramet…

MySQL主从复制的原理与实操+mycat2读写分离

文章目录MySQL主从复制的原理与实操主从复制原理MySQL主从复制的高级应用MySQL主从复制实操(一主两从)**环境准备****master配置**slave设置MySQL读写分离配置(一主两从)创建数据源查询集群创建逻辑库修改逻辑库的数据源测试读写分…

spark sql(七)源码解析 - sparksql什么时候将时间类型转换成整型或者长整型,又是什么时候将整型或长整型转为时间类型?

1、背景 在做sql下推逻辑时,因为时间类型的自动转换导致自定义的下推逻辑失效 ,为了深入了解问题的原因和更好的解决问题,所以准备源码追踪下sparksql转换类型的具体时间点。另外因为只需要验证sql 字段转换的逻辑,所以只需要有一…

大语言模型带来的一些启发

仅代表个人看法,不喜勿喷。 The limits of my language means the limits of my world. (Ludwig Wittgenstein) 我的语言的极限意味着我的世界的极限。——维特根斯坦 大语言模型解决的不仅是处理文本相关问题,它带来的是人对世界的理解,或者…

安装Ubuntu双系统

本文为自己安装记录回顾用 1、下载想要安装的 Ubuntu 系统 https://ubuntu.com/download/desktop 2、制作U盘启动盘,并在win10的 磁盘管理 中为Ubuntu腾出磁盘空间 插上U盘,打开制U盘启动盘的软件 ,选择要烧录的U盘以及系统镜像文件&#xff…

正则表达式-运算符优先级和匹配规则

文章目录一、正则表达式-运算符优先级二、正则表达式-匹配规则总结一、正则表达式-运算符优先级 正则表达式 - 运算符优先级 正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。 相同优先级的从左到右进行运算,不同优先…