redis的集群模式与ELK基础

一、redis的集群模式

1.主从复制

(1)概述

        主从模式:这是redis高可用的基础,哨兵和集群都是建立在此基础之上。

        主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从服务器,但是从节点只能读不能写(read only)

(2)工作过程

  1. 当配置完整之后,从节点启动,会向主节点发送一个sync command,请求同步连接
  2. master都会开启一个后台的进程将主节点的数据保存到数据文件中
  3. 主节点把数据同步给从节点从节点先把数据保存到硬盘,再加载到内存

(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)工作过程

  1. 主从之间,互相有一个心跳的检测
  2. 当主节点宕机,从节点都会收到主的宕机的信息
  3. 两个从节点,自动进行投票,选择一个新的主
  4. 从节点会自动加入新主的主从模式。

 (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.工作过程 

  1. logstash收集日志数据
  2. 收集到的数据按照es的格式,发送到数据库
  3. 在图像界面展示-->kibana
  4. 客户端访问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 elasticsearch  

tail -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: log

  enabled: 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: nginx

    from: 192.168.206.40


filebeat.inputs:

- type: log

  enabled: true

  paths:
     - /usr/local/mysql/data/mysql_general.log

  tags: ["mysql"]

  fields:
    service_name: 192.168.206.40_mysql

    log_type: mysql
    from: 192.168.206.40

seccomp:

  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:指定配置文件

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

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

相关文章

一套比较简单的仓储系统

自己编写的一套比较简单的仓储系统,多仓库,入库、出库、明细、统计等相关功能 基于偌依的单体架构:springbootvueuniapp 后端:https://download.csdn.net/download/qq_30641447/90214834 前端:https://download.csdn…

网络IP协议

IP(Internet Protocol,网际协议)是TCP/IP协议族中重要的协议,主要负责将数据包发送给目标主机。IP相当于OSI(图1)的第三层网络层。网络层的主要作用是失陷终端节点之间的通信。这种终端节点之间的通信也叫点…

设计模式 创建型 原型模式(Prototype Pattern)与 常见技术框架应用 解析

原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想在于通过复制现有的对象(原型)来创建新的对象,而非通过传统的构造函数或类实例化方式。这种方式在需要快速创建大量相似对象时尤为高效&#x…

MySQL(二)MySQL DDL数据库定义语言

1. MySQL DDL数据库定义语言 1.1. MySQL定义语言 进入MySQL mysql -u root -p(回车后输入密码,即可进入mysq1)1.1.1. 数据库操作 (1)查看数据库 mysql>show databases;注:MySQL语句分隔符为“;”   mysql库很重要它里面有…

前端页面上传文件:解决 ERR_UPLOAD_FILE_CHANGED

文章目录 引言I 问题 ERR_UPLOAD_FILE_CHANGED问题重现步骤原因II 解决方法将文件转换为base64再转回file检测文件内容是否发生变更III 知识扩展发送一个包含文件和文本的multipart/form-data请求签名优化引言 文件上传应用场景:船舶设备的新增导入(基础信息:出厂编号)船舶…

学术写作中的各种流程图如何利用Kimi进行辅助构建?

目录 1.学术论文中的流程图 2.一些小实践 3.论文中严谨的实践流程 近期小编在思考使用AI工具制作流程图和思维导图,结果发现Kimi现在支持流程图了,Kimi在学术写作中的应用变得更加广泛和深入。随着AIGC技术的不断进步,Kimi的功能将更加强大…

竞品分析对于ASO优化的重要性

产品要想在拥有上千万款App的App Store中脱颖而出的话,要有绝对优势和运营方案,才有可能获得用户的关注。我们要分析和自身产品相似的功能,了解用户获取的途径等,从中获取对竞品有利的因素,明确自身产品的增加和优化方…

什么是485专用屏蔽线

文章目录 一,485屏蔽线基本概念二,485屏蔽线结构及工作原理1、结构2、工作原理三,485屏蔽线的应用一,485屏蔽线基本概念 485屏蔽线,顾名思义,是一种应用于RS-485通信系统的屏蔽线缆。RS_485是一种常用的有线通信协议,具有长距离、高速率、低成本等优点,广泛应用于工业自…

JavaScript BOMDOM

BOM window、document、location、navigator 和 screen等,把它们统称为BOM(Browser Object Model,浏览器对象模型) window对象 window对象位于BOM的顶层。由浏览器创建,也对应JavaScript本地对象Global &#xff1…

nginx高可用集群搭建

本文介绍nginx高可用集群的搭建。利用keepalived实时检查nginx进程是否存活、keepalived的虚拟ip技术,达到故障转移的目的。终端用户通过访问虚拟ip,感知不到实际发生的故障。架构图如下: 0、环境 Ubuntu:22.04.2 ltsnginx: 1.…

【开源】创建自动签到系统—QD框架

1. 介绍 QD是一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。 主要通过抓包获取到HAR来制作任务模板,从而实现异步响应和发起HTTP请求 2. 需要环境 2.1 硬件需求 CPU:至少1核 内存:推荐 ≥ 1G 硬盘:推…

【数据结构Ⅰ复习题】

如有错误欢迎指正,题目根据教材----------严蔚敏数据结构(c语言版 第2版)人民邮电电子版 数据结构Ⅰ复习题 一、填空题1.算法应该具备的5个重要特性有___有穷性___、确定性、可行性、输入和输出。2.非空单链表L中*p是头…

python爬虫--小白篇【selenium自动爬取文件】

一、问题描述 在学习或工作中需要爬取文件资源时,由于文件数量太多,手动单个下载文件效率低,操作麻烦,采用selenium框架自动爬取文件数据是不二选择。如需要爬取下面网站中包含的全部pdf文件,并将其转为Markdown格式。…

Edge Scdn的应用场景有哪些?

酷盾安全Edge Scdn 具备强大的安全防护能力,通过多层防御机制,如防火墙、DDoS 攻击防护、入侵检测和防御、数据加密等,有效抵御各种网络攻击,包括 DDoS 攻击、CC 攻击、SQL 注入攻击、XSS 跨站脚本攻击等,保障网站和应…

TCPDump参数详解及示例

TCPDump参数详解及示例 TCPDump参数详解TCPDump -G的示例TCPDump -i any -s 2048 -G 600 -p udp -Z root -n -X -tt -w %Y_%m%d_%H%M_%S.pcap &的含义TCPDump是一款强大的网络数据包截获分析工具,可以将网络中传送的数据包的完全截获下来提供分析。它支持针对网络层、协议…

Vue2: table加载树形数据的踩坑记录

table中需要加载树形数据,如图: 官网给了两个例子,且每个例子中的tree-props都是这么写的: :tree-props="{children: children, hasChildren: hasChildren}" 给我一种错觉,以为数据结构中要同时指定children和hasChildren字段,然而,在非懒加载模式下,数据结…

SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)

一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…

问题清除指南|关于num_classes与 BCELoss、BCEWithLogitsLoss 和 CrossEntropyLoss 的关系

前言:关于「 num_classes 1 」引发的探究。 2024年尾声,学弟问到一个问题:在研究工作 CNNDetection 的github开源代码 networks/trainer.py 文件的 line 27 self.model resnet50(num_classes1) 中,变量 num_classes 的值为1&…

grouped.get_group((‘B‘, ‘A‘))选择分组

1. df.groupby([team, df.name.str[0]]) df.groupby([team, df.name.str[0]]) 这一部分代码表示对 DataFrame df 按照 两个条件 进行分组: 按照 team 列(即团队)。按照 name 列的 首字母(df.name.str[0])。 df.name.s…