《 Elasticsearch 》
ESC和mongdb都属于document,NOSQL非关系型数据库。
Elasticsearch 是一个基于apache lucene(性能最好,功能最全的全文搜索引擎)的搜索服务器,是一个分布式多用户的全文搜索引擎,基于JAVA开发的需要装JDK的包,安装即可。
基于restful web接口(用于客户端和服务器交互类的软件,更易于实现缓存等机制)。
它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,是面向文档的,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
集群的读取数据的每台服务器可能不同步。
特点:

  1. 分布式存储,每个字段都被索引,并且可搜索。
    2.分布式的实时分析引擎。
    3.可以扩展到上百台服务器,分布式处理(PB级,Peripheral Buffer 外围缓冲器)结构化和非结构化数据。
    JSON(document)文档型,像 [列表] {字典} 分层解决。Lucene只是一个库,用于Java的二次开发加了一些界面,通过提供的接口进行访问,客户端不用关心后台是怎么操作的。
    结构化(有规律) 无结构化(无规律无结构,如日志)
    安装:JDK: rpm -ivh jdk-8u162-linux-x64.rpm java -version 保证jdk是最新的包。
    如果不是最新的,切换,alternatives --config 软件名
    创建esc的源:/etc/yum.repo.d/elasticsearch.repo
    [elasticsearch-6.x]
    name=Elasticsearch repository for 6.x packages
    baseurl=https://artifacts.elastic.co/packages/6.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    安装ESC的包: rpm -ivh elasticsearch-6.2.3.rpm
    开启:systemctl start elasticsearch
    查找进程是否开启: ps -ef |grep java (基于java的)
    l

设置监听地址:vim /etc/elasticsearch/elasticsearch.yml
cluster.name: 集群名字,统一的。(很多不允许数字开头)
node.name: Node名字,自定义,自己的。
node.attr.rack: r1 机架名 ,根据生产环境定义,实验测试可放在同一台。
path.data: /var/lib/elasticsearch 数据存放路径,习惯性的在/data/下做一个软链:
(mv /var/lib/elasticsearch /data/ ln -s /data/elasticsearch /var/lib/elasticsearch)
path.logs: /var/log/elasticsearch 日志存放路径
discovery.zen.ping.unicast.hosts: 改版以后需要填域名,必须能解析 ,中括号里的第一个主机一般都是master
在页面里 * 代表master ,做过群集的服务器状态低于%70说明数据不同步,旧的服务器认为以前的NODE节点不在了便不会同步新的服务器。

node 节点数最好是单数,防止脑裂(双数的群集在master)
discovery.zen.ping.unicast.hosts: ["yxlxixi", "yxlhaha"]
network.host: 0.0.0.0 网络主机

重启:systemctl restart elasticsearch
ss -anl |grep 9200 elasticsearch 端口 9300 :ESC群集之间通讯的 9100:图形界面端口
查看 elasticsearch的信息(版本) :curl http://localhost:9200
"lucene_version" : "7.2.1": elasticsearch的版本信息,群集之间的版本要相同,不然会导致数据不同步,为了防止版本的不同步,在配置完elasticsearch.yml后改成备份的名字,ESC不认识的文件名,就可以防止yum update后的版本不一致导致数据不同步的现象。
curl 访问ESC 的语法 :curl -X '://:/?' -d ''
说明:
VERB HTTP方法: GET , POST , PUT , HEAD , DELETE
PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用
HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
PORT Elasticsearch HTTP服务所在的端口,默认为9200
PATH API路径(例如count将返回集群中文档的数量),PATH可以包含多个组件,例如cluster/stats或者
_nodes/stats/jvm
QUERY_STRING 一些可选的查询请求参数,例如 ?pretty 参数将使请求返回更加美观易读的JSON数据 BODY 一个JSON格式的请求主体(如果请求需要的话)
查看master和node的状态 :curl -X GET localhost:9200/_cat/nodes
查看群集的状态:curl -X GET localhost:9200/_cluster/state/nodes?pretty 或
curl -X GET localhost:9200/_cat/health

Logstash架构收集日志
原理:监控nginx apache 等日志,然后将收集的日志(filter过滤)输出(output)给本机的ESC或其他服务器的logstash,也可以是redis:<分层解决 层级之间松耦合 不xianghu依赖>
多台服务器上都部署有logstash收集日志(日志收集的代理),写在多个或一个redis(解耦合的队列),后边的logstash(集中日志)从redis上读取日志数据再写到ESC(存储日志)里。因为logstash收集的日志太多太快,通过redis(慢)给后边的logstash或者ESC减轻前台Logstash的压力,前台的logstash只管把数据交给Redis其他的不管,这就是队列服务器,Redis后边的logstash或者ESC先进先出的顺序来读取数据。不产生依赖,一个坏掉不影响其他的。(这就是解耦合也就是松耦合的架构,两个程序模块有关联就叫做耦合,也叫做生产者消费模型)如果没有队列,前台的loastash得发送一个数据等后边的服务器接收到才继续下一个动作。

Logstash 安装与测试:之前配置的elasticsearch.repo即可,yum -y install logstash
测试:/usr/share/logstash/bin/logstash -e 'input {stdin{}} output{stdout{codes=>rubydebug}}' --path.settings /etc/logstash
Logstash收集nginx log:

测试:/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf --path.settings /etc/logstash &(后台)
Kibana(图形化操作界面)

filebeat:一个插件,也可以监控日志,相当于agent和logstash,filebeat讲数据传输给logstash或者redis,losstash再把数据存储到ESC上:
配置filebeat:

重启logstash . systemctl restart logstash
安装: 在另一台服务器上装 rpm -ivh filebeat-6.2.4-x86_64.rpm
配置:

Hosts: server端logstash:ip 以及filebeat端口
vim /etc/firebeat/filebeat.yml : 注释Outputs的hosts行 ,开启logstash output行的hosts: ["server端的ip:5044"]
开启: systemctl start filebeat
测试: curl http://localhost:9200/_cat/indices
浏览器测试:firebeat端ip 出现Apache的网页多刷进行测试,再次查看,curl http://localhost:9200/_cat/indices ,发现日志数量增多了。

有许多图片没上传,暂时不上传了。