原文:https://www.oubayun.com/centos-79-deploys-elasticsearch-791-standalone-version.html

写在前面的,原来不但算写这个了,因为原文已经写的很好了。但是原文现在访问起来有点慢,害怕原文哪天彻底不能访问了 所以就自己写一写把

 

001、ES基础知识

Elasticsearch是目前最流行的全文搜索引擎,它可以快速地存储、搜索和分析海量数据,维基百科、Github均在使用。Elasticsearch的底层是开源库Lucene,但是你没法直接用Lucene,必须自己写代码去调用它的接口。Elasticsearch是Lucene的封装,提供了REST API操作接口开箱即用。本文从零开始,讲解如何使用Elasticsearch搭建自己的全文搜索引擎。Elasticsearch既可以单机部署,也可以集群部署。这仅仅只是一个单机版简单安装入门教程,想要更多的了解Elasticsearch,可以参考其官方文档。

002、系统基础配置

# 数据盘配置

# 格式化

mkfs.ext4 /dev/sdb

# 临时挂载

mkdir /data

mount /dev/sdb /data

# 获取磁盘UUID信息

blkid | grep sdb

/dev/sdb: UUID="ecd05e62-2ec8-44c0-be25-0b4f5f88d74f" TYPE="ext4"

# 永久挂载

vi /etc/fstab

UUID=ecd05e62-2ec8-44c0-be25-0b4f5f88d74f /data ext4 defaults 0 0

# 临时禁用SELINUX

setenforce 0

# 永久禁用SELINUX

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 禁用防火墙

systemctl disable firewalld && systemctl stop firewalld && systemctl status firewalld

# 基础需求包安装

yum install wget unzip net-tools -y

 

003、ES安装与配置

安装ES

# 这里从华为云仓库下载,相对来说速度比较快

wget https://mirrors.huaweicloud.com/elasticsearch/7.9.1/elasticsearch-7.9.1-x86_64.rpm

yum localinstall elasticsearch-7.9.1-x86_64.rpm -y

配置ES

# ES官方建议内存设置为物理内存的一半

vi /etc/elasticsearch/jvm.options

-Xms8g

-Xmx8g

# 配置ES服务器参数

cat /etc/elasticsearch/elasticsearch.yml | grep -v "^#" | grep -v "^$"

# 集群名字

cluster.name: idc-es

# 节点名称

node.name: node-1

# ES数据存放目录

path.data: /data/esdata

# ES日志存放目录

path.logs: /data/eslogs

# 锁定物理内存地址,防止ES内存被交换出去,也就是避免ES使用swap交换分区,频繁的交换会导致IOPS变高,这里设置以后在启动ES服务的时候会出现报错的情况,在后面的[常见问题]中,会提供解决方法。但是建议不要配置这个东东了。直接关闭swap不就行了,所以我先注释了

# bootstrap.memory_lock: true

# 网络监听配置

network.host: 0.0.0.0

# 绑定端口

http.port: 9200

# 设置集群主节点

cluster.initial_master_nodes: ["node-1"]

# 设置ES允许跨域访问

http.cors.enabled: true

http.cors.allow-origin: "*"

http.cors.allow-headers: Authorization

# 启用ES安全认证

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true

# 因为木子调整了ES数据与日志存放位置,所以这里创建应对目录,并设置对应权限。

mkdir /data/esdata/

mkdir /data/eslogs/

chown -R elasticsearch:elasticsearch /data/es*

安装ES插件

ES所有插件的安装方法都是相同的,这里以安装analysis-ik中文分词插件为例,这个插件也是阿里云ES默认集成插件。安装插件的方法有两种:

直接使用命令安装

下载对应插件包、解包,放于ES插件目录。

# 方法一

/usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.1/elasticsearch-analysis-ik-7.9.1.zip

# 方法二

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.1/elasticsearch-analysis-ik-7.9.1.zip

mkdir /usr/share/elasticsearch/plugins/ik

unzip -d /usr/share/elasticsearch/plugins/ik ./elasticsearch-analysis-ik-7.9.1.zip

# 查看插件是否安装成功

/usr/share/elasticsearch/bin/elasticsearch-plugin list

启动ES服务

systemctl daemon-reload

systemctl enable elasticsearchsystemctl start elasticsearchsystemctl status elasticsearch

设置访问ES密码

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.

You will be prompted to enter passwords as the process progresses.

Please confirm that you would like to continue [y/N]y

Enter password for [elastic]:

Reenter password for [elastic]:

Enter password for [apm_system]:

Reenter password for [apm_system]:

Enter password for [kibana_system]:

Reenter password for [kibana_system]:

Enter password for [logstash_system]:

Reenter password for [logstash_system]:

Enter password for [beats_system]:

Reenter password for [beats_system]:

Enter password for [remote_monitoring_user]:

Reenter password for [remote_monitoring_user]:

Changed password for user [apm_system]

Changed password for user [kibana_system]

Changed password for user [kibana]

Changed password for user [logstash_system]

Changed password for user [beats_system]

Changed password for user [remote_monitoring_user]

Changed password for user [elastic]

004、ES可视化工具

ES可视化工具最简单的方法就是使用Chrome浏览器插件elasticsearch-head,还可以单独安装Kibana。

Elasticsearch-head

友情提示:Chrome网上商店需要vpn才可以打开

Chrome浏览器插件:elasticsearch-head,此插件需要从Chrome网上商店下载。也就是下面这个。

Chrome网上商店的地址:

https://chrome.google.com/webstore/search/ElasticSearch%20Head?hl=zh-CN

 

 

005、Kibana安装与配置

安装Kibana

wget https://mirrors.huaweicloud.com/kibana/7.9.1/kibana-7.9.1-x86_64.rpm

