Elasticsearch
Elasticsearch是一个实时的全文搜索,存储库和分析引擎
https://www.elastic.co/cn/what-is/elasticsearch
Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,可用于多种场景:
应用程序搜索 网站搜索 企业搜索 日志处理和分析 基础设施指标和容器监测 应用程序性能监测 地理空间数据分析和可视化 安全分析 业务分析
Elasticsearch 部署和管理
https://www.elastic.co/guide/en/elasticsearch/reference/master/installelasticsearch.html
1、安装前准备
安装前初始化环境
CPU 2C内存4G或更多
操作系统: Ubuntu20.04,Ubuntu18.04,Rocky8.X,Centos 7.X
操作系统盘50G
主机名设置规则为nodeX.wang.org
生产环境建议准备单独的数据磁盘
1、主机名
各服务器配置自己的主机名
[root@ubuntu2004 ~]# hostnamectl set-hostname es-node1.wang.org
2、关闭防火墙和SELinux
关闭防所有服务器的防火墙和 SELinux
[root@es-node1 ~]# systemctl disable firewalld
[root@es-node1 ~]# systemctl disable NetworkManager
[root@es-node1 ~]# set -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config [root@es-node1 ~]# reboot
3、各服务器配置本地域名解析
[root@es-node1 ~]# vim /etc/hosts
10.0.0.101 es-node1.wang.org
10.0.0.102 es-node2.wang.org
10.0.0.103 es-node3.wang.org
4、优化资源限制配置
修改内核参数
内核参数 vm.max_map_count 用于限制一个进程可以拥有的
使用默认系统配置,二进制安装时会提示错误,包安装会自动修改此配置
#查看默认值
[root@es-node1 ~]# sysctl -a |grep vm.max_map_count
vm.max_map_count = 65530
#修改配置
[root@es-node1 ~]# echo "vm.max_map_count = 262144" >> /etc/sysctl.conf
[root@es-node1 ~]# sysctl -p
Ubuntu 基于包安装后会自动修改文件
[root@node1 ~]# cat /usr/lib/sysctl.d/elasticsearch.conf
vm.max_map_count=262144
5、修改资源限制配置,把下面内容粘贴到文件中
[root@es-node1 ~]#vim /etc/security/limits.conf
* soft core unlimited
* hard core unlimited
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft memlock 32000
* hard memlock 32000
* soft msgqueue 8192000
* hard msgqueue 8192000
6、安装 Java 环境 (可选)
安装7.X以后版本官方建议要安装集成JDK的包,所以无需再专门安装JDK
2、下载安装包,包安装(清华源下载、安装)
1、下载[root@es-node1 ~]# https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/apt/pool/main/e/elasticsearch/elasticsearch-7.17.5-amd64.deb
2、安装
[root@es-node1 ~]# dpkg -i elasticsearch-7.17.5-amd64.deb
[root@es-node1 ~]# systemctl daemon-reload
[root@es-node1 ~]# systemctl enable --now elasticsearch.service
3、查看端口号
[root@es-node1 ~]# ss -ntl
9200端口
3、修改配置文件
[root@es-node1 ~]# grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml
#ELK集群名称,单节点无需配置,同一个集群内每个节点的此项必须相同,新加集群的节点此项和其它节点相同即可加入集群,而无需再验证
cluster.name: ELK-Cluster
#当前节点在集群内的节点名称,同一集群中每个节点要确保此名称唯一
node.name: es-node1 #ES
数据保存目录,包安装默认路径:/var/lib/elasticsearch/
path.data: /data/es-data
#ES日志保存目录,包安装默认路径:/var/llog/elasticsearch/
path.logs: /data/es-logs
#服务启动的时候立即分配(锁定)足够的内存,防止数据写入swap,提高启动速度,但是true会导致启动失败,需要优化
bootstrap.memory_lock: true
#指定该节点监听IP,如果绑定了错误的IP,可将此修改为指定IP
network.host: 0.0.0.0
#监听端口
http.port: 9200
#发现集群的node节点列表,可以添加部分或全部节点IP
#在新增节点到已有集群时,此处需指定至少一个已经在集群中的节点地址
discovery.seed_hosts: ["10.0.0.101","10.0.0.102","10.0.0.103"]
#集群初始化时指定希望哪些节点可以被选举为 master,只在初始化时使用,新加节点到已有集群时此项可不配置 cluster.initial_master_nodes: ["10.0.0.101","10.0.0.102","10.0.0.103"]
#一个集群中的 N 个节点启动后,才允许进行数据恢复处理,默认是1,一般设为为所有节点的一半以上,防止 出现脑裂现象 #当集群无法启动时,可以将之修改为1,或者将下面行注释掉,实现快速恢复启动 gateway.recover_after_nodes: 2
#设置是否可以通过正则表达式或者_all匹配索引库进行删除或者关闭索引库,默认true表示必须需要明确指定索引库名称,不能使用正则表达式和_all,生产环境建议设置为 true,防止误删索引库. action.destructive_requires_name: true
#如果不参与主节点选举设为false,默认值为true
node.master: false
#存储数据,默认值为true,此值为false则不存储数据而成为一个路由节点 #如果将原有的true改为false,需要先执行/usr/share/elasticsearch/bin/elasticsearch-node repurpose 清理数据
node.data: true
4、范例: 单节点配置
[root@ubuntu2004 ~]# 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"]
5、范例: 集群配置
[root@es-node1 ~]# grep -Ev '^$|#' /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster #集群名一样
node.name: es-node1 #当前节点在集群中的名称
path.data: /data/es-data #数据保存目录
path.logs: /data/es-logs #日志
bootstrap.memory_lock: true #启动服务时立即分配足够的内存,防止数据写入swap,提高启动速度
network.host: 0.0.0.0 #对外监听地址
discovery.seed_hosts: ["10.0.0.101","10.0.0.102","10.0.0.103"]#开机加入的集群节点 cluster.initial_master_nodes: ["10.0.0.101","10.0.0.102","10.0.0.103"]#初始化是哪些可被选为主
gateway.recover_after_nodes: 2 #集群中有多少个节点正常工作才允许集群对外提供服务,一半以上
action.destructive_requires_name: true #避免通过正则表达式进行删除或关闭索引库
6、把配置文件拷贝到其他节点并修改
[root@es-node1 ~]# scp /etc/elasticsearch/elasticsearch.yml es-node2:/etc/elasticsearch/
[root@es-node1 ~]# scp /etc/elasticsearch/elasticsearch.yml es-node3:/etc/elasticsearch/
修改
[root@es-node2 ~]# grep -Ev '^$|#' /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster
node.name: es-node2 #只需要修改此行,每个节点都不能相同
path.data: /data/es-data
path.logs: /data/es-logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.101","10.0.0.102","10.0.0.103"]
cluster.initial_master_nodes: ["10.0.0.101","10.0.0.102","10.0.0.103"]
gateway.recover_after_nodes: 2
action.destructive_requires_name: true
[root@es-node3 ~]# grep -Ev '^$|#' /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster
node.name: es-node3 #只需要修改此行,每个节点都不能相同
path.data: /data/es-data
path.logs: /data/es-logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.101","10.0.0.102","10.0.0.103"]
cluster.initial_master_nodes: ["10.0.0.101","10.0.0.102","10.0.0.103"]
gateway.recover_after_nodes: 2
action.destructive_requires_name: true
7、内存优化
推荐使用宿主机物理内存的一半,ES的heap内存最大不超过30G,26G是比较安全的
堆内存的初始值和最大值设置一样,
[root@es-node1 ~]# vim /etc/elasticsearch/jvm.options
-Xms30g
-Xmx30g
8、修改service文件,做优化配置
[root@es-node1 ~]# vim /usr/lib/systemd/system/elasticsearch.service #修改内存限制 LimitNOFILE=1000000 #修改最大打开的文件数,默认值为65535
LimitNPROC=65535 #修改打开最大的进程数,默认值为4096
LimitMEMLOCK=infinity #无限制使用内存,以前旧版需要修改,否则无法启动服务,当前版本无需修改
9、自己指定的数据存放目录,更改目录权限
在各个ES服务器创建数据和日志目录并修改目录权限为elasticsearch
#此步可选,可以不用创建下面目录es-data和es-logs,系统可以自动创建
[root@es-node1 ~]# mkdir -p /data/es-{data,logs}
#必须分配权限,否则服务无法启动
[root@es-node1 ~]# chown -R elasticsearch.elasticsearch /data/
[root@es-node1 ~]# ll /data/
total 0
drwxr-xr-x 2 elasticsearch elasticsearch 6 Apr 18 18:44 es-data
drwxr-xr-x 2 elasticsearch elasticsearch 6 Apr 18 18:44 es-logs
启动服务
[root@es-node1 ~]# systemctl enable --now elasticsearch
9200端口为集群访问端口,9300端口为集群同步端口
二进制安装
下载二进制文件
https://www.elastic.co/cn/downloads/elasticsearch
范例:基于二进制包含JDK文件安装
[root@ubuntu2004 ~]#ls
elasticsearch-7.6.2-linux-x86_64.tar.gz
[root@ubuntu1804 ~]#tar xf elasticsearch-7.6.2-linux-x86_64.tar.gz -C /usr/local/ [root@ubuntu1804 ~]#ls /usr/local/
bin elasticsearch-7.6.2 etc games include lib man sbin share src
[root@ubuntu2004 ~]#ln -s /usr/local/elasticsearch-7.6.2/ /usr/local/elasticsearch [root@ubuntu2004 ~]#ls /usr/local/elasticsearch
bin config jdk lib LICENSE.txt logs modules NOTICE.txt plugins README.asciidoc
编辑服务配置文件
[root@es-node1 ~]# grep -Ev '^$|#' /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster #集群名一样
node.name: es-node1 #当前节点在集群中的名称
path.data: /data/es-data #数据保存目录
path.logs: /data/es-logs #日志
bootstrap.memory_lock: true #启动服务时立即分配足够的内存,防止数据写入swap,提高启动速度
network.host: 0.0.0.0 #对外监听地址
discovery.seed_hosts: ["10.0.0.101","10.0.0.102","10.0.0.103"]#开机加入的集群节点 cluster.initial_master_nodes: ["10.0.0.101","10.0.0.102","10.0.0.103"]#初始化是哪些可被选为主
gateway.recover_after_nodes: 2 #集群中有多少个节点正常工作才允许集群对外提供服务,一半以上
action.destructive_requires_name: true #避免通过正则表达式进行删除或关闭索引库
把配置文件拷贝到其他节点并修改
[root@es-node1 ~]# scp /etc/elasticsearch/elasticsearch.yml es-node2:/etc/elasticsearch/
[root@es-node1 ~]# scp /etc/elasticsearch/elasticsearch.yml es-node3:/etc/elasticsearch/
修改
[root@es-node2 ~]# grep -Ev '^$|#' /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster
node.name: es-node2 #只需要修改此行,每个节点都不能相同
path.data: /data/es-data
path.logs: /data/es-logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.101","10.0.0.102","10.0.0.103"]
cluster.initial_master_nodes: ["10.0.0.101","10.0.0.102","10.0.0.103"]
gateway.recover_after_nodes: 2
action.destructive_requires_name: true
[root@es-node3 ~]# grep -Ev '^$|#' /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster
node.name: es-node3 #只需要修改此行,每个节点都不能相同
path.data: /data/es-data
path.logs: /data/es-logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.101","10.0.0.102","10.0.0.103"]
cluster.initial_master_nodes: ["10.0.0.101","10.0.0.102","10.0.0.103"]
gateway.recover_after_nodes: 2
action.destructive_requires_name: true
内存优化
推荐使用宿主机物理内存的一半,ES的heap内存最大不超过30G,26G是比较安全的
堆内存的初始值和最大值设置一样,
[root@es-node1 ~]# vim /etc/elasticsearch/jvm.options
-Xms30g
-Xmx30g
创建用户并更改目录权限
在所有节点上创建用户
[root@es-node1 ~]# useradd -r elasticsearch
在所有节点上创建数据和日志目录并修改目录权限为elasticsearch
#此步可选,可以不用创建下面目录es-data和es-logs,系统可以自动创建
[root@es-node1 ~]# mkdir -p /data/es-{data,logs}
#必须分配权限,否则服务无法启动
[root@es-node1 ~]# chown -R elasticsearch.elasticsearch /data/
[root@es-node1 ~]# ll /data/
total 0
drwxr-xr-x 2 elasticsearch elasticsearch 6 Apr 18 18:44 es-data
drwxr-xr-x 2 elasticsearch elasticsearch 6 Apr 18 18:44 es-logs
#修改elasticsearch安装目录权限
[root@es-node1 ~] #chown -R elasticsearch.elasticsearch /usr/local/elasticsearch/
启动 Elasticsearch服务
在所有节点上配置并启动
[root@es-node1 ~]#echo 'PATH=/usr/local/elasticsearch/bin:$PATH' > /etc/profile.d/elasticsearch.sh
[root@es-node1 ~]#. /etc/profile.d/elasticsearch.sh
[root@es-node1 ~]#tail -f /data/es-logs/es-cluster.log
#不能以root用户运行,切换用户
[root@es-node1 ~]#su - elasticsearch
验证端口监听成功
在所有节点上验证端口
[root@es-node1 ~]#ss -ntlp|grep java
LISTEN 0 128 *:9200 *:* users:(("java",pid=2372,fd=225)) LISTEN 0 128 *:9300 *:* users:(("java",pid=2372,fd=211))
创建service文件
[root@ubuntu-node1 ~]#grep -Ev '^$|#' /usr/lib/systemd/system/elasticsearch.service [Unit]
Description=Elasticsearch
Documentation=https://www.elastic.co
Wants=network-online.target
After=network-online.target
[Service]
Type=notify
RuntimeDirectory=elasticsearch
PrivateTmp=true
Environment=ES_HOME=/usr/share/elasticsearch Environment=ES_PATH_CONF=/etc/elasticsearch Environment=PID_DIR=/var/run/elasticsearch
Environment=ES_SD_NOTIFY=true
EnvironmentFile=-/etc/default/elasticsearch WorkingDirectory=/usr/share/elasticsearch
User=elasticsearch
Group=elasticsearch
ExecStart=/usr/share/elasticsearch/bin/systemd-entrypoint -p ${PID_DIR}/elasticsearch.pid --quiet
StandardOutput=journal
StandardError=inherit
LimitNOFILE=65535
LimitNPROC=4095
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
TimeoutStartSec=75
[Install]
WantedBy=multi-user.target
[root@es-node1 ~]#systemctl daemon-reload
[root@es-node1 ~]#systemctl enable --now elasticsearch.service
基于Docker部署
单节点部署
[root@ubuntu2004 ~]#docker run --name es-single-node -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2
多节点集群部署
部署前准备 注意:此方式需要3G以上内存,否则会出现OOM的信息
修改内核参数,默认无法启动,会出现错误提示
[root@ubuntu1804 ~]#echo vm.max_map_count=262144 >> /etc/sysctl.conf [root@ubuntu1804 ~]#sysctl -p
创建docker-compose.yml文件
[root@ubuntu2004 ~]#cat docker-compose.yml
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
启动集群
[root@ubuntu2004 ~]#docker-compose up -d
标签:10.0,root,data,Elasticsearch,node1,elasticsearch,Docker,安装,es
From: https://blog.51cto.com/mfc001/6565303