redis的集群模式与ELK基础
一、redis的集群模式
1.主从复制
(1)概述
主从模式:这是redis高可用的基础,哨兵和集群都是建立在此基础之上。
主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从服务器,但是从节点只能读不能写(read only)
(2)工作过程

- 当配置完整之后,从节点启动,会向主节点发送一个sync command,请求同步连接
- master都会开启一个后台的进程将主节点的数据保存到数据文件中
- 主节点把数据同步给从节点从节点先把数据保存到硬盘,再加载到内存
(3)缺点
不能做高可用的切换,主节点出现故障,没有替换的主节点,所有的写入操作都将失败。
(4)实验
redis1 192.168.206.40 主
redis2 192.168.206.50 从1
redis3 192.168.206.55 从2
时间同步:
ntpdate ntp.aliyun.com
主从配置几乎一致
vim /etc/redis/redis.conf
55行 监听地址注释掉
87行 改成no
224行 daemonize yes #开启守护进程
1094行 appendonly yes
两台从服务器在第388行下添加:
replicaof 192.168.206.40 6379
systemctl restart redis
tail -f /var/log/redis/redis-server.log
#看见两台从服务器的同步信息
2.哨兵模式
(1)概述
在主从模式的基础之上,哨兵模式引入了故障切换的模式。
哨兵也是一个分布式的集群结构,对主从当中的每台服务器进行监控,当出现故障时,通过投票的机制选择一个新的master。被选举出的新的master会将所有的从节点重新连接到自己,从节点会自动同步到主,自动变成只读模式。
(2)工作过程

- 主从之间,互相有一个心跳的检测
- 当主节点宕机,从节点都会收到主的宕机的信息
- 两个从节点,自动进行投票,选择一个新的主
- 从节点会自动加入新主的主从模式。
(3)实验
#在配置哨兵模式的第一次的时候,人为的定义好主
三台操作一致:
apt -y install redis-sentinel
vim /etc/redis/sentinel.conf
16行注释掉
18行取消注释
27行 改成yes
142行 sentinel monitor mymaster 192.168.206.40 6379 2
#人工定义主的服务器
2的含义:当主节点发生故障,必须要有两个从节点同意,才能进行主节点的故障切换
#下面两条必须要写在定义主的下面
sentinel down-after-milliseconds mymaster 30000
#判断服务器宕机的时间周期是30000毫秒=30秒
sentinel failover-timeout mymaster 18000
#故障节点的最大超时时间18000=18秒
tail -f /var/log/redis/redis-sentinel.log #查看日志
systemctl stop redis#关闭40的redis,主会自动切换到50或者55,在40恢复工作后也会作为从加入到主上去

3.集群
(1)概述
redis-cluster: 集群是由多个节点组成,redis的数据分布在节点当中,集群的当中每个节点又分主和从
集群-->高可用,和主从复制不一样
(2)hash槽位
0-16383个hash槽位
A 0-5460
B 5461-10922
C 10923-16383
(3)工作过程

(4)实验
6台同步一起操作:
时间同步
vim /etc/redis/redis.conf
55行监听地址都注释掉
protected-mode no
224行 daemonize yes
1227行 cluster-enabled yes #开启集群
1235行 cluster-config-file nodes-6379.conf #设置集群的配置文件
1094行 appendonly yes
1241 cluster-node-timeout 15000 #设置集群的超时时间
redis-cli -h 192.168.206.40 --cluster create 192.168.206.40:6379 192.168.206.50:6379 192.168.206.55:6379 192.168.206.60:6379 192.168.206.70:6379 192.168.206.80:6379 --cluster-replicas 1
# --cluster-replicas 1: 表示每个主节点对应一个从节点
root@redis1:~# redis-cli -h 192.168.206.40 -p 6379
192 168 206 40:6379> set test10 10
(error) MOVED 9248 192.168.206.50:6379
#表示客户端尝试将这个数值保存到槽位号是9248的位置,实际槽位在50这个主机。
redis的集群模式,只是满足高可用,不能实现数据同步。对数据同步要求很高的场景,选择redis的主从和哨兵。
二、ELK:统一日志收集系统
1.组成
elasticsearch
- 分布式的全文索引引擎 非关系型数据库
- 存储所有的日志信息,主从(最少需要2台 )
logstash
- 动态的从各种指定的数据源获取数据,而且对书据进行过滤,分析
- 按照统一的格式发送到es
kibana
- 把es的数据进行展示,进行客户端可以理解的操作,汇总、分析和搜索数据的平台。
2.工作过程

