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…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...

