草庐IT

【ES实战】Elasticsearch6.7的安装部署卸载-RPM方式

顧棟 2023-04-14 原文

Elasticsearch6.7的安装部署卸载-RPM方式

文章目录

环境准备

操作系统:CentOS 7.X

rpm安装包:官网下载地址 elasticsearch-6.7.2.rpm

JDK: 官网下载地址 JDK1.8

systemctl命令:通过此命令ps -p 1,检查自己的Linux系统是否可以使用systemctl指令。

结果如下,说明可以使用systemd指令。

[root@tttt~]# ps -p 1
  PID TTY          TIME CMD
    1 ?        00:00:09 systemd

系统调优

  1. 修改/etc/security/limits.conf

    vim /etc/security/limits.conf
    

    增加以下配置

    elasticsearch nproc 4096
    elasticsearch nofile 65535
    elasticsearch soft memlock unlimited
    elasticsearch hard memlock unlimited
    
  2. 修改/etc/sysctl.conf

    增加以下配置

    vm.max_map_count=262144
    vm.swappiness=0
    vm.overcommit_memory=1
    vm.zone_reclaim_mode=0
    net.ipv4.tcp_retries2=5
    

优化项说明

配置描述
elasticsearch nproc 4096确保elasticsearch用户可以创建的线程数至少为 4096
elasticsearch nofile 65535Elasticsearch 使用大量文件描述符或文件句柄。 用完文件描述符可能是灾难性的,很可能会导致数据丢失。 确保将运行 es 的用户的打开文件描述符数量限制增加到 65536 或更高。
elasticsearch soft memlock unlimitedallow user ‘elasticsearch’ mlockall
elasticsearch hard memlock unlimitedallow user ‘elasticsearch’ mlockall
vm.max_map_count=262144限制虚拟内存
vm.swappiness=01、Linux系统上可用的另一个选项是确保sysctl值vm.swappiness设置为1。这减少了内核的交换倾向,在正常情况下不会导致交换,同时仍允许整个系统在紧急情况下交换。
2、1是elsatic官网的建议,但是我们一般都是禁止使用swappiness,所以直接将vm.swappiness设置为0。
vm.overcommit_memory=1内存分配控制
vm.zone_reclaim_mode=0这个参数可以取值0,1,3,4。
0表示在local内存不够用的情况下可以去其他的内存区域分配内存;
1表示在local内存不够用的情况下本地先回收再分配;
3表示本地回收尽可能先回收文件缓存对象;
4表示本地回收优先使用swap回收匿名内存。由此可见,将其设为0可以降低swap发生的概率。
net.ipv4.tcp_retries2=5TCP重传超时。(此设置适用于所有TCP连接,也会影响与Elasticsearch集群以外的系统的通信可靠性。如果集群通过低质量网络与外部系统通信,则可能需要为net.ipv4.tcp_retrys2选择更高的值。)

