就业班 第三阶段(redis) 2401--5.7 day2 redis2 哨兵(前提是做好了主从)+redis集群

news2024/11/28 10:58:23

1、设置密码(redis)

先在redis.conf里面找到这个 后面写上要设置的密码即可

image-20240507164952423

image-20240507164900145

2、哨兵模式

监控redis集群中master状态的的工具

在做了主从的前提下

主 从1 从2

作用

1):Master状态检测
2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof/replicaof的配置,sentinel.conf的监控目标会随之调换

怎么做

redis-sentinel—哨兵模式**

1、哨兵简介:Redis Sentinel

Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中是Redis官方推荐的高可用性(HA)解决方案。

2、作用

1):Master状态检测
2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof/replicaof的配置,sentinel.conf的监控目标会随之调换

3、工作模式

1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令

2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。

3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。

4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线

4、主观下线和客观下线

主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。
客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover

5、配置哨兵模式
1.每台机器上修改redis主配置文件redis.conf文件设置:bind 0.0.0.0   ---已经操作
2.每台机器上修改sentinel.conf配置文件:修改如下配置
[root@redis-master src]# cd ..
[root@redis-master redis]# vim sentinel.conf
sentinel monitor mymaster 10.0.0.137 6379 2 #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
sentinel down-after-milliseconds mymaster 3000   #单位毫秒
sentinel failover-timeout mymaster 10000   #若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。
protected-mode no  #关闭加密模式--新添加到sentinel配置文件中
3.每台机器启动哨兵服务:
[root@redis-master redis]# ./src/redis-sentinel sentinel.conf
注意:在生产环境下将哨兵模式启动放到后台执行:     ./src/redis-sentinel sentinel.conf &

1564310139143

将master的哨兵模式退出,再将redis服务stop了,在两台slave上面查看其中一台是否切换为master:(没有优先级,为随机切换)

^C4854:signal-handler (1564349039) Received SIGINT scheduling shutdown...
4854:X 29 Jul 05:23:59.592 # User requested shutdown...
4854:X 29 Jul 05:23:59.592 # Sentinel is now ready to exit, bye bye...
[root@redis-master redis]# systemctl stop redis.service

在slave机器上面查看:

1564320905579

1564320763210

slave-2

1564321001791

登陆slave服务器查看有没有切换

1564321176290

登陆master机器查看:

1564321206728

如果要给哨兵设置密码

三个都要设置一样的密码,不然会启动不起来

做集群

在做好集群之后,不添加 -c get name 就会失败

-c 创建集群

image-20240507192638994

gcc-c++ = g++ 能更好的编译c++程序

2.1 创建节点目录

创建一个新目录以及redis实例已端口号命名的以下目录

可以用一台机器做六个实例也可以分三台机器,

[root@redis-cluster module]# mkdir redis-Cluster
[root@redis-cluster module]# cd redis-Cluster
[root@redis-cluster redis-Cluster]# mkdir 7000 7001 7002 7003 7004 7005

2.2 创建配置文件

每个节点目录中创建一个文件redis.conf,从7000到7005.作为配置文件的模板,以下是最小的Redis群集配置文件,每个节点实例配置稍作修改

我们只需要修改一个节点,然后把其他节点的利用正则修改端口即可

[root@redis-cluster redis-Cluster]# cd 7000
[root@redis-cluster 7000]# vi redis.conf
port 7000                       #端口7000,7001,7002,7003,7004,7005
cluster-enabled yes             #开启集群
cluster-config-file nodes.conf  #集群配置信息,开启集群后自动生成
cluster-node-timeout 5000       #请求超时时长 
appendonly yes                  #开启aof日志,它会每次写操作都记录一条日志
daemonize yes                   #redis后台运行
bind 192.168.100.21             #默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群  
pidfile  /opt/module/redis-Cluster/7000/redis_7000.pid     #pidfile文件对应7000,7001,7002,7003,7004,7005 
dir  /opt/module/redis-Cluster/7000/    #数据文件存放位置对应7000,7001,7002,7003,7004,7005

sed -i "s/7000/70001/g" 跟上文件

2.3 启动节点服务

分别启动6个实例,可执行文件redis-server用之前单机版的,已配过环境变量

[root@redis-cluster redis-Cluster]# redis-server 7000/redis.conf
[root@redis-cluster redis-Cluster]# redis-server 7001/redis.conf
[root@redis-cluster redis-Cluster]# redis-server 7002/redis.conf
[root@redis-cluster redis-Cluster]# redis-server 7003/redis.conf
[root@redis-cluster redis-Cluster]# redis-server 7004/redis.conf
[root@redis-cluster redis-Cluster]# redis-server 7005/redis.conf

6台实例运行起来后,查看进程,下一步创建集群