- logstash收集日志数据
- 收集到的数据按照es的格式,发送到数据库
- 在图像界面展示-->kibana
- 客户端访问kibana
3.实验
nginx1 192.168.206.60 es1
nginx2 192.168.206.70 es2
nginx3 192.168.206.80 logstash kibana
安装es
dpkg -i elasticsearch-6.7.2.deb
free -h
echo 3 > /proc/sys/vm/drop_caches #内存太小,就清理一下vim /etc/ elasticsearch/elasticsearch.yml
grep -v "^#" elasticsearch.yml #检查修改的地方
cluster.name: my-elk
node.name: node-1 #两边的node不能一致 第二台的编号为2
node.master: true #该节点是否为主节点 第二台为false
node.data: true #表示该节点是否为数据节点,主从都要path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0 #修改服务的监听地址
http.port: 9200 #es对外提供的默认端口
transport.tcp.port: 9300 #指定es集群内部的通信接口
discovery.zen.ping.unicast.hosts: ["192.168.206.60:9300", "192.168.206.70:9300"]#集群节点通过单播的形式,通过9300端口实现内部通信
http.cors.enabled: true #开启跨域访问
http.cors.allow-origin: "*" #允许跨域访问的地址域名为所有
systemctl restart elasticsearchtail -f /var/log/syslog
netstat -antp | grep 9200
用浏览器测试


安装logstash和kibana
dpkg -i logstash-6.7.2.deb
systemctl restart logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ #创建软连接
dpkg -i kibana-6.7.2-amd64.deb
vim /etc/kibana/kibana.yml
grep -v "^#" kibana.yml
server.port: 5601 #监听端口
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.206.60:9200","http://192.168.206.70:9200"]
kibana.index: ".kibana" #索引
logging.dest: /var/log/kibana.log #日志位置
i18n.locale: "zh-CN" #支持中文touch /var/log/kibana.log
logstash -f system.conf --path.data /op& #后台运行

vim /etc/logstash/conf.d/system.conf
input {
file {
path=>"/var/log/syslog"#指定要收集的日志文件的路径
type=>"system"#自定义索引的标志类型
start_position=>"beginning"#表示从哪个位置开始收集日志,end
}
}output {
elasticsearch {
hosts => ["192.168.206.60:9200","192.168.206.70:9200"]#指定服务器ip地址和端口
index => "system-%{+YYYY.MM.dd}"#索引名称
}
}




4.filebeat
(1)概述
filebeat是一款轻量级的日志收集工具,不依赖于java环境,用来替代在机器上没有java环境的情况下进行日志收集。
filebeat启动收集日志,只要10M左右的内存。
工作过程

(2)实验
nginx1:192.168.206.60 es1
nginx2:192.168.206.70 es2
nginx3:192.168.206.80 logstash kibana
mysql1:192.168.206.40 filebeat
mysql1:
#打开mysql的日志
vim /etc/my.cnf
general_log=on
general_log_file=/usr/local/mysql/data/mysql_general.log
vim /etc/logstash/conf.d/test1.conf #新建test1.conf
input {
beats { port => "5044" }}
output {
if "nginx" in [tags] {elasticsearch {
hosts => ["192.168.206.60:9200","192.168.206.70:9200"]
index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
}
}
if "mysql" in [tags] {elasticsearch {
hosts => ["192.168.206.60:9200","192.168.206.70:9200"]
index => "%{[fields][service_name]}-{+YYYY.MM.dd}"
}
}
}
logstash -f test1.conf --path.data /opt/test2 &

