# ElasticSearch7.x單機版安裝
## 1.前置準備
相關文檔:
* 官網:[傳送門](https://www.elastic.co/)
* 官網文檔:[傳送門](https://www.elastic.co/guide/index.html)
* 中文手冊:[傳送門](https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html)
* 中文社區:[傳送門](https://elasticsearch.cn/)
* Jave-Client :[傳送門](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.x/java-rest-high-create-index.html)
## 2.下載安裝包
官方下載地址:[傳送門](https://www.elastic.co/cn/downloads/elasticsearch)
歷史版本下載:[傳送門](https://www.elastic.co/cn/downloads/past-releases#elasticsearch)
本文以7.4.0為例:[7.4.0下載地址](https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-2-0)
命令下載
~~~bash
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
~~~
## 3.解壓
~~~perl
#解壓到自定義目錄tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /usr/local
~~~

標題
Elasticsearch 7.x 目錄結構如下:
* bin :腳本文件,包括 ES 啟動 & 安裝插件等等
* config : elasticsearch.yml(ES 配置文件)、jvm.options(JVM 配置文件)、日志配置文件等等
* JDK : 內置的 JDK,JAVA\_VERSION="13"
* lib : 類庫
* logs : 日志文件
* modules : ES 所有模塊,包括 X-pack 等
* plugins : ES 已經安裝的插件。默認沒有插件
## 4.創建數據存儲目錄與日志存儲目錄
~~~bash
# 創建數據存儲目錄mkdir -p /usr/local/elasticsearch-7.4.0/data# 創建日志存儲目錄mkdir -p /usr/local/elasticsearch-7.4.0/logs
~~~
## 5.修改配置
進入到es安裝目錄下的config文件夾中,修改elasticsearch.yml 文件
~~~bash
#配置es的集群名稱,同一個集群中的多個節點使用相同的標識(單機版可不配置)#如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群。cluster.name: my-es #節點名稱node.name: node-1 #初始化,master節點名cluster.initial_master_nodes: node-1 #數據存儲路徑path.data: /usr/local/elasticsearch-7.4.0/data#日志存儲路徑path.logs: /usr/local/elasticsearch-7.4.0/logs #節點所綁定的IP地址,并且該節點會被通知到集群中的其他節點#通過指定相同網段的其他節點會加入該集群中 0.0.0.0任意IP都可以訪問elasticsearchnetwork.host: 0.0.0.0 #對外提供服務的http端口,默認為9200http.port: 9200#設置集群中master節點的初始列表,可以通過這些節點來自動發現新加入集群的節點discovery.seed_hosts: ["127.0.0.1:9200"] #ES默認開啟了內存地址鎖定,為了避免內存交換提高性能。但是Centos6不支持SecComp功能,啟動會報錯,所以需要將其設置為falsebootstrap.memory_lock: false # 是否支持跨域http.cors.enabled: true # *表示支持所有域名http.cors.allow-origin: "*"
~~~
修改啟動內存(可選配置)
切換到 conf/
打開 vim jvm.options

## 6.啟動與關閉
### 啟動
切換到 elasticsearch-7.4.0/bin/ 目錄下
~~~bash
# -d參數表示以后臺進程啟動,默認情況下會在控制臺輸出日志。./elasticsearch -d
~~~
注:啟動時若出現報錯,請到文末處,查看常見啟動問題。
### 關閉
~~~perl
# 查找ES進程ps -ef | grep elastic#殺掉ES進程kill -9 xxx(進程號)
~~~
驗證是否啟動成功
除了查看進程外還可以在瀏覽器輸入 IP:9210
可以看到返回了一個JSON信息

重點幾個關注下即可:
name : 默認啟動的時候指定了 ES 實例名稱,name 為 BYSocketdeMacBook-Pro-2.local
cluster\_name : 默認名為 elasticsearch
version :版本信息
## 7.設置開機自啟
### 7.1.創建啟動腳本
在/etc/init.d目錄下新建elastisearch啟動腳本文件
~~~csharp
vim /etc/init.d/elasticsearch
~~~
腳本加入如下內容
~~~bash
#!/bin/bash#chkconfig: 2345 80 90#description: elasticsearch#processname: elasticsearch-7.4.0 #服務名稱export SERVER_NAME=elasticsearch#ES啟動用戶名export ES_USER=elasticsearch#ES目錄export ES_HOME=/usr/local/elasticsearch-7.4.0 function help() { echo "$0 |start|stop|restart|status|"} #查看服務狀態function status(){ count=`ps -ef | grep "$SERVER_NAME" | grep -v "$0\|grep\|su $ES_USER" | awk '{print $2}' | wc -l` if [ 0 == $count ];then echo "$SERVER_NAME not exists" else ps -ef | grep "$SERVER_NAME" | grep -v "$0\|grep\|su $ES_USER" fi} #啟動服務function start(){ #檢查服務是否已經存在 count=`ps -ef | grep "$SERVER_NAME" | grep -v "$0\|grep\|su $ES_USER" | awk '{print $2}' | wc -l` if [ $count \> 0 ];then echo "$SERVER_NAME exists run restart" stop; fi; cd "$ES_HOME" echo "ES HOME IN $ES_HOME" echo "$SERVER_NAME start begin ........." su - $ES_USER -c "$ES_HOME/bin/elasticsearch -d" sleep 1 echo "$SERVER_NAME start end ......... home in $ES_HOME"} # 停止服務function stop(){ count=`ps -ef | grep "$SERVER_NAME" | grep -v "$0\|grep\|su $ES_USER" | awk '{print $2}' | wc -l` if [ 0 == $count ];then echo "$SERVER_NAME not exists" else echo "$SERVER_NAME stop begin ........." threads=$(ps -ef | grep "$SERVER_NAME" | grep -v "$0\|grep\|su $ES_USER" | awk '{print $2 }') for id in $threads do kill -9 $id echo "kill success $id " done echo "$SERVER_NAME stop success ........." fi} # 重啟服務function restart(){ stop; sleep 1; start;} if [ "$1" == "" ]; then helpelif [ "$1" == "stop" ];then stopelif [ "$1" == "start" ];then startelif [ "$1" == "restart" ];then restartelif [ "$1" == "status" ];then statuselse helpfi
~~~
### 7.2.修改腳本權限
~~~bash
# 為腳本賦可執行權限chmod 777 /etc/init.d/elasticsearch
~~~
### 7.3.啟動和關閉服務
~~~javascript
service elasticsearch status // 查看服務狀態service elasticsearch start // 啟動服務service elasticsearch stop // 關閉服務service elasticsearch restart // 重啟服務
~~~
### 7.4添加到啟動服務
~~~csharp
chkconfig --add elastisearch
~~~
### 7.5服務啟動方式配置
~~~csharp
chkconfig --list //顯示服務列表 chkconfig elastisearch on // 設置開機啟動chkconfig elastisearch off // 關閉開機啟動
~~~
## 附錄: 常見問題
### 1.啟動賬戶問題
注意:默認不允許使用root賬戶啟動。

**解決方案:**
創建用戶:elasticsearch
~~~undefined
adduser elasticsearch
~~~
設置用戶密碼,需要輸入兩次
~~~undefined
passwd elasticsearch
~~~
將對應的文件夾權限賦給該用戶
~~~perl
chown -R elasticsearch /usr/local/elasticsearch-7.4.0
~~~
切換至elasticsearch用戶
~~~undefined
su elasticsearch
~~~
~~~html
進入啟動目錄啟動
~~~
~~~bash
cd /usr/local/elasticsearch-7.4.0/bin ./elasticsearch # 后臺啟動# ./elasticsearch -d
~~~
### 2.內存與進程相關
2.1 max virtual memory areas vm.max\_map\_count \[65530\] likely too low, increase to at least \[262144\]

**解決方案:**切換到root用戶修改配置sysctl.conf
~~~bash
vi /etc/sysctl.conf
~~~
~~~html
添加下面配置:
~~~
~~~undefined
vm.max_map_count=262144
~~~
保存退出,并執行命令:
~~~css
sysctl -p
~~~
然后,重新啟動elasticsearch
2.2 max file descriptors \[4096\] for elasticsearch process likely too low, increase to at least \[65536\]
**解決方案:**
~~~html
#切換到root 用戶修改
~~~
~~~bash
vim /etc/security/limits.conf
~~~
~~~r
#在文件末尾添加如下內容:* soft nofile 65536* hard nofile 65536
~~~
2.3max number of threads \[1024\] for user \[lish\] likely too low, increase to at least \[2048\]
解決方案:切換到root用戶,進入limits.d目錄下修改配置文件。
~~~groovy
vi /etc/security/limits.d/90-nproc.conf
~~~
修改如下內容:
~~~bash
* soft nproc 1024
~~~
#修改為
~~~bash
soft nproc 2048
~~~
### 3.JDK問題

關于JDK
elasticsearch需要JDK環境,7.x版本后自帶JDK,可以使用以下命令查看版本
~~~groovy
/usr/local/elasticsearch-7.4.0/jdk/bin/java -version
~~~
7.4.0自帶的JDK版本是 openjdk 13

4.啟動后常見錯誤


解決方案:
在每個配置文件指定初始節點:
~~~undefined
cluster.initial_master_nodes: node-1
~~~
### 4.修改啟動內存
官網也介紹了如何[**設置堆大小**](https://www.elastic.co/guide/en/elasticsearch/reference/current/jvm-options.html)。
默認情況,ES 告訴 JVM 使用一個最小和最大都為 1GB 的堆。但是到了生產環境,這個配置就比較重要了,確保 ES 有足夠堆空間可用。
ES 使用`Xms(minimum heap size)`和`Xmx(maxmimum heap size)`設置堆大小。你應該將這兩個值設為同樣的大小。
**`Xms`和`Xmx`不能大于你物理機內存的 50%。**
設置的示例:
切換到 conf/
打開 vim jvm.options

- 第一章 ElasticSearch基本概念
- 第二章 ElasticSearch7.x單機版安裝
- 第三章 ElasticSearch7.x高可用集群版搭建
- 第四章 Elasticsearch7.x配置文件詳解
- 第五章 Elasticsearch客戶端工具之kibana
- 第六章 Elasticsearch客戶端工具之ES-Head
- 6.1 es-head工具使用介紹
- 第七章 ElasticSearch7.x安全性之訪問密碼設置
- 第八章 Elasticsearch7.xDSL語法之索引管理
- 第九章 Elasticsearch7.xDSL語法之文檔管理
- 第十章 Elasticsearch7.xDSL語法之查詢
- 第十一章 Elasticsearch7.xDSL語法之分頁查詢
- 第十二章 Elasticsearch7.xDSL語法之聚合查詢
- 第十三章 Elasticsearch7.xDSL語法實踐手冊
- 第十四章 Elasticsearch7.xSQL語法查詢支持
- 第十五章 Elasticsearch插件之分詞器
- 15.1 ElasticSearch之IK中文分詞
- 第十六章 SpringBoot-starter-data整合Elasticsearch
- 第十七章 SpringBoot整合Elasticsearch(官方client)