[root@redis-cluster redis-Cluster]# ps -ef |grep redis 
root       9240      1  0 18:11 ?        00:00:00 redis-server 192.168.100.21:7000 [cluster]
root       9245      1  0 18:11 ?        00:00:01 redis-server 192.168.100.21:7001 [cluster]
root       9265      1  0 18:14 ?        00:00:00 redis-server 192.168.100.21:7002 [cluster]
root       9270      1  0 18:14 ?        00:00:00 redis-server 192.168.100.21:7003 [cluster]
root       9275      1  0 18:14 ?        00:00:00 redis-server 192.168.100.21:7004 [cluster]
root       9280      1  0 18:14 ?        00:00:00 redis-server 192.168.100.21:7005 [cluster]

2.4 创建集群

redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

image-20240507192454610

2.5 添加主从

添加主(可以在任意一个节点)

/redis-Cluster/7004/src redis-cli -p 7004 cluster meet 192.168.91.137 8001

/redis-Cluster/7004/src redis-cli -p 7004 cluster nodes (查询主是否添加成功)

添加从

在添加主的节点执行,先添加

redis-cli -p 7001 cluster meet 127.0.0.1 7008

这个从在从的那个节点配置

redis-cli -p 7008 cluster replicate 6fa23f41cb41d37dbd1c81de633ffbe744f8432b

查看自己的节点

/redis-Cluster/8002/src/redis-cli -c -p 8002 cluster nodes

2.6 分配槽位(自动)

8、自动分配槽位

在新的节点机器里面执行

[root@192.168.91.137 ~]# /redis-Cluster/8002/src/redis-cli --cluster rebalance  --cluster-threshold 1 --cluster-use-empty-masters 192.168.91.150:7000

后面的7000是最开始的节点,0-5460 他就会从其他三个master拿一部分给这个新的master

查询

./redis-cli -p 7004 cluster nodes

注意:

​ 可以坏掉任意几个主或几个从,但是不能坏掉一对主从,这样集群就会崩掉。


后面的7000是最开始的节点,0-5460 他就会从其他三个master拿一部分给这个新的master

查询

 ./redis-cli -p 7004 cluster nodes



注意:

​		可以坏掉任意几个主或几个从,但是不能坏掉一对主从,这样集群就会崩掉。