tar -xf filebeat-6.7.2-linux-x86_64.tar.gz
mv filebeat-6.7.2-linux-x86_64 /usr/local/filebeat
cp filebeat.yml filebeat.yml.bak
vim filebeat.yml
filebeat.inputs:
- type: logenabled: true
paths:
- /usr/local/nginx/logs/access.log- /usr/local/nginx/logs/error.log
tags:["nginx"]
#标签,为了后续logstash进行识别的
fields:
service_name: 192.168.206.40_nginx
#设定显示的索引名称
log_type: nginxfrom: 192.168.206.40
filebeat.inputs:- type: log
enabled: true
paths:
- /usr/local/mysql/data/mysql_general.logtags: ["mysql"]
fields:
service_name: 192.168.206.40_mysqllog_type: mysql
from: 192.168.206.40seccomp:
default_action: allow
syscalls:
- action: allow
names:
- rseq
#157和159注释掉
#output.elasticsearch:
#hosts: ["localhost:9200"]
#177行
output.logstash:
#179行
hosts: ["192.168.206.80:5044"]
#logstash的端口,logstash的端口不一定是5044,理论上来说可以是任意端口,默认的logstash起始端口是5044,还可以是5045 5046 ...
./filebeat -e -c filebeat.yml
-e:输出的格式为标准输出
-c:指定配置文件


