1、Elasticsearch单机与集群的安装(包安装、二进制安装与Docker安装)
  XsWF2uh32RxR 2023年11月02日 50 0

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
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

XsWF2uh32RxR