安装操作

  1. 将JDK的tar包解压到/opt/software路径下,得到jdk1.8.0_131。将JDK做成软连接到系统目录/usr/bin中,或者将JDK配置到环境变量中

    # 采用已解压的JDK 将java注册到/usr/bin
    [root@demo ~]# ln -s /opt/software/jdk1.8.0_131/bin/java /usr/bin/java
    
  2. 执行rpm安装程序

    # 执行安装
    # 将rpm包copy至/usr/local目录
    [root@demo ~]# mv /opt/elasticsearch-6.7.2.rpm /usr/local/elasticsearch-6.7.2.rpm
    [root@demo ~]# rpm -ivh /usr/local/elasticsearch-6.7.2.rpm
    

    执行结果如下:

    [root@demo ~]# rpm -ivh /usr/local/elasticsearch-6.7.2.rpm
    警告:/usr/local/elasticsearch-6.7.2.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
    准备中...                          ################################# [100%]
    Creating elasticsearch group... OK
    Creating elasticsearch user... OK
    正在升级/安装...
       1:elasticsearch-0:6.7.2-1          ################################# [100%]
    ### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
     sudo systemctl daemon-reload
     sudo systemctl enable elasticsearch.service
    ### You can start elasticsearch service by executing
     sudo systemctl start elasticsearch.service
    Created elasticsearch keystore in /etc/elasticsearch
    

    Elasticsearch在安装后不会自动启动。通过systemd启动和停止Elasticsearch。

    根据elasticsearch-6.7.2.rpm中的配置,默认情况下:

    • rpm安装之后elasticsearch的程序位置/usr/share/elasticsearch

    • rpm安装之后elasticsearch的配置文件的位置/etc/elasticsearch

    • rpm安装之后elasticsearch默认日志文件的位置/var/log/elasticsearch

  3. 注册elasticsearch.service,可以在/etc/systemd/system/multi-user.target.wants目录下,查到注册的elasticsearch.service。

    # 注册elasticsearch.service
    [root@demo ~]# sudo systemctl daemon-reload
    [root@demo ~]# sudo systemctl enable elasticsearch.service
    # 进入 systemd目录 查看elasticsearch服务
    [root@demo ~]# ll /etc/systemd/system/multi-user.target.wants
    
  4. 修改elasticsearch配置

    1. 新建日志目录和数据目录

      # 创建需要更改的路径
      [root@demo ~]# mkdir -p /opt/software/elasticsearch/data
      [root@demo ~]# mkdir -p /opt/software/elasticsearch/log
      
    2. elasticsearch.yml配置项

      # 修改相关配置文件
      [root@demo ~]# vim /etc/elasticsearch/elasticsearch.yml
      

      单机配置项说明

      # 集群名称
      cluster.name: es-cluster-demo
      
      # 节点名称
      node.name: es-cluster-demo-node-1
      
      # 节点角色
      node.master: true
      node.data: true
      # 数据路径
      path.data: /opt/software/elasticsearch/data
      
      # 日志路径
      path.logs: /opt/software/elasticsearch/log
      
      # 内存锁
      bootstrap.memory_lock: true
      bootstrap.system_call_filter: false
      
      # 绑定地址 本机IP
      network.host: 192.168.0.1
      
      # 服务HTTP与TCP端口,跨域
      http.port: 9600
      transport.tcp.port: 9601
      http.cors.enabled: true
      http.cors.allow-origin: "*"
      # 广播发现 网关地址一般是拥有master角色的地址
      discovery.zen.ping.unicast.hosts: ["192.168.0.1"]
      
      # 线程优化配置项
      thread_pool:
        bulk:
          size: 20
          queue_size: 2000
          
        search:
          size: 100
          queue_size: 2000
      
        index:
          size: 20
          queue_size: 2000
      

      集群部署需要增加以下配置

      # 广播发现 网关地址一般是拥有master角色的地址
      discovery.zen.ping.unicast.hosts: ["192.168.0.1","192.168.0.2","192.168.0.3"]
      # 选主投票需要拥有的最低节点数(拥有master角色的节点),通过配置大多数节点(符合主控条件的节点总数/2+1)来防止 "脑裂"。
      discovery.zen.minimum_master_nodes: 2
      discovery.zen.fd.connect_on_network_disconnect: true
      discovery.zen.ping_timeout: 30s
      discovery.zen.fd.ping_timeout: 120s
      discovery.zen.fd.ping_retries: 6
      discovery.zen.fd.ping_interval: 5s
      
      gateway.expected_nodes: 3
      #设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。
      gateway.expected_master_nodes: 3
      #和上一条基本相同不过这个参数限定了必须是master节点
      gateway.expected_data_nodes: 3
      #和第一条基本相同不过这个参数限定了必须是data节点
      gateway.recover_after_time: 5m
      #这个参数从另一个维度进行了数据恢复的限定,配置等待时间,节点从上线到心跳交流有一个时间过程。如果在限定的时间内指定的node数量未达到,则集群开始等待5-7的条件,如果未设置则开始数据恢复。只要设置了任意一个expected_nodes参数,启用默认时间5m。和expected_nodes配置不冲突,那个配置的条件先达到那个配置就提前生效。
      gateway.recover_after_nodes: 2
      #只要有足够的节点数量就开始恢复数据。足够就是此参数配置的值
      gateway.recover_after_master_nodes: 2
      #只要有足够的master节点数量就开始恢复数据。足够就是此参数配置的值
      gateway.recover_after_data_nodes: 2
      #只要有足够的data节点数量就开始恢复数据。足够就是此参数配置的值
      
    3. jvm.options配置项

      # 修改内存
      [root@demo ~]# vim /etc/elasticsearch/jvm.options
      

      配置项说明

      # 改成机器内存一半的大小 最大32G
      -Xms4g
      # 改成机器内存一半的大小 最大32G
      -Xmx4g
      
    4. 修改系统配置

  5. 启动elasticsearch服务

    [root@demo ~]# sudo systemctl start elasticsearch.service
    [root@demo ~]# sudo systemctl status elasticsearch.service
    

    如果未对系统进行优化,可能出现以下错误,详见 【错误总结】小节。

  6. 验证服务

    1. 查看集群健康状态

      [root@demo ~]# curl -XGET 'http://192.168.0.1:9600/_cat/health?v'
      
    2. 查看节点状态

      [root@demo ~]# curl -XGET 'http://192.168.0.1:9600/_cat/nodes?v&s=name'
      