相关文章:
redis的集群模式与ELK基础
一、redis的集群模式 1.主从复制 (1)概述 主从模式:这是redis高可用的基础,哨兵和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从服务器ÿ…...
STM32-笔记18-呼吸灯
1、实验目的 使用定时器 4 通道 3 生成 PWM 波控制 LED1 ,实现呼吸灯效果。 频率:2kHz,PSC71,ARR499 利用定时器溢出公式 周期等于频率的倒数。故Tout 1/2KHZ;Ft 72MHZ PSC71(喜欢设置成Ft的倍数&…...
Vue3 + ElementPlus动态合并数据相同的单元格(超级详细版)
最近的新项目有个需求需要合并单元列表。ElementPlus 的 Table 提供了合并行或列的方法,可以参考一下https://element-plus.org/zh-CN/component/table.html 但项目中,后台数据返回格式和指定合并是动态且没有规律的,Element 的示例过于简单&…...
【JavaWeb后端学习笔记】MySQL的数据控制语言(Data Control Language,DCL)
MySQL DCL 1、管理用户2、控制权限 DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库访问权限。 1、管理用户 管理用户的操作都需要在MySQL自带的 mysql 数据库中进行。 -- 查询用户 -- 需要先切换到MyS…...
libvirt学习
文章目录 libvirt 简介节点、Hypervisor和域libvirt 安装和配置libvirt的XML配置文件libvirt APIMain libvirt APIsError handlingSpecial specific APIs 建立到Hypervisor的连接libvirt API使用编译libvirt工具virshvirt-clonevirt-dfvirt-imagevirt-installvirt-topvirt-what…...
STM32-笔记19-串口打印功能
复制项目文件夹03-流水灯,重命名为19-串口打印功能 打开项目 在主函数中,添加头文件、和串口初始化函数(设置波特率)和输出函数,如图所示: 软件部分就设置好了 下面是硬件部分 接线:使用USB…...
概率论与数理统计
概率论占比更多,三分之二左右 数理统计会少一些 事件之间的概率 ab互斥,不是ab独立 古典概型吃高中基础,考的不会很多 条件概率公式,要记 公式不要全记,很多有名称的公式是通过基础公式转换而来的 目的在于解决一…...
统信系统设置代理的问题
统信系统设置代理的问题 问题表现方式一方式二 问题表现 统信系统下有系统代理和应用代理两个代理。设置系统代理时,git不能经过代理拉取代码。但是设置应用代理时,可以用git通过代理拉代码。 这是系统代理,在这里设置 ip 端口,…...
TCP 为什么采用三次握手和四次挥手以及 TCP 和 UDP 的区别
1. TCP 为什么采用三次握手和四次挥手 采用三次握手的原因: 确认双方的收发能力。第一次握手,客户端发送 SYN 报文,告诉服务器自身具备发送数据的能力,第二次握手,服务器回应 SYN ACK 报文,表名自己既能…...
springboot配置并使用RestTemplate
目录 一、RestTemplate配置 1、将RestTemplate初始化为Bean 2、使用HttpClient作为RestTemplate客户端 (1)引入HttpClient依赖 (2)修改RestTemplate配置类 3、设置拦截器 (1)新增拦截器类 …...
人工智能-Python网络编程-TCP
1 TCP-概念版 服务端 import socket # 1 创建服务端套接字对象 # socket.AF_INET IPV4 # socket.SOCK_STREAM TCP # socket.SOCK_DGRAM UDP tcp_server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2 绑定端口号 tcp_server_socket.bind((192.…...
【Java回顾】Day3 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举
学习资料 菜鸟教程 https://www.runoob.com/java/java-interfaces.html 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举 继承 创建分等级层次的类,子类继承父类的特征、行为、方法 class 父类{ } class 子类 extends 父类{ super(); }一些性质 Java 不支持…...
SpringMVC(四)响应
目录 数据处理及跳转 1. 结果跳转方式 ①.ModelAndView ②.ServletAPI 1、通过HttpServletResponse进行输出 2、通过HttpServletResponse实现请求转发 3、通过HttpServletResponse实现重定向 ③.SpringMVC 1.直接输出 2.请求转发 3.重定向 2.ResponseBody响应json数…...
vim 的基础使用
目录 一:vim 介绍二:vim 特点三:vim 配置四:vim 使用1、vim 语法格式2、vim 普通模式(1)保存退出(2)光标跳转(3)文本删除(4)文本查找&…...
关于flinkCDC监控mysql binlog时,datetime类型自动转换成时间戳类型问题
flinkCDC监控mysql binlog时,datetime类型自动转换成时间戳类型 问题解决1.自定义转换器类2.代码引用 结果 问题 flink版本:1.18.1,mysql版本:8.0.40 使用FlinkCDC的MySqlSource 连接mysql,对于datetime 类型字段&…...
基于Springboot校园失物招领系统【附源码】
基于Springboot校园失物招领系统 效果如下: 系统登陆页面 物品页面 系统首页面 失物招领管理页面 失物认领页面 宣传视频页面 物品挂失留言管理页面 宣传视频类型管理页面 研究背景 在校园环境中,失物招领是一个常见的问题。传统的失物招领方式主要依…...
单片机端口操作和独立引脚操作
单片机端口操作和独立引脚操作 在单片机编程中,控制I/O端口是最基础的操作之一。通过控制端口,我们可以实现对外设(如LED、按键、继电器等)的控制。在51单片机中,有两种常见的端口操作方式:整体控制&#…...
【Vim Masterclass 笔记03】S03L10 + S03L11:Vim 中的文本删除操作以及 Vim 思维习惯的培养(含 DIY 拓展知识点)
文章目录 Section 3:Vim Essentials(Vim 核心知识)S03L10 Vim 核心浏览命令同步练习点评课S03L11 Deleting Text and "Thinking in Vim" 文本的删除及 Vim 思维习惯的培养1 删除单个字符2 删除一个单词2.1 推广1:D HJK…...
ARM200~500部署
前提:数据库已经安装好,并且正常运行 1.修改hostname,将里面的AR-A 改为hzx vi /etc/hostname 2.重启网络服务 sudo systemctl restart NetworkManager 3.修改community-admin.service 文件,更改小区名称和IP,并将文件上传到/…...
word中插入zotero引用
1、参考文献末尾没有文献? 在文献条目要显示的地方点击“refresh” 2、参考文献条目没有悬挂缩进? 把“书目”添加到样式库中,修改样式为悬挂缩进1.5字符 3、交叉引用? 宏 新建一个宏 粘贴下面代码 Public Sub ZoteroLinkCita…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