# 面试
```shell
redis有哪些好处
(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
(2) 支持丰富数据类型,支持string,list,set,sorted set,hash
(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
redis相比memcached有哪些优势
(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) redis可以持久化其数据
redis常见性能问题和解决方案
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
(5) 主从复制不要用树状结构,用单向链表结构更为稳定,即:Master(写) <- Slave1(读) <- Slave2(读) <- Slave3(读)...
这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
redis集群的工作原理
主多从+哨兵模式(keelalived)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1650227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【busybox记录】【shell指令】uniq

目录 内容来源&#xff1a; 【GUN】【uniq】指令介绍 【busybox】【uniq】指令介绍 【linux】【uniq】指令介绍 使用示例&#xff1a; 去除重复行 - 默认输出 去除重复行 - 跳过第n段&#xff08;空格隔开&#xff09;&#xff0c;比较n1以后的内容&#xff0c;去重 去…

RT-DETR-20240507周更说明|更新Inner-IoU、Focal-IoU、Focaler-IoU等数十种IoU计算方式

RT-DETR改进专栏|包含主干、模块、注意力、损失函数等改进 专栏介绍 本专栏包含模块、卷积、检测头、损失等深度学习前沿改进,目前已有改进点70&#xff01;每周更新。 20240507更新说明&#xff1a; ⭐⭐ 更新CIoU、DIoU、MDPIoU、GIoU、EIoU、SIoU、ShapeIou、PowerfulIoU、…

【C/C++】设计模式——单例模式

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

【从零开始学习Minio | 第一篇】快速介绍什么是Minio

前言&#xff1a; 在当今数字化时代&#xff0c;数据的存储和管理已经成为了企业发展中的关键一环。随着数据量的不断增长和数据安全性的日益受到重视&#xff0c;传统的数据存储解决方案往往面临着诸多挑战。为了应对这些挑战&#xff0c;云存储技术应运而生&#xff0c;并在…

【漏洞复现】CData API Server 路径遍历漏洞(CVE-2024-31849)

0x01 产品简介 CData API Server是CData公司的一个强大的数据连接平台&#xff0c;旨在帮助企业轻松地访问、整合和分析各种数据源。 0x02 漏洞概述 CData API Server 23.4.8846之前版本存在安全漏洞&#xff0c;该漏洞源于存在路径遍历漏洞。攻击者可利用该漏洞获得对应用程…

如何用TONGYILingma进行AI辅助编程?

通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;并针对阿里云的云服务使用场景调优&#xff0c…

[Maven]IDEA报错-xxx is referencing itself

在IDEA中&#xff0c;执行 mvn clean时报错xxx is referencing itself。 解决方案&#xff1a;https://stackoverflow.com/questions/64246267/maven-error-using-intellij-is-referencing-itself 具体做法&#xff1a;采用上图第二条&#xff0c;将父模块pom文件中的对子模块…

《十八》QThread多线程组件

本章将重点介绍如何运用QThread组件实现多线程功能。 多线程技术在程序开发中尤为常用&#xff0c;Qt框架中提供了QThread库来实现多线程功能。当你需要使用QThread时&#xff0c;需包含QThread模块&#xff0c;以下是QThread类的一些主要成员函数和槽函数。 成员函数/槽函数 …

Skywalking数据持久化与自定义链路追踪

学习本篇文章之前首先要了解一下Sky walking的基础知识 分布式链路追踪工具Skywalking详解 一&#xff0c;Sky walking数据持久化 Sky walking提供了es&#xff0c;MySQL等数据持久化方案&#xff0c;默认使用h2基于内存的数据库&#xff0c;重启之后数据即会丢失。 在实际工…

streamlit通过子目录访问

运行命令&#xff1a; streamlit hello 系统默认使用8501端口启动服务&#xff1a; 如果想通过子目录访问服务&#xff0c;可以这么启动服务 streamlit hello --server.baseUrlPath "app" 也可以通过以下命令换端口 streamlit hello --server.port 9999 参考&…

【每日刷题】Day33

【每日刷题】Day33 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 2. 445. 两数相加 II - 力扣&#xff08;…

error code [1449]; The user specified as a definer (‘root‘@‘%‘) does not exist

其实就是说我的root用户权限不够&#xff0c;那就要加上权限&#xff0c;网上其他地方也有好多处理办法&#xff0c;但是要注意数据库版本。我用的是MySQL8.0.32版本&#xff0c;我是这样处理的&#xff0c;简单可行&#xff1a; GRANT ALL ON *.* TO root% ;FLUSH PRIVILEGES…

关系型数据库MySQL开发要点之多表设计案例详解代码实现

什么是多表设计 项目开发中 在进行数据库表结构设计时 根据数据模型和业务关系 会根据业务需求和业务模块之间的关系分析设计表结构 由于业务之间互相关联 所以表结构之间也存在着各种联系 主要分为以下三种 一对多 每个部门下是有多个员工的 但是一个员工只能归属一个部…

Penpad再获 Presto Labs 投资,Scroll 生态持续扩张

​Penpad 是 Scroll 生态的 LaunchPad 平台&#xff0c;其整计划像收益聚合器以及 RWA 等功能于一体的综合性 Web3 平台拓展&#xff0c;该平台在近期频获资本市场关注&#xff0c;并获得了多个知名投资者/投资机构的支持。 截止到本文发布前&#xff0c;Penpad 已经获得了包括…

Excel数据分析之动态图表

在日常办公中&#xff0c;可以用透视表和切片器的组合方式&#xff0c;制作动态图&#xff0c;以直观的方式展示年度、季度&#xff0c;和不同区域的销售额。 通过结合使用这两个工具&#xff0c;您可以创建动态图表&#xff0c;可根据您的选择实时更新。这对于快速了解数据并…

【busybox记录】【shell指令】comm

目录 内容来源&#xff1a; 【GUN】【comm】指令介绍 【busybox】【comm】指令介绍 【linux】【comm】指令介绍 使用示例&#xff1a; 逐行比较两个排序后的文件 - 默认输出 逐行比较两个排序后的文件 - 如果一个文件的排序有问题&#xff0c;那么反错&#xff08;默认&…

IDEA中向Data Sources导入sql文件

IDEA中向Data Sources导入sql文件 开篇 在学习黑马的课程时&#xff0c;时常需要向数据库中导入sql文件生成数据库表&#xff0c;每次都会忘记导入步骤&#xff0c;折腾许久&#xff0c;于是将过程记录下来。 步骤 在Database中选择你要导入的数据库源&#xff0c;如图我想…

QT--1

类型界面 #include "mywidget.h"myWidget::myWidget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(680,520);this->setFixedSize(680,520);this->setWindowTitle("Tim");this->setWindowFlag(Qt::FramelessWindowHint);th…

【牛客】【模板】差分

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 差分模板。 b[0]a[0]; b[1]a[1]-a[0]; b[2]a[2]-a[1]; ...... b[n-1]a[n-1]-a[n-2]; b[n]a[n]-a[n-1]; 差分标记&#xff1a;b[l]k,b…

数组折半法查找数据(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> //定义数据&#xff1b; #define N 15int main() {//初始化变量值&#xff1b;int a[N], i, top, bott, loca, flag 1, sign, numb…