当前位置: 首页 > news >正文

电商网站建设实训(互联网营销大赛)wordpress 修改文字

电商网站建设实训(互联网营销大赛),wordpress 修改文字,来宾网站制作,一个公司的管理流程文章目录 ELK概述ELK主要特点ELK应用架构 Elasticsearch原理JSON格式倒排索引 ES与关系型数据库ES相关概念ES安装说明1.环境初始化2.优化系统资源限制配置3.编辑ES服务文件elasticsearch. yml 优化ELK集群安装脚本scp的使用集群安装成功 Shell命令API使用创建索引创建Type创建分… 文章目录 ELK概述ELK主要特点ELK应用架构 Elasticsearch原理JSON格式倒排索引 ES与关系型数据库ES相关概念ES安装说明1.环境初始化2.优化系统资源限制配置3.编辑ES服务文件elasticsearch. yml 优化ELK集群安装脚本scp的使用集群安装成功 Shell命令API使用创建索引创建Type创建分片和副本查询数据 ES插件elasticsearch-headCerebro ES集群工作原理节点分类Master节点Data节点Coordinating节点(协调) 集群选举集群分片和副本分片Shard副本Replication ES集群故障转移ES集群的故障转移流程如下0.宕掉node-3节点1.重新选举2.主分片调整3.副本分片调整4.恢复node-3节点 ES文档路由1.ES文档路由原理2.ES文档创建流程3.ES文档读取流程 Beats收集数据利用Filebeat收集日志安装Filebeat输入和输出Ubuntu安装 案例1从标准输入读取再输出至标准输出案例2从标准输入读取再输出至Json格式的文件案例3从文件读取再输出至标准输出案例4将nginx的访问日志输出至标准输出案例5利用filebeat收集Nginx访问日志到ES中 Filebeat收集Nginx Json格式日志1.配置nginx访问日志为Json格式2.指定access_log输出为我们自定义的json格式3.重启Nginx服务4.修改filebeat.yml通过Kibana查看收集的日志信息 LogstashKibana安装kibanaUbuntu安装 ELK概述 ELK是由elastic的三个开源项目( Elasticsearch、Logstash和Kibana)的首字母缩写三个项目各有不同的功能。后来elastic又增加了许多新项目于是从5.X版本后改名为Elastic Stack。 Elastic Stack是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将Elastic Stack称为ELK Stack(代指Elasticsearch、Logstash和Kibana)目前Elastic Stack包括一系列丰富的轻量型数据采集代理这些代理统称为Beats可用来向Elasticsearch 发送数据。 官方帮助手册https://www.elastic.co/cn/elastic-stack/ Elasticsearch是一个实时的全文搜索,存储库和分析引擎。Logstash是服务器端数据处理的管道能够同时从多个来源采集数据转换数据然后将数据发送到Elasticsearch存储库中。Logstash将收集过来的数据做转换做过滤比如转换成json格式我们需要在Logstash上定义转换逻辑和转换策略。Kibana则可以让用户在Elasticsearch中使用图形和图表对数据进行可视化。ELK下载https://www.elastic.co/cn/downloads/ ELK权威指南https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html ELK主要特点 ELK的主要特点1.功能强大: Elasticsearch是实时全文索引具有强大的搜索功能。2.配置相对简单: Elasticsearch 全部其于JSON,Logstash使用模块化配置Kibana的配置都比较简单。3.检索性能高效: 基于优秀的设计每次查询可以实时响应即使百亿级数据的查询也能达到秒级响应。4.集群线性扩展: Elasticsearch和Logstash都可以灵活线性扩展前端操作方便:Kibana提供了比较美观UI前端操作也比较简单。ELK主要组件 ELK主要组件1.Elasticsearch 管理2.Beats 实现日志收集3.Logstash 实现日志过滤转换4.Kibana 实现图形化展示ELK应用架构 基于Filebeat的ELK集群架构 Elasticsearch Elasticsearch是一个分布式的免费开源搜索和分析引擎适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch在Apache Lucene的基础上开发而成由Elasticsearch N.V.(即现在的Elastic)于2010年首次发布。Elasticsearch以其简单的REST风格API、分布式特性、速度和可扩展性而闻名是Elastic Stack的核心组件。 Elasticsearch支持数据的实时全文搜索、支持分布式和高可用、提供API接口可以处理大规模的各种日志数据的处理比如: Nginx、Tomcat、系统日志等功能。 Elasticsearch基于Java语言开发利用全文搜索引擎Apache Lucene 实现。 原理 原始数据会从多个来源包括日志、系统指标和网络应用程序输入到Elasticsearch中。数据采集指在Elasticsearch中进行索引之前解析、标准化并充实这些原始数据的过程。这些数据在Elasticsearch中索引完成之后用户便可针对他们的数据运行复杂的查询并使用聚合来检索自身数据的复杂汇总。在Kibana中用户可以基于自己的数据创建强大的可视化分享仪表板并对Elastic Stack进行管理。 JSON格式 Elasticsearch索引指相互关联的文档集合Elasticsearch 会以JSON文档的形式存储数据。每个文档都会在一组键字段或属性的名称和它们对应的值(字符串、数字、布尔值、日期、数组、地理位置或其他类型的数据之间建立联系。 倒排索引 Elasticsearch使用的是一种名为倒排索引的数据结构这一结构的设计可以十分快速地进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇并且可以找到包含每个词汇的全部文档。在索引过程中Elasticsearch 会存储文档并构建倒排索引这样用户便可以近实时地对文档数据进行搜索。索引过程是在索引API中启动的通过此API既可向特定索引中添加JSON文档也可更改特定索引中的JSON文档。 ES与关系型数据库 ES相关概念 ● Near Realtime近实时Elasticsearch是一个近乎实时的搜索平台这意味着从索引文档到可搜索文档之间只有一个轻微的延迟(通常是一秒钟)。 ● Cluster集群群集是一个或多个节点的集合它们一起保存整个数据并提供跨所有节点的联合索引和搜索功能。每个集群都有自己的唯一集群名称节点通过名称加入集群。 ● Node节点节点是指属于集群的单个Elasticsearch实例存储数据并参与集群的索引和搜索功能。可以将节点配置为按集群名称加入特定集群默认情况下每个节点都设置为加入一个名为elasticsearch的群集。 ● Index索引索引是一些具有相似特征的文档集合类似于MySql中数据库的概念。 ● Type类型类型是索引的逻辑类别分区通常为具有一组公共字段的文档类型类似MySql中表的概念。注意在Elasticsearch 6.0.0及更高的版本中一个索引只能包含一个类型。 ● Document文档文档是可被索引的基本信息单位以JSON形式表示类似于MySql中行记录的概念。 ● Shards分片当索引存储大量数据时可能会超出单个节点的硬件限制为了解决这个问题Elasticsearch提供了将索引细分为分片的概念。分片机制赋予了索引水平扩容的能力、并允许跨分片分发和并行化操作从而提高性能和吞吐量。 ● Replicas副本在可能出现故障的网络环境中需要有一个故障切换机制Elasticsearch提供了将索引的分片复制为一个或多个副本的功能副本在某些节点失效的情况下提供高可用性。 ES安装说明 官方文档https://www.elastic.co/guide/en/elastic-stack/index.html ES系统版本和JAVA版本说明 官方文档https://www.elastic.co/cn/support/matrix 1.环境初始化 CPU 2C 内存4G或更多 操作系统:ubuntu20.04, ubuntu18.04, Rocky8.x, centos7.x操作系统盘50G 主机名设置规则为es-nodeX 生产环境建议准备单独的数据磁盘1.1集群中各个服务器配置自己的主机名 [rootubuntu2004 ~]# hostnamectl set-hostname es-node1我有3个主机es-node1、es-node2、es-node3 1.2关闭防火墙和SElinux rootes-node1:~# systemctl disable ufw Synchronizing state of ufw.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install disable ufw Removed /etc/systemd/system/multi-user.target.wants/ufw.service.sed -i /SELINUX/s/enforcing/disabled/ /etc/selinux/config1.3配置本地域名解析 rootes-node1:~# vim /etc/hosts 192.168.10.145 es-node1.lei.org 192.168.10.146 es-node2.lei.org 192.168.10.147 es-node3.lei.org2.优化系统资源限制配置 内核参数vm.max_map_count用于限制一个进程可以拥有的VMA(虚拟内存区域)的数量使用默认系统配置二进制安装时会提示下面错误包安装会自动修改此配置。 默认值很小不调大会导致ES起不来。 2.1修改vm.max_map_count配置 基于二进制包的安装会自动修改为262144 查看默认配置 rootes-node3:~# sysctl -a |grep vm.max_map_count vm.max_map_count 65530[rootes-node1 ~]#echo vm.max_map_count 262144 /etc/sysctl.conf [rootes-node1 ~]#sysctl -p vm.max_map_count 2621442.3查看fs.file-max的默认值 [rootes-node1 ~]#echo fs.file-max 需要修改的值 /etc/sysctl.conf2.3limits.conf vim /etc/security/limits.conf * soft core unlimited * hard core unlimited * soft nproc 1000000 * hard nproc 1000000 * soft nofile 1000000 * hard nofile 1000000 * soft mem1ock 32000 * hard memlock 32000 * soft msgqueue 8192000 * hard msgqueue 81920003.编辑ES服务文件elasticsearch. yml 官方参考文档 https://www.elastic.co/guide/en/elasticsearch/reference/index.html https://www.elastic.co/guide/en/elasticsearch/reference/master/settings.html https://www.elastic.co/guide/en/elasticsearch/reference/master/important-settings.html [rootes-node1 ~]# grep ^[a-Z] /etc/elasticsearch/elasticsearch.yml#ELK集群名称同一个集群内每个节点的此项必须相同,新加集群的节点此项和其它节点相同即可加入集群,而无需再验证 cluster.name: ELK-Cluster#当前节点在集群内的节点名称同一集群中每个节点要确保此名称唯一 node.name: es-node1#ES数据保存目录 path.data: /data/es-data#ES日志保存目录 path.1ogs: /data/es-logs#服务启动的时候立即分配(锁定)足够的内存防止数据写入swap ,提高启动速度 bootstrap.memory_lock: true#指定监听IP如果绑定了错误的IP可将此修改为指定IP network.host: 0.0.0.0#监听端口 http.port: 9200#发现集群的node节点列表可以添加部分或全部节点IP#在新增节点到集群时,此处需指定至少一个已经在集群中的节点地址 discovery.seed_hosts: [192.168.10.145, 192.168.10.146, 192.168.10.147]#集群初始化时指定希望哪些节点可以被选举为master,只在初始化时使用,新加节点到已有集群时此项可不配置 cluster.initial_master_nodes: [192.168.10.145, 192.168.10.146, 192.168.10.147]#一个集群中的N个节点启动后,才允许进行数据恢复处理默认是1一般设为为所有节点的一半以上,防止出现脑裂现象 #当集群无法启动时,可以将之修改为1,或者将下面行注释掉,实现快速恢复启动 gateway.recover_after_nodes: 2#设置是否可以通过正则表达式或者_all匹配索引库进行删除或者关闭索引库默认true表示必须需要明确指定索引库名称不能使用正则表达式和_all生产环境建议设置为true防止误删索引库。 action.destructive_requires_name: true#不参与主节点选举 node.master: false#存储数据,此值为fa1se则不存储数据而成为一个路由节点 #如果将true改为false ,需要先执行/usr/share/elasticsearch/bin/elasticsearch-noderepurpose清理数据 node.data: true单节点配置 [rootubuntu2004 ~]#grep -v # /etc/elasticsearch/elasticsearch.yml path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch node.name: node-1 network.host: 0.0.0.0 discovery.seed_hosts: [10.0.0.100] cluster.initial_master_nodes: [node-1]集群配置 [rootes-node1 ~]#grep -Ev ^$|# /etc/elasticsearch/elasticsearch.yml cluster.name: es-cluster node.name: es-node1 #集群中只需要修改此行每个节点都不能相同 path.data: /data/es-data path.1ogs: /data/es-logs bootstrap.memory_1ock: truenetwork.host: 0.0.0.0 discovery.seed_hosts: [10.0.0.101, 10.0.0.102, 10.0.0.103] cluster.initia1_master_nodes: [10.0.0.101, 10.0.0.102,10.0.0.103] gateway.recover_after_nodes: 2 action.destructive_requires_name: true[rootes-node1 ~]#scp /etc/elasticsearch/elasticsearch.yml es-node2: /etc/elasticsearch/ [rootes-node1 ~]#scp /etc/elasticsearch/elasticsearch.yml es-node3: /etc/e1asticsearch/开启bootstrap.memory_lock: true后如果内存不够的话会导致无法启动的错误。 官方解决错误的文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/setting-system-settings.html#systemd [rootnode1 ~]#systemctl edit elasticsearch[service] LimitMEMLOCKinfinity[rootnode1 ~]#cat /etc/systemd/system/elasticsearch.service.d/override.conf [service] LimitMEMLOCKinfinity[rootnode1 ~]#systemctl daemon-reload [rootnode1 ~]#systemctl restart elasticsearch.service [rootnode1 ~]#systemctl is-active elasticsearch.service active优化ELK 内存不是越大越好 官方文档https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#heap-size-settings 推荐使用宿主机物理内存的一半ES的heap内存最大不超过30G,26G是比较安全的 官方文档https://www.elastic.co/guide/en/elasticsearch/reference/master/advanced-configuration.html#set-jvm-heap-size 翻译为 内存优化建议: 为了保证性能每个ES节点的JVM内存设置具体要根据node要存储的数据量来估算,建议符合下面约定1.在内存和数据量有一个建议的比例:对于一般日志类文件1G内存能存储48G~96GB数据2.JVM堆内存最大不要超过30GB3.对于主分片的数量单个分片控制在30-50GB建议将heap内存设置为物理内存的一半且最小和最大设置一样大,但最大不能超过30G [rootes-node1 ~]# vim /etc/elasticsearch/jvm.options -xms2g -xm×2g集群安装脚本 #!/bin/bash # #******************************************************************** #Author: wangxiaochun #Date: 2020-06-03 #FileName: install_elasticsearch_cluster.sh #URL: http://www.wangxiaochun.com #Description: The test script #Copyright (C): 2020 All rights reserved #********************************************************************ES_VERSION7.17.5 #ES_VERSION7.9.3 #ES_VERSION7.6.2 UBUNTU_URLhttps://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/apt/pool/main/e/elasticsearch/elasticsearch-${ES_VERSION}-amd64.deb RHEL_URLhttps://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/${ES_VERSION}/elasticsearch-${ES_VERSION}-x86_64.rpmCLUSTER_NAMEes-cluster NODE_LIST[192.168.10.145,192.168.10.146,192.168.10.147] ES_DATA/data/es-data ES_LOGS/data/es-logs. /etc/os-releasecolor () {RES_COL60MOVE_TO_COLecho -en \\033[${RES_COL}GSETCOLOR_SUCCESSecho -en \\033[1;32mSETCOLOR_FAILUREecho -en \\033[1;31mSETCOLOR_WARNINGecho -en \\033[1;33mSETCOLOR_NORMALecho -en \E[0mecho -n $1 $MOVE_TO_COLecho -n [if [ $2 success -o $2 0 ] ;then${SETCOLOR_SUCCESS}echo -n $ OK elif [ $2 failure -o $2 1 ] ;then ${SETCOLOR_FAILURE}echo -n $FAILEDelse${SETCOLOR_WARNING}echo -n $WARNINGfi${SETCOLOR_NORMAL}echo -n ]echo }check_mem () {MEM_TOTALhead -n1 /proc/meminfo |awk {print $2}if [ ${MEM_TOTAL} -lt 1997072 ];thencolor 内存低于2G,安装失败! 1exitelif [ ${MEM_TOTAL} -le 2997072 ];thencolor 内存不足3G,建议调整内存大小! 2elsereturnfi }set_node_id () {read -p 请输入node编号(默认为 1): NODE_IDif [ -z $NODE_ID ] ;thenNODE_ID1elif [[ ! $NODE_ID ~ ^[0-9]$ ]];thencolor 请输入正确的node编号! 1exitelsetruefiNODE_NAMEnode-$NODE_ID }install_es() {if [ $ID centos -o $ID rocky ];thenwget -P /usr/local/src/ $RHEL_URL || { color 下载失败! 1 ;exit ; } yum -y install /usr/local/src/${RHEL_URL##*/}elif [ $ID ubuntu ];thenwget -P /usr/local/src/ $UBUNTU_URL || { color 下载失败! 1 ;exit ; }dpkg -i /usr/local/src/${UBUNTU_URL##*/}elsecolor 不支持此操作系统! 1exitfi[ $? -eq 0 ] || { color 安装软件包失败,退出! 1; exit; } }config_es () {cp /etc/elasticsearch/elasticsearch.yml{,.bak}cat /etc/elasticsearch/elasticsearch.yml EOF cluster.name: $CLUSTER_NAME node.name: $NODE_NAME path.data: $ES_DATA path.logs: $ES_LOGS bootstrap.memory_lock: true network.host: 0.0.0.0 discovery.seed_hosts: $NODE_LIST cluster.initial_master_nodes: $NODE_LIST gateway.recover_after_nodes: 2 action.destructive_requires_name: true EOFmkdir -p /etc/systemd/system/elasticsearch.service.d/cat /etc/systemd/system/elasticsearch.service.d/override.conf EOF [Service] LimitMEMLOCKinfinity EOFsystemctl daemon-reloadsystemctl enable elasticsearch.service }prepare_es() {echo vm.max_map_count 262144 /etc/sysctl.confsysctl -pmkdir -p $ES_DATA $ES_LOGSchown -R elasticsearch.elasticsearch $ES_DATA $ES_LOGS }start_es(){systemctl start elasticsearch || { color 启动失败! 1;exit 1; }sleep 3curl http://127.0.0.1:9200 color 安装成功 0 || { color 安装失败! 1; exit 1; } echo -e 请访问链接: \E[32;1mhttp://hostname -I|awk {print $1}:9200/\E[0m }check_mem set_node_id install_es config_es prepare_es start_esscp的使用 scp /root/install_elasticsearch_cluster.sh root192.168.10.146:/root集群安装成功 cluster_uuid都是一样的 cluster_uuid: “na”,的机器重启一下服务就可以同步其他节点了。 systemctl restart elasticsearch.service查看健康状态 curl http://127.0.0.1:9200/_cat/healthES集群状态:1.绿色状态:表示集群各节点运行正常而且没有丢失任何数据各主分片和副本分片都运行正常2.黄色状态:表示由于某个节点宕机或者其他情况引起的,node节点无法连接、所有主分片都正常分配,有副本分片丢失但是还没有丢失任何数据3.红色状态:表示由于某个节点宕机或者其他情况引起的主分片丢失及数据丢失,但仍可读取数据和存储#查看支持的指令 curl http://127.0.0.1:9200/_cat#查看es集群状态 curl http://127.0.0.1:9200/_cat/healthcurl http:/ /127.0.0.1:9200/ _cat/health?v#查看所有的节点信息 curl http://127.0.0.1:9200/_cat/nodes?v#列出所有的索引以及每个索引的相关信息 curl http://127.0.0.1:9200/_cat/indices?v#查看集群分健康性 curl http://127.0.0.1:9200/_cluster/health?prettytrue官方使用手册https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html Shell命令 rootes-node1:~# curl 127.0.0.1:9200/_cat ^.^ /_cat/allocation /_cat/shards /_cat/shards/{index} /_cat/master /_cat/nodes /_cat/tasks /_cat/indices /_cat/indices/{index} /_cat/segments /_cat/segments/{index} /_cat/count /_cat/count/{index} /_cat/recovery /_cat/recovery/{index} /_cat/health /_cat/pending_tasks /_cat/aliases /_cat/aliases/{alias} /_cat/thread_pool /_cat/thread_pool/{thread_pools} /_cat/plugins /_cat/fielddata /_cat/fielddata/{fields} /_cat/nodeattrs /_cat/repositories /_cat/snapshots/{repository} /_cat/templates /_cat/ml/anomaly_detectors /_cat/ml/anomaly_detectors/{job_id} /_cat/ml/trained_models /_cat/ml/trained_models/{model_id} /_cat/ml/datafeeds /_cat/ml/datafeeds/{datafeed_id} /_cat/ml/data_frame/analytics /_cat/ml/data_frame/analytics/{id} /_cat/transforms /_cat/transforms/{transform_id}API使用 创建索引 查看索引 rootes-node1:~# curl http://127.0.0.1:9200/index2?pretty {index2 : {aliases : { },mappings : { },settings : {index : {routing : {allocation : {include : {_tier_preference : data_content}}},number_of_shards : 1, # 一个分片provided_name : index2,creation_date : 1720874983389,number_of_replicas : 1, # 一个副本uuid : pr4BE8D_TL6PKdicWZxDtw,version : {created : 7170599}}}} }没有创建分片和副本的索引性能又不好数据的安全性又不高。创建Type type就相当于mysql中的数据表 curl -XPOST http://127.0.0.1:9200/index2/food/ -H Content-Type:application/json -d {name:apple,taste:good,version:1.0}创建分片和副本 分片把大的数据拆分成若干个小的数据我当前有3个节点可以创建3个分片3个分片就也相当于将一个数据分别存储在了这3个节点上可以做到3个节点负载均衡的效果。但是分片导致数据分散了一旦某一个节点不能访问就导致整个数据不可用所以此时就需要使用到副本。 副本就相当于将一个数据又复制备份了一份一旦原来的数据不能访问副本就可以还原原始数据。 curl -XPUT http://127.0.0.1:9200/index3 -H Content-Type: application/json -d {settings: {index: {number_of_shards: 3,number_of_replicas: 2}} }3分片2副本的意思是每个分片有2个副本 curl 192.168.10.145:9200/index3?pretty数据存放的磁盘的位置 查询数据 ES插件 elasticsearch-head curl -XPOST http://127.0.0.1:9200/index1/food/ -H Content-Type:application/json -d {name:apple,taste:good,version:1.0}Cerebro github地址https://github.com/lmenezes/cerebro 1.安装jdk Cerebro依赖于JDK环境 apt -y install openjdk-11-jdk2.下载deb包 wget https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro_0.9.4_all.deb3.安装 dpkg -i cerebro_0.9.4_all.deb 4.修改配置 vim /etc/cerebro/application.conf 访问主机的9000端口即可打开cerebro界面,在Node address输入框中输入任意ES节点即可访问 ES集群工作原理 官方说明https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 节点分类 单机节点ES存在单点问题,可以实现多机的集群,每个节点的角色有所不同。 ES的节点有三种 Master节点 Master节点1.ES集群中只有一个Master节点用于控制整个集群的操作2.Master节点负责增删索引,增删节点,shard分片的重新分配3.Master主要维护Cluster State包括节点名称,节点连接地址,索引名称和配置认息等4.Master接受集群状态的变化并推送给所有节点,集群中各节点都有一份完整的集群状态信息都由master node负责维护5.Master节点不需要涉及到文档级别的变更和搜索等操作6.协调创建索引请求或查询请求将请求分发到相关的node上7.当Cluster State有新数据产生后 Master会将数据同步给其他Node节点8.Master节点通过超过一半的节点投票选举产生的9.可以设置node.master: true指定为是否参与Master节点选举,默认true。Data节点 Data节点1.存储数据的节点即为data节点2.当创建索引后索引创建的数据会存储至某个数据节点3.Data节点消耗内存和磁盘IO的性能比较大4.配置node.data: true,默认为true,即默认节点都是data类型Coordinating节点(协调) coordinating节点(协调)1.处理请求的节点即为coordinating节点该节点为所有节点的默认角色不能取消2.coordinating节点主要将请求路由到正确的节点处理。比如创建索引的请求会由coordinating路由到master节点处理3.当配置node.master:false、node.data:false则只充当coordinating节点集群选举 ES集群的选举是由master-eligble(有资格的master节点)发起当该节点发现当前节点不是master,并且该节点通过ZenDiscovery模块ping其他节点得到超过mininum_master_nodes个节点无法连接master时就会发起选举。 选举时,优先选举ClusterStateVersion最大的Node节点如果ClusterStateVersion相同则选举ID最小的Node。 ClusterStateVersion是集群的状态版本号每一次集群选举ClusterStateVersion都会更新因此最大的ClusterStateVersion是与原有集群数据最接近或者是相同的这样就尽可能的避免数据丢失。 Node的ID是在第一次服务启动时随机生成的直接选用最小ID的Node主要是为了选举的稳定性尽量少的出现选举不出来的问题。 每个集群中只有一个Master节点。 每个集群中损坏的节点不能超过集群一半以上,否则集群将无法提供服务。 集群分片和副本 分片Shard ES中存储的数据可能会很大,有时会达到PB级别 基于性能和容量等原因,可以将一个索引数据分割成多个小的分片,再将每个分片分布至不同的节点从而实现数据的分布存储,实现性能和容量的水平扩展。 在读取时,分片可以实现多节点的并行读取从而提升性能。除此之外,如果一个分片的主机宕机,也不影响其它节点分片的读取。 横向扩展即增加服务器当有新的Node节点加入到集群中时集群会动态的重新进行分配和负载。 例如原来有两个Node节点每个节点上有3个分片即共6个分片,如果再添加一个node节点到集群中集群会动态的将此6个分片分配到这三个节点上最终每个节点上有两个分片。 7.X默认每个索引只有一个分片。 副本Replication 将一个索引分成多个分片,仍然存在数据的单点问题,可以对每一个分片进行复制生成副本即备份实现数据的高可用。 ES的分片分为主分片(primary shard)和副本分片(复制replica shard)而且通常分布在不同节点主分片实现数据读写,副本分片只支持读。 每个数据分片只有一个主分片,而副本分片可以有多个,比如一个副本,即有一个备份。 7.X默认每个索引只有一个副本分片。 ES集群故障转移 故障转移指的是当集群中有节点发生故障时ES集群会进行自动修复。 假设由3个节点的ES集群组成(如下截图展示),node-1为master节点其中一个节点宕机 ES集群的故障转移流程如下 以索引“leilei”为例 0.宕掉node-3节点 1.重新选举 1.node-3节点宕机集群状态变黄导致node-3的原有的P1和R2分片丢失 2.node-1和node-2发现node-3无法响应 3.一段时间后集群会发起master选举比如这里仍然选择node-1为master节点,此时集群状态变为Yellow2.主分片调整 1.新的Master节点node-1发现在原来在node3上的主分片P1未分配将node-2上的R1提升为主分片 2.此时所有的主分片都正常分配但1和2分片没有副本分片,集群状态为Yellow状态。3.副本分片调整 node1将P1和P2主分片重新生成新的副本分片R0和R1, 4.恢复node-3节点 修复好node3节点后,ES会自动将各个分片均匀分配。 ES文档路由 参考文档https://www.elastic.co/guide/cn/elasticsearch/guide/current/routing-value.html 1.ES文档路由原理 ES文档是分布式存储当一个文档存储至ES集群时,如何决定存储的节点位置,以及读取时从哪里获取数据? 首先这肯定不会是随机的否则将来要获取文档的时候我们就不知道从何处寻找了。 实际上在ES中通过如下的公式计算文档对应的分片存储到哪个节点 shard hash(routing) % number_of_primary_shards # hash算法保证将数据均匀分散在分片中 # routing是一个可变参数默认是文档id也可以自定义 # number_of_primary_shards 主分片数 # 这个分布在 0 到 number_of_primary_shards-1 之间的余数就是我们所寻求的文档所在分片的位置。 # 注意:该算法与主分片数相关一但确定后便不能更改主分片这就解释了为什么我们要在创建索引的时候就确定好主分片的数量 并且永远不会改变这个数量。因为如果数量变化了那么所有之前路由的值都会无效文档就再也找不到了。 我们可以发送请求到集群中的任一节点。每个节点都有能力处理任意请求。每个节点都知道集群中任一文档位置所以可以直接将请求转发到需要的节点上。在下面的例子中将所有的请求发送到Node 1我们将其称为协调节点(coordinating node)。 2.ES文档创建流程 ES文档创建流程1.客户端向协调节点Node1发送新建索引文档或者删除索引文档请求2.Node1节点使用文档的_id确定文档属于分片03.因为分片0的主分片目前被分配在Node3上,请求会被转发到Node34.Node3在主分片上面执行创建或删除请求5.Node3执行如果成功它将请求并行转发到Node1和Node2的副本分片上6.一旦所有的副本分片都报告成功, Node3将向协调节点Node1报告成功7.协调节点Node1客户端报告成功在客户端收到响应时文档变更已经在主分片和所有副本分片执行完成。3.ES文档读取流程 可以从主分片或者从其它任意副本分片读取文档 ES文档读取流程1.客户端向Node1发送读取请求2.节点使用文档的_id来确定文档属于分片0分片О的副本分片存在于所有的三个节点上3.在处理读取请求时协调结点在每次请求的时候都会通过轮询所有的副本分片来达到负载均衡。在这种情况下它将请求转发到Node2。4.Node2将文档返回给Node1然后将文档返回给客户端。Beats收集数据 Beats是一些工具集,包括以下系列,其中filebeat应用最为广泛 Beats是一个免费且开放的平台集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向Logstash 或 Elasticsearch发送数据。 虽然利用logstash就可以收集日志功能强大但由于Logtash 是基于Java实现需要在采集日志的主机上安装JAVA环境会消耗比较多的内存和磁盘空间logstash运行时最少也会需要额外的500M以上的内存资源消耗很大,有些得不偿失。 可以采用基于Go开发的Beat工具代替Logstash 收集日志部署更为方便而且只占用10M左右的内存空间及更小的磁盘空间比较节约资源。 官方链接https://www.elastic.co/cn/beats/ github链接https://github.com/elastic/beats 利用Filebeat收集日志 Filebeat 是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装Filebeat监视您指定的日志文件或位置收集日志事件并将它们转发到Elasticsearch或Logstash进行索引。 filebeat支持从日志,Syslog,Redis,Docker,TCP,UDP,标准输入等读取数据,再输入至Elasticsearch,logstash,Redis,Kafka等。 Filebeat的工作方式如下: 启动Filebeat时它将启动一个或多个输入这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志Filebeat都会启动收集器。每个收集器都读取一个日志以获取新内容并将新日志数据发送到libbeatlibbeat会汇总事件并将汇总的数据发送到为Filebeat配置的输出。 Filebeat官方说明 https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html 安装Filebeat 输入和输出 官方说明https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html Inputs filebeat.inputs: - type: filestreamid: my-filestream-id paths:- /var/log/system.log- /var/log/wifi.log - type: filestreamid: apache-filestream-idpaths:- /var/log/apache2/*fields:apache: truefields_under_root: trueOutput到ES中 output.elasticsearch:hosts: [https://myEShost:9200] Ubuntu安装 wget https://mirrors.aliyun.com/elasticstack/apt/7.x/pool/main/f/filebeat/filebeat-7.17.5-amd64.debdpkg -i filebeat-7.17.5-amd64.deb官方说明https://www.elastic.co/guide/en/beats/filebeat/8.3/configuration-general-options.html 查看filebeat安装包有哪些内容 dpkg -L filebeat开启filebeat的server服务 filebeat的默认配置 案例1从标准输入读取再输出至标准输出 [roote1k-web1 ~]#vim /etc/filebeat/stdin.yml filebeat.inputs: - type: stdinenabled: true output.console:pretty: trueenable: trueyml编写后需要使用filebeat命令去触发/etc/filebeat/stdin.yml文件的执行可以使用帮助查看filebeat命令 rootes-plugins:~# filebeat --help Usage:filebeat [flags]filebeat [command]Available Commands:export Export current config or index templategenerate Generate Filebeat modules, filesets and fields.ymlhelp Help about any commandkeystore Manage secrets keystoremodules Manage configured modulesrun Run filebeatsetup Setup index template, dashboards and ML jobstest Test configversion Show current version infoFlags:-E, --E settingvalue Configuration overwrite-M, --M settingvalue Module configuration overwrite-N, --N Disable actual publishing for testing-c, --c string Configuration file, relative to path.config (default filebeat.yml)--cpuprofile string Write cpu profile to file-d, --d string Enable certain debug selectors-e, --e Log to stderr and disable syslog/file output--environment environmentVar set environment being ran in (default default)-h, --help help for filebeat--httpprof string Start pprof http server--memprofile string Write memory profile to this file--modules string List of enabled modules (comma separated)--once Run filebeat only once until all harvesters reach EOF--path.config string Configuration path (default )--path.data string Data path (default )--path.home string Home path (default )--path.logs string Logs path (default )--plugin pluginList Load additional plugins--strict.perms Strict permission checking on config files (default true)--system.hostfs string Mount point of the hosts filesystem for use in monitoring a host from within a container-v, --v Log at INFO levelUse filebeat [command] --help for more information about a command.触发命令 filebeat -c /etc/filebeat/stdin.yml -e命令执行成功后窗口会等着你的输入 我输入了“hello leilei-filebeat” 窗口的标准输出内容,其中message: “hello leilei-filebeat”,打印的就是我输入的内容。 {timestamp: 2024-07-15T11:11:17.667Z,metadata: {beat: filebeat,type: _doc,version: 7.17.5},log: {offset: 0,file: {path: }},message: hello leilei-filebeat,input: {type: stdin},host: {name: es-plugins},agent: {type: filebeat,version: 7.17.5,hostname: es-plugins,ephemeral_id: 8221553b-79ce-42fe-a30a-cd75df753470,id: 4302fad7-ece0-4b39-954f-6f8186e73446,name: es-plugins},ecs: {version: 1.12.0} }案例2从标准输入读取再输出至Json格式的文件 将我输入的内容输出到“/tmp/filebeat”中 [roote1k-web1 ~]#vim /etc/filebeat/stdout_file.yml filebeat.inputs: - type: stdinenab1ed: truejson.keys_under_root: true #默认False会将json数据存储至message改为true则会独立message外存储 output.file:path: /tmpfi1ename: filebeat案例3从文件读取再输出至标准输出 将/tmp/filebeat文件中的内容输出至窗口标准输出 [roote1k-web1 ~]#vim /etc/filebeat/file.yml filebeat.inputs: - type: logenabled: truepaths:- /tmp/filebeat output.console:pretty: trueenable: true案例4将nginx的访问日志输出至标准输出 vim /etc/filebeat/file.yml filebeat.inputs: - type: logenabled: truepaths:- /var/log/nginx/access.log output.console:pretty: trueenable: truefilebeat -c /etc/filebeat/file.yml -e可以看出虽然nginx的日志已经被输出到标准输出了但是此时message的内容是一坨字符串不是json格式的展示这将不利于分析此后我们会将其装换成json字符展示。 案例5利用filebeat收集Nginx访问日志到ES中 默认生成的索引名称为filebeat-版本-时间* 1.修改配置文件 vim /etc/filebeat/filebeat.yml filebeat.inputs: - type: filestreamid: my-filestream-idenabled: true # 开启日志paths:- /var/log/nginx/access.log # 指定收集的日志文件output.elasticsearch:hosts: [192.168.10.145:9200] # 指定ES集群服务器地址和端口2.重启filebeat服务 通过插件看filebeat是否成功收集系统日志到ES中。 在kibana中查看是否收集成功成功了 Filebeat收集Nginx Json格式日志 官方文档 https://www.elastic.co/guide/en/beats/filebeat/7.6/filebeat-input-log.html https://www.elastic.co/guide/en/beats/filebeat/7.6/redis-output.html 生产环境中我们经常需要获取Web访问用户的信息比如:来源的IP是哪个地域网站的PV、UV、状态码、访问时间等等;所以需要收集的Nginx访问日志。 1.配置nginx访问日志为Json格式 修改nginx主配置文件nginx.conf中nginx的访问日志为json格式 log_format access_json {timestamp:$time_iso8601,host:$server_addr,c1ientip:$remote_addr,size:$body_bytes_sent,responsetime:$request_time,upstreamtime:$upstream_response_time,upstreamhost:$upstream_addr,http_host:$host,uri:$uri,domain:$host,xff:$http_x_forwarded_for,referer:$http_referer,tcp_xff:$proxy_protocol_addr,http_user_agent:$http_user_agent,status:$status};Json格式的配置需要定义在http块里 2.指定access_log输出为我们自定义的json格式 access_log /var/log/nginx/access_json.log access_json;3.重启Nginx服务 可以安装个jq工具查看 very nice very 丝滑 4.修改filebeat.yml filebeat.inputs: - type: logenabled: truepaths:- /var/log/nginx/access_json.logjson.keys_under_root: true #默认false会将全部数据存储至message字段改为true则会以Json格式存储json.overwrite_keys: true #设为true,覆盖默认的message字段使用自定义json格式中的keytags: [nginx-access] #指定tag,用于分类- type: logenabled: truepaths:- /var/log/nginx/error.logtags: [nginx-error]output.elasticsearch:hosts: [10.0.0.101:9200] indices:- index: nginx-access-%{[agent.version]}-%{yyy.MM.dd} when.contains:tags: nginx-access #如果记志中有access的tag,就记录到nginx-access的索引中- index: nginx-error-%{[agent.version]}-%{yyy.MM.dd}when.contains:tags: nginx-error #如果记志中有error的tag,就记录到nginx-error的索引中setup.ilm.enabled: false #关闭索引生命周期ilm功能默认开启时索引名称只能为filebeat-* setup.template.name: nginx #定义模板名称,要自定义索引名称,必须指定此项,否则无法启动 setup.template.pattern: nginx-* #定义模板的匹配索引名称,要自定义索引名称,必须指定此项,否则无法启动通过Kibana查看收集的日志信息 Kibana需要创建索引模式 点击discover 使用kibana画图 展示那些ip访问 Logstash Logstash 是Elastic Stack的核心产品之一可用来对数据进行聚合和处理并将数据发送到Elasticsearch。 Logstash是一个基于Java实现的开源的服务器端数据处理管道允许您在将数据索引到Elasticsearch之前同时从多个来源采集数据并对数据进行过滤和转换。 可以通过插件实现日志收集和转发支持日志过滤支持普通log、自定义json格式的日志解析。 Kibana Kibana是一款适用于Elasticsearch的基于Typescript(增强版的JavaScript)语言实现的数据可视化和管理工具可以提供实时的直方图、线形图、饼状图和地图。 Kibana同时还包括诸如Canvas和Elastic Maps 等高级应用程序;Canvas允许用户基于自身数据创建定制的动态信息图表而Elastic Maps则可用来对地理空间数据进行可视化。 官方文档https://www.elastic.co/cn/kibana 安装kibana Ubuntu安装 1.下载deb包 wget https://mirrors.aliyun.com/elasticstack/apt/7.x/pool/main/k/kibana/kibana-7.17.5-amd64.deb2.解包 dpkg -i kibana-7.17.5-amd64.deb3.修改配置 vim /etc/kibana/kibana.yml server.port: 5601 #监听端口,此为默认值 server.host: 0.0.0.0 #修改此行的监听地址,默认为1oca7host elasticsearch.hosts: [http://10.0.0.101:9200] #修改此行,指向ES服务器地址,默认为localhost i18n.locale: zh-CN #修改此行,使用zh-CN显示中文界面,默认英文4.启动kibana的server服务 5.访问kibana的web页面 访问主机的5601端口
http://www.tj-hxxt.cn/news/142113.html

