热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

02.Elasticsearch集群搭建

Elasticsearch发展历史从开源到上市同类型产品起源Elasticsearch诞生Elasticsearch分布式架构Elasticsearch支持多种接入方式Elasti

Elasticsearch发展历史

从开源到上市

02 . Elasticsearch集群搭建

同类型产品

02 . Elasticsearch集群搭建

起源

02 . Elasticsearch集群搭建

Elasticsearch诞生

02 . Elasticsearch集群搭建

Elasticsearch分布式架构

02 . Elasticsearch集群搭建

Elasticsearch支持多种接入方式

02 . Elasticsearch集群搭建

Elasticsearch主要功能

02 . Elasticsearch集群搭建

市场反应

02 . Elasticsearch集群搭建

Elasticsearch5.x新特性

02 . Elasticsearch集群搭建

Elasticsearch6.x新特性

02 . Elasticsearch集群搭建

Elasticsearch7.x新特性

02 . Elasticsearch集群搭建

Elasticsearch家族成员

Elastic Stack生态圈

02 . Elasticsearch集群搭建

Logstash:数据处理管道

02 . Elasticsearch集群搭建

主要特性


Beats

02 . Elasticsearch集群搭建

ELK用户及应用场景

02 . Elasticsearch集群搭建

Elasticsearch与数据库的集成

02 . Elasticsearch集群搭建

日志分析/指标分析

02 . Elasticsearch集群搭建

ES概念简介

Elasticsearch是一个高度可扩展RESTful风格的开源全文搜索和分析引擎,基于JAVA语言编写,它内部使用的是Apache Lucene做索引功能。

Apache Lucene是一款高性能的、可扩展的信息检索工具库,提供索引功能的信息检索工具库。同样由Java语言开发、***开源的搜索类库,基于Apache协议授权。Lucene只是一个软件类库,如果要发挥Lucene的功能,还需要开发一个调用Lucene类库的应用程序。但是Apache Lucene已被集成在Elasticsearch当中,所以我们并不需要去单独配置Apache Lucene

Cluster 集群

一个 Elasticsearch 集群由一个或多个节点(Node)组成,每个集群都有一个共同的集群名称作为标识

Node节点

一个 Elasticsearch 实例即一个 Node,一台机器可以有多个实例,正常使用下每个实例应该会部署在不同的机器上。 Elasticsearch 的配置文件中可以通过 node.master、 node.data 来设置节点类型

node.master:表示节点是否具有成为主节点的资格

# true代表的是有资格竞选主节点
# false代表的是没有资格竞选主节点

node.data:表示节点是否存储数据

# true代表存储数据
# false代表不存储数据
Node节点组合

主节点+数据节点(master+data)

# 节点即有成为主节点的资格,又存储数据
node.master: true
node.data: true

数据节点(data)

# 节点没有成为主节点的资格,不参与选举,只会存储数据
node.master: false
node.data: true

客户端节点(client)

# 不会成为主节点,也不会存储数据,主要是针对海量请求的时候可以进行负载均衡
node.master: false
node.data: false
分片

每个索引有一个或多个分片,每个分片存储不同的数据。分片可分为主分片( primary shard)和复制分(replica shard),复制分片是主分片的拷贝。默认每个主分片有一个复制分片,一个索引的复制分片的数量可以动态地调整,复制分片从不与它的主分片在同一个节点上.

环境及软件

List:
	CentOS7.3.1611
	elasticsearch-7.2.0-linux-x86_64.tar.gz
	jdk-8u121-linux-x64.rpm
	cerebro-0.8.3.tgz
	

# 因为ES7已经内置了所需的java的JDK版本,因此在此不再介绍java安装
# ES7安装方式使用RPM安装方式。

# 架构设计
# ES-Master:  我们设定192.168.0.117为Master节点
# ES-Data:	我们设定192.168.0.115和192.168.0.108专门存储数据节点

ES节点列表

IP 节点名
192.168.43.176 node-a
192.168.43.164 node-b
192.168.43.215 node-c

准备系统环境

init_security() {
systemctl stop firewalld
systemctl disable firewalld &>/dev/null
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/'  /etc/selinux/config
sed -i '/^GSSAPIAu/ s/yes/no/' /etc/ssh/sshd_config
sed -i '/^#UseDNS/ {s/^#//;s/yes/no/}' /etc/ssh/sshd_config
systemctl enable sshd crond &> /dev/null
rpm -e postfix --nodeps
echo -e "\033[32m [安全配置] ==> OK \033[0m"
}
init_security