错误总结

/opt/software/elasticsearch/log/my-application.log在日志文件中会出现以下错误

错误一:memlock unlimited

[2022-12-09T19:02:41,412][WARN ][o.e.b.JNANatives         ] [node-1] Unable to lock JVM Memory: error=12, reason=Cannot allocate memory
[2022-12-09T19:02:41,416][WARN ][o.e.b.JNANatives         ] [node-1] This can result in part of the JVM being swapped out.
[2022-12-09T19:02:41,417][WARN ][o.e.b.JNANatives         ] [node-1] Increase RLIMIT_MEMLOCK, soft limit: 65536, hard limit: 65536
[2022-12-09T19:02:41,417][WARN ][o.e.b.JNANatives         ] [node-1] These can be adjusted by modifying /etc/security/limits.conf, for example: 
	# allow user 'elasticsearch' mlockall
	elasticsearch soft memlock unlimited
	elasticsearch hard memlock unlimited

解决方式

修改vim /etc/security/limits.conf

* soft nofile 51200
* hard nofile 51200
* soft nproc 65536
* hard nproc 65536
* soft memlock unlimited
* hard memlock unlimited

错误二:memory is not locked

[2022-12-09T19:02:51,467][ERROR][o.e.b.Bootstrap          ] [node-1] node valida
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked

针对锁定内存配置增加以下内容

[root@demo ~]# systemctl edit elasticsearch
添加:
[Service]
LimitMEMLOCK=infinity

卸载

# 检查elasticsearch服务状态
systemctl status elasticsearch.service;
# 停止elasticsearch服务状态
systemctl stop elasticsearch.service;
# 提出elasticsearch服务
systemctl disable elasticsearch;
# 重载系统服务
systemctl daemon-reload;
# 查询rpm安装的elasticsearch
rpm -qa | grep elasticsearch;
# rpm卸载elasticsearch,elasticsearch-6.7.2-1.noarch名称 需要根据查询上一步查询结果来
rpm -e --nodeps elasticsearch-6.7.2-1.noarch;
# 删除残留文件
rm -rf /etc/elasticsearch;
# 删除elasticsearch自定义文件
rm -rf /opt/software/elasticsearch;

补充知识

systemctl 常用指令表格

/bin/systemctl daemon-reload:重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。

systemctl 常用指令表格

systemctl 指令说明举例
systemctl enable XXX.service使服务自启动systemctl enable elasticsearch.service
systemctl disable XXX.service使服务不自启动systemctl disable elasticsearch.service
systemctl status XXX.service检查服务状态,展示详细信息systemctl status elasticsearch.service
systemctl is-enable XXX.service仅仅显示是否activesystemctl is-enableelasticsearch.service
systemctl list-units --type=service显示所有已启动服务list-units --type=service
systemctl start XXX.service启动服务systemctl start elasticsearch.service
systemctl stop XXX.service停止服务systemctl stop elasticsearch.service
systemctl restart XXX.service重启服务systemctl restart elasticsearch.service
systemctl reload XXX.service服务重新加载配置文件systemctl reload elasticsearch.service

RPM 包采用系统默认的安装路径

rpm安装不建议自定义路径

路径说明
/usr/bin普通可执行程序文件目录
/usr/sbin服务器执行程序文件和管理程序文件目录
/etc应用程序配置文件(安装目录)
/var/log日志文件目录
/usr/share/doc应用程序文档文件目录
/usr/share/man应用程序手册页文件目录
/usr/lib程序使用的动态函数库目录

有关【ES实战】Elasticsearch6.7的安装部署卸载-RPM方式的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  5. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  6. ruby - 如何为 emacs 安装 ruby​​-mode - 2

    我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

  7. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  8. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  9. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  10. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

随机推荐