相关文章:

  • 韩国食品网站设计欣赏山东裕达建设工程咨询有限公司网站
  • 电商网站商品页的优化目标是什么国际域名和国内域名区别
  • 网站建站网站多少钱备案网站还是域名
  • 企业网站分为哪三种类型wordpress注册上面的logo
  • 河北省建设网站锁安装什么驱动logo设计免费生成器在线
  • 网站维护和推广wordpress 导航链接
  • 做阿里巴巴网站多少钱微信网站开发需要什么技术
  • 怎么查网站死链免费申请靓号
  • 淄博网站建设有限公司rp如何做网站
  • 网站智能建设有那些优势自建wordpress
  • 银川建设网站公司学ui设计难不难
  • 网站建设教程自学网设计网站的公司名称
  • 做网站项目前怎么收集需求wordpress评论关闭
  • 精利手表网站合肥建设干部学校网站首页
  • 网站创意策划方案做做做做网站
  • 如何用织梦搭建网站浙江网站建设平台
  • 广州青菜篮农业有限公司网站建设项目给网站可以怎么做外链
  • 做外贸选取哪个网站iframe 一直网站底部
  • 公司网站开发与维护高清有线电视沈阳
  • 廊坊教育云网站建设网站建设外包项目
  • 做音乐网站是不是侵权wordpress空间转移
  • 网站建设功能需求表泛微e8做网站门户
  • 为什么网站很少做全屏简单大气网页
  • 网站建立前期调查百度云 wordpress 教程
  • 网站建设如何账务处理做学分网站
  • 做网站的英文哪些网站做的比较好
  • 网站手机客户端开发教程昆山设计网站公司
  • 建设银行 福州招聘网站投资公司logo
  • 为什么要做一个营销型网站WordPress文章预览篇幅
  • 新建网站seo优化怎么做网站后台开发技术