yum localinstall kibana-7.9.1-x86_64.rpm -y

配置Kibana

cat /etc/kibana/kibana.yml | grep -v "^#" | grep -v "^$"

# 设置监听

server.host: "0.0.0.0"

# 设置ES服务器

elasticsearch.hosts: ["http://127.0.0.1:9200"]

# 设置ES认证账号密码

elasticsearch.username: "elastic"

elasticsearch.password: "xxx"

# 设置语言为中文

i18n.locale: "zh-CN"

# 配置Kibana的堆大小

# 对于在Kibana 7.6.X版本上的安装,建议增加Kibana的堆大小以确保正常安装Kibana的插件:

vi /etc/default/kibana

NODE_OPTIONS="--max_old_space_size=2048"

启动Kibana

systemctl daemon-reload

systemctl enable kibana.servicesystemctl start kibana.servicesystemctl status kibana.service

 

 

WEB访问Kibana

默认Kibana端口为5601,访问地址:http://IP:5601,账号密码即登录ES账号密码。

 

 

 

006、常见问题

bootstrap checks failed

如前面所述在ES上启用bootstrap.memory_lock: true后,启动ES服务,会出现以下错误:

systemctl status elasticsearch

ERROR: [1] bootstrap checks failed

[1]: memory locking requested for elasticsearch process but memory is not locked

ERROR: Elasticsearch did not exit normally - check the logs at /data/eslogs/idc-es.log

解决方法CentOS 6及以下版本:

vi /etc/security/limits.conf

* soft memlock unlimited

* hard memlock unlimited

# 这里的*代表所有用户,可以更换为指定用户名

# 另:这里有个坑就是如果/etc/security/limits.d文件夹下有配置文件,那么会覆盖刚才修改的文件,所以请确保该目录没有其它文件。

# 修改/etc/sysctl.conf

sudo echo "vm.swappiness=0" >> /etc/sysctl.conf

sysctl -p

# 这个参数的作用是告诉Linux内核尽量少使用swap分区,不等于禁用swap,通过少使用swap来提高性能。

# 重启服务器,生效配置

reboot

CentOS 7及以上版本:此方法适用于Systemd管理的发行版,在CentOS 7系统中,使用Systemd替代了之前的SysV,/etc/security/limits.conf文件的配置作用域缩小了,/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对Systemd的service的资源限制不生效。对于systemd service的资源限制,如何配置呢?全局的配置放在文件/etc/systemd/system.conf和/etc/systemd/user.conf。 同时,也会加载两个对应的目录中的所有.conf文件/etc/systemd/system.conf.d/*.conf和 /etc/systemd/user.conf.d/*.conf。其中system.conf是系统实例使用的,user.conf用户实例使用的。一般sevice使用system.conf中的配置即可。systemd.conf.d/*.conf中配置会覆盖system.conf。

# 全局生效方式

vi /etc/systemd/system.conf

DefaultLimitNOFILE=65536

DefaultLimitNPROC=32000

DefaultLimitMEMLOCK=infinity

# 局部生效方式:(针对包管理器安装elasticsearch的形式)

systemctl edit elasticsearch

# 此命令会在/etc/systemd/system下创建elasticsearch.service.d/override.conf文件

# 添加如下内容

[Service]

LimitMEMLOCK=infinity

# 保存,退出,执行如下命令生效

sudo systemctl daemon-reload

echo "vm.swappiness=0" >> /etc/sysctl.conf

sysctl -p

# 查看限制是否生效

cat /proc/$(cat /var/run/elasticsearch/elasticsearch.pid)/limits

Limit Soft Limit Hard Limit Units

Max cpu time unlimited unlimited seconds

Max file size unlimited unlimited bytes

Max data size unlimited unlimited bytes

Max stack size 8388608 unlimited bytes

Max core file size 0 unlimited bytes

Max resident set unlimited unlimited bytes

Max processes 4096 4096 processes

Max open files 65535 65535 files

Max locked memory unlimited unlimited bytes

Max address space unlimited unlimited bytes

Max file locks unlimited unlimited locks

Max pending signals 63955 63955 signals

Max msgqueue size 819200 819200 bytes

Max nice priority 0 0

Max realtime priority 0 0

Max realtime timeout unlimited unlimited us

Unassigned 警告

 因为部署的是单节点,而默认ES模板创建的时候会设置副本数为1,这样就会出现Unassigned_shards问题,集群状态变成yellow,解决这个问题的方法有几种:

扩容ES集群

修改ES创建索引的默认模板副本数为0

在手动创建索引的时候指定副本数为0

手动修改已创建的索引副本数为0

 

如上图所示,已创建的索引出现了Unassigned问题,我们先查看一下对应的索引配置,可以看到number_of_replicas为1

# 查看指定索引副本数

root@iZ2zectqa75n2gzg8jsr45Z ~]# curl --user username:password -XGET http://localhost:9200/<索引名称>/_settings | jq

{

"索引名称": {

"settings": {

"index": {

"creation_date": "160933944887",

"number_of_shards": "1",

# 副本数

"number_of_replicas": "1",

"uuid": "GGmkdaBzdasddaC_46A",

"version": {

"created": "7090199"

},

"provided_name": "索引名称"

}

}

}

}

# 修改指定索引副本数

curl --user username:password -H "Content-Type: application/json;charset=UTF-8" -XPUT 'http://localhost:9200/<索引名称>/_settings' -d '{

"index": {

"number_of_replicas": "0"

}

}'

# 结果返回如下所示,即为成功

{"acknowledged":true}

# 修改所有索引副本数为0

curl --user username:password -H "Content-Type: application/json;charset=UTF-8" -XPUT 'http://localhost:9200/_settings' -d '{

"index": {

"number_of_replicas": "0"

}

}'

 

 

 

查看原文