init_yumsource() {
if [ ! -d /etc/yum.repos.d/backup ];then
    mkdir /etc/yum.repos.d/backup
fi
mv /etc/yum.repos.d/* /etc/yum.repos.d/backup 2>/dev/null
if ! ping -c2 www.baidu.com &>/dev/null    
then
    echo "您无法上外网,不能配置yum源"
    exit    
fi
    curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
    yum clean all
    timedatectl set-timezone Asia/Shanghai
    echo "nameserver 114.114.114.114" > /etc/resolv.conf
    echo "nameserver 8.8.8.8" >> /etc/resolv.conf
    chattr +i /etc/resolv.conf
    echo -e "\033[32m [YUM Source] ==> OK \033[0m"
}
init_yumsource

安装ES7.2.0

Create_UserLogFile() 
{
	groupadd es
	useradd es -g es
	mkdir -pv /data/elk/{data,logs}
	chown -R es:es /data/
}


Unpackaged_Authorization() 
{
	yum -y install  ntpdate
	rpm -ivh  /root/InstallELKB-Shell/jdk-8u121-linux-x64.rpm
	tar xvf /root/InstallELKB-Shell/elasticsearch-7.2.0-linux-x86_64.tar.gz -C /opt/
	chown -R es:es /opt/elasticsearch-7.2.0/
	ntpdate -b ntp1.aliyun.com
}


Set_System_Parameter() 
{
cat >> /etc/security/limits.conf <> /etc/sysctl.conf && sysctl -p
cat >> /etc/profile <> /opt/elasticsearch-7.2.0/config/elasticsearch.yml < /opt/elasticsearch.log  &
}

Test_Service() 
{
	esport=`ss -antp |grep :::9200 | awk -F::: '{print $2}'`
	if [ $esport -eq 9200 ];then
		echo -e  "\033[32m Elasticsearch is OK... \033[0m "
	fi
}

main() {
	Create_UserLogFile
	Unpackaged_Authorization
	Set_System_Parameter
	Test_Service
}

main

# 其他两个data节点配置文件有点不一样需要注意
# node-b
cluster.name: elasticsearch
node.name: node-b
node.master: true
node.data: true
node.max_local_storage_nodes: 3
network.host: 0.0.0.0 
network.publish_host: 192.168.43.164
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.43.176:9300","192.168.43.164:9300","192.168.43.215:9300"]
cluster.initial_master_nodes: ["node-a", "node-b","node-c"]
path.data: /home/es/data
path.logs: /home/es/logs
  
  
  
# es-node-data-02
cluster.name: elasticsearch
node.name: node-c
node.master: true
node.data: true
node.max_local_storage_nodes: 3
network.host: 0.0.0.0
network.publish_host: 192.168.43.215
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.43.176:9300","192.168.43.164:9300","192.168.43.215:9300"]
cluster.initial_master_nodes: ["node-a", "node-b","node-c"]
path.data: /home/es/data
path.logs: /home/es/logs
# 网络绑定,支持外网访问
network.host: 0.0.0.0
http.port: 9200
# 集群发现
discovery.seed_hosts: ["es-node-master-01","es-node-data-01","es-node-data-02"]
# 两个节点分别启动

nohup runuser -l es -c '/bin/bash /opt/elasticsearch-7.2.0/bin/elasticsearch ' &> /opt/elasticsearch.log  &

Elasticsearch文件目录结构

目录 配置文件 描述
bin 脚本文件,包括启动elasticsearch,安装插件,运行统计数据等
config Elasticsearch.yml 集群配置文件,user,role based相关配置
JDK JAVA运行环境
data Path.data 数据文件
lib Java类库
logs path.log 日志文件
modules 包含所有ES模块
plugins 包含所有已安装插件

ES配置文件解读

# ES通过集群名称区分集群,因此集群内所有节点的节点名称必须保持一致。如:
cluster.name: es-cluster

# 集群内节点的名称,同一集群内的节点名称必须保持唯一。如:
node.name: node01

# 机架感知
node.attr.rack: r1

# 标记节点可以选举为master节点。如果集群内的master节点停止,则该节点就会参与选举,可以成为master节点。如:
node.master: true

# 允许该节点存储索引数据(默认).如:
node.data: true

# 此路径是存放es数据的目录,可以任意指定。如果是生产环境建议设置的路径有足够的存储空间,如:
path.data: /datadrive/elasticsearch/data

# 此路径存储es产生的日志,生产环境建议与`path.logs`分开设置。如:
path.data: /datadrive/elasticsearch/logs

node.name: node-3
# 当前节点是否可以被选举为master节点,是:true、否:false
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true 
  
bootstrap.memory_lock: true
# 在ES运行起来后锁定ES所能使用的堆内存大小,锁定内存大小一般为可用内存的一半左右;锁定内存后就不会使用交换分区
# 如果不打开此项,当系统物理内存空间不足,ES将使用交换分区,ES如果使用交换分区,那么ES的性能将会变得很差

network.tcp.no_delay: true
# 是否启用tcp无延迟,true为启用tcp不延迟,默认为false启用tcp延迟

transport.tcp.port: 9301
#设置集群节点通信的TCP端口,默认就是9300

transport.tcp.compress: true
#设置是否压缩TCP传输时的数据,默认为false

http.max_content_length: 200mb
#设置http请求内容的最大容量,默认是100mb

http.cors.enabled: true
#是否开启跨域访问

http.cors.allow-origin: "*"
#开启跨域访问后的地址限制,*表示无限制

# SecComp检测,是:true、否:false
bootstrap.system_call_filter: false

# es绑定的地址,支持IPv4和IPv6。是es的监听地址。如果设置具体的地址,则只能通过改地址访问,也可设置`0.0.0.0`则不限制访问地址.如:
network.host: 0.0.0.0

# 外部访问es的http端口,默认`9200`。如:
http.port: 9200

# 集群节点通讯的tcp的端口,默认`9300`。如:
transport.tcp.port: 9300

# 集群搜索的主机列表。由discovery.zen.ping.unicast.hosts:参数改变而来。如:
discovery.seed_hosts:  ["192.168.0.117:9300","192.168.0.115:9300","192.168.0.108:9300"] 

# 集群主节点初始化列表,master选举列表。
cluster.initial_master_nodes: ["192.168.0.117:9300","192.168.0.115:9300","192.168.0.108:9300"]
参数 说明
cluster.name 集群名称,相同名称为一个集群
node.name 节点名称,集群模式下每个节点名称唯一
node.master 当前节点是否可以被选举为master节点,是:true、否:false
node.data 当前节点是否用于存储数据,是:true、否:false
path.data 索引数据存放的位置
path.logs 日志文件存放的位置
bootstrap.memory_lock 需求锁住物理内存,是:true、否:false
bootstrap.system_call_filter SecComp检测,是:true、否:false
network.host 监听地址,用于访问该es
network.publish_host 可设置成内网ip,用于集群内各机器间通信
http.port es对外提供的http端口,默认 9200
discovery.seed_hosts es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
cluster.initial_master_nodes es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
http.cors.enabled 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.allow-origin "*" 表示支持所有域名

jvm.options配置文件解读

grep -Ev "#|^$"/opt/elasticsearch-7.2.0/config/jvm.options | head -5 

#堆内存配置 
-Xms16g #Xms表示ES堆内存初始大小 
-Xmx16g #Xmx表示ES堆内存的最大可用空间 

#GC配置 
-XX:+UseConcMarkSweepGC #使用CMS内存收集 
-XX:CMSInitiatingOccupancyFraction=75 #使用CMS作为垃圾回收使用,75%后开始CMS收集 
-XX:+UseCMSInitiatingOccupancyOnly #使用手动定义初始化开始CMS收集 
JVM配置

修改JVM-config/jvm.options

# 7.1下载的默认配置1GB
# Xms和Xms设置成一样
# Xms不要超过机器内存的50%.
# 不要超过30GB, 请看https://www.elastic.co/cn/blog/a-heap-of-trouble

配置ES的Head插件

tar -xvf node-v10.6.0-linux-x64.tar.xz
# 重命名文件夹
mv node-v10.6.0-linux-x64 nodejs
# 通过建立软连接变为全局
ln -s /usr/local/nodejs/bin/npm /usr/bin/
ln -s /usr/local/nodejs/bin/node /usr/bin/
node -v
# v8.16.0

cd /opt/elasticsearch-7.2.0/elasticsearch-head-master/
npm install^C
npm run start

lsof -i:9100
# COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
# grunt   14567 root   12u  IPv4  41662      0t0  TCP *:jetdirect (LISTEN)

es202002 . Elasticsearch集群搭建

ES常规操作

# 所有节点都启动后可以访问任一节点查看集群状态,可以通过浏览器或curl节点地址。如:
curl -XGET 'http://127.0.0.1:9200/_cluster/state?pretty'


curl http://127.0.0.1:9200/_cat/nodes?v  
# ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
# 192.168.43.215           10          96   1    0.17    0.13     0.13 mdi       -      node-c
# 192.168.43.164           10          77   0    0.00    0.01     0.05 mdi       *      node-b
# 192.168.43.176            6          94   0    0.00    0.01     0.05 mdi       -      node-a

# 查看节点
curl http://127.0.0.1:9200/_cat/nodes?v   #?v人性化显示,*表示主节点	

# 查看整个集群索引
curl http://127.0.0.1:9200/_cat/indices

# 查看集群状态
curl http://127.0.0.1:9200/_cat/health

# 查看集群有多少个插件
curl http://127.0.0.1:9200/_cat/plugins

# 查看集群有多少个线程池
curl http://127.0.0.1:9200/_cat/thread_pool

ES索引操作

创建文档,生成索引
curl -H "Content-Type:application/json" -XPUT 'http://127.0.0.1:9200/index_name/type_name/1?pretty' -d '
{ "name": "xuwl", "age": 18, "job": "Linux" }'

# 命令介绍:
# -H:指定内容类型
# -X:指定http请求方式,这里为PUT上传方式
# http://10.211.55.10:9201:指定一台es服务器对外的http端口
# /index_name:文档的索引名称,必须小写
# /type_name:文档的类型名称,必须小写
# /1:文档的ID编号
# ?pretty:人性化创建索引
# -d:指定使用JSON方式来撰写上传文档
# { "name": "xuwl", "age": 18, "job": "Linux" }':使用JSON格式来撰写上传文档内容
创建索引为index_name文档
 curl -H "Content-Type:application/json" -XPOST 'http://127.0.0.1:9200/index_name/index_type/1?pretty' -d '{"name":"es-cluster","type": "data_index"}'


{
  "_index" : "index_name",
  "_type" : "index_type",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

查看索引
curl -XGET "http://127.0.0.1:9200/_cat/indices?v"

health status index      uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   index_name irYekUV4S12knIDbE85WUA   1   1          1            0      8.1kb            4kb

查看分片
curl -XGET "http://127.0.0.1:9200/_cat/shards?v"

index      shard prirep state   docs store ip            node
index_name 0     p      STARTED    1   4kb 192.168.0.119 es1
index_name 0     r      STARTED    1 4.1kb 192.168.0.101 192.168.0.101

安装Elasticsearch的cerebro插件

cerebro简介

tar xvf cerebro-0.8.3.tgz -C /opt/
cat <> /opt/cerebro-0.8.3/conf/application.conf
            hosts = [
                       {
                           host = "http://192.168.0.119:9200"
                           name = "ES-Cluster"
                       },
                    ]
EOF
nohup  /opt/cerebro-0.8.3/bin/cerebro -Dhttp.port=1234

# cerebro访问测试
# 浏览器输入http://IP:1234

02 . Elasticsearch集群搭建

02 . Elasticsearch集群搭建

02 . Elasticsearch集群搭建


推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了Nutch相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 深入理解Redis中的字典实现
    本文详细介绍了Redis中字典的实现机制,包括其底层数据结构、哈希表与哈希节点的关系、元素添加方法及rehash操作的具体流程。 ... [详细]
  • 微服务优雅上下线的最佳实践
    本文介绍了微服务上下线的正确姿势,避免使用 kill -9 等粗暴手段,确保服务的稳定性和可靠性。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • es的分布式原理?es是如何实现分布式的?
    Elasticsearch设计的理念是分布式搜索引擎,底层其实是基于lucene。核心思 ... [详细]
  • Flume 数据采集组件
    目录1、数据收集工具系统产生背景2、专业的数据收集工具2.1、Chukwa2.2、Scribe2.3、Fluentd2.4、Logstash2.5、ApacheFlu ... [详细]
  • mysql+全文检索设计,基于sphinx+mysql全文检索架构设计.doc
    基于sphinxmysql全文检索架构设计.doc还剩2页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,喜欢就下载吧& ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • ES基本原理名词解释In-memorybuffer:ES内存缓冲区,新建的document写入的地方document:索引和搜索的 ... [详细]
author-avatar
麦豪小仙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有