1、下載安裝包
我下載的是7.16.2的版本,jdk需要11版本
https://www.elastic.co/cn/downloads/past-releases#elasticsearch
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-16-2
2、上傳到服務器並解壓
tar -zxvf elasticsearch-7.16.2-linux-x86_64.tar.gz
3、創建用戶
Elasticsearch不允許root用戶直接運行,可以直接試試,會報錯can not run elasticsearch as root,所以要創建新用戶,在root用戶下創建新用戶esuser
useradd esuser #創建一個esuser的用戶chown -R esuser /opt/elasticsearch/elasticsearch-7.16.2/ #將這個文件夾權限賦給esuser
4、創建data和logs文件夾
mkdir /home/elasticsearch/data mkdir /home/elasticsearch/logs chown -R esuser /home/elasticsearch/data chown -R esuser /home/elasticsearch/logs
5、修改elasticsearch.yml文件
cluster.name: cluster001 ---集群名稱,單機的也可以配個名字
node.name: node01 ---節點名
path.data: /home/elasticsearch/data ---data文件的存儲位置
path.logs: /home/elasticsearch/logs ---log文件的存儲位置
network.host: 0.0.0.0 ----設置成這個表示所有ip都可以訪問
http.port: 9200 ----http端口,區別於transport端口9300
http.cors.enabled: true ----設置允許外部瀏覽器訪問,下面的設置也是為了這個
http.cors.allow-origin: "*"
cluster.initial_master_nodes: ["node01"] -----集群初始化時的可作為master節點的節點列表
bootstrap.memory_lock: true ---啟動時鎖定內存,運行中就會禁用交換區
6、修改jvm.options文件
初始內存和最大內存大小設置,官網強烈建議設置成一樣大小的
-Xms32g
-Xmx32g
7、配置 /etc/sysctl.conf
# vim /etc/sysctl.conf
vm.max_map_count=655360
修改后執行 sysctl -p 使之生效
8、啟動
su esuser bin/elasticsearch -d 后台啟動
安裝ik分詞器
下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
版本選擇:一定要選擇和安裝的es同版本的ik分詞器版本,比如我需要下載elasticsearch-analysis-ik-7.16.2.zip
找到安裝后的plugins文件夾,在下面創建一個ik文件夾(因為這個zip解壓后沒有一個父文件夾),然后將zip包放在ik下,unzip解壓,啟動es即可
部署中可能出現的問題
1、jdk8不支持7.16.2的es版本

這個是jdk版本需要使用11的,我下載的安裝包是有捆綁jdk的,那么就用自帶的捆綁的,因為bin/elasticsearch 這個腳本啟動時會調用 bin/elasticsearch-env這個腳本,打開后者,修改如下
# now set the path to java if [ ! -z "$ES_JAVA_HOME" ]; then ------意思是如果存在ES_JAVA_HOME環境變量 JAVA="$ES_JAVA_HOME/bin/java" JAVA_TYPE="ES_JAVA_HOME" elif [ ! -z "$JAVA_HOME" ]; then ------如果存在JAVA_HOME環境變量,下面改為還是用ES_JAVA_HOME(es安裝包boundled的JDK) # fallback to JAVA_HOME echo "warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME" >&2 JAVA="$ES_JAVA_HOME/bin/java" -------JAVA_HOME改為ES_JAVA_HOME JAVA_TYPE="ES_JAVA_HOME" -------JAVA_HOME改為ES_JAVA_HOME else # use the bundled JDK (default) if [ "$(uname -s)" = "Darwin" ]; then # macOS has a different structure JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java" else JAVA="$ES_HOME/jdk/bin/java" fi JAVA_TYPE="bundled JDK" fi
2、esuser權限不足
2022-03-09 16:07:29,043 main ERROR Null object returned for RollingFile in Appenders. 2022-03-09 16:07:29,043 main ERROR Null object returned for RollingFile in Appenders. 2022-03-09 16:07:29,043 main ERROR Unable to locate appender "rolling" for logger config "root" 2022-03-09 16:07:29,044 main ERROR Unable to locate appender "rolling_old" for logger config "root" 2022-03-09 16:07:29,044 main ERROR Unable to locate appender "index_indexing_slowlog_rolling_old" for logger config "index.indexing.slowlog.index" 2022-03-09 16:07:29,044 main ERROR Unable to locate appender "index_indexing_slowlog_rolling" for logger config "index.indexing.slowlog.index" 2022-03-09 16:07:29,045 main ERROR Unable to locate appender "audit_rolling" for logger config "org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail" 2022-03-09 16:07:29,045 main ERROR Unable to locate appender "index_search_slowlog_rolling_old" for logger config "index.search.slowlog" 2022-03-09 16:07:29,045 main ERROR Unable to locate appender "index_search_slowlog_rolling" for logger config "index.search.slowlog" 2022-03-09 16:07:29,046 main ERROR Unable to locate appender "deprecation_rolling_old" for logger config "org.elasticsearch.deprecation" 2022-03-09 16:07:29,046 main ERROR Unable to locate appender "deprecation_rolling" for logger config "org.elasticsearch.deprecation" uncaught exception in thread [main] ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/home/elasticsearch/data/nodes]; Likely root cause: java.nio.file.AccessDeniedException: /home/elasticsearch/data/nodes at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384) at java.nio.file.Files.createDirectory(Files.java:674) at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781) at java.nio.file.Files.createDirectories(Files.java:767) at org.elasticsearch.env.NodeEnvironment.lambda$new$0(NodeEnvironment.java:300) at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:224) at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:298) at org.elasticsearch.node.Node.<init>(Node.java:427) at org.elasticsearch.node.Node.<init>(Node.java:309) at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:234) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:234) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:434) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:166) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:157) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112) at org.elasticsearch.cli.Command.main(Command.java:77) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:122) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80) For complete error details, refer to the log at /home/elasticsearch/logs/node152.log
這個是因為第四步創建了data和logs文件夾后,沒有chown給esuser賦權限的原因
3、沒有配置discovery
[2022-03-09T16:41:37,002][ERROR][o.e.b.Bootstrap ] [node152] node validation exception [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch. bootstrap check failure [1] of [1]: the default discovery settings are unsuitable for production use;
at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
配置這個:cluster.initial_master_nodes: ["node01"] ,node01是配置的node.name值
4、geoip報錯,不影響啟動和使用
[2022-03-11T10:33:04,296][ERROR][o.e.i.g.GeoIpDownloader ] [node152] exception during geoip databases update java.net.UnknownHostException: geoip.elastic.co at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[?:1.8.0_181] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[?:1.8.0_181] at java.net.Socket.connect(Socket.java:589) ~[?:1.8.0_181] at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673) ~[?:?] at sun.net.NetworkClient.doConnect(NetworkClient.java:175) ~[?:?] at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) ~[?:?] at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) ~[?:?] at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264) ~[?:?] at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367) ~[?:?] at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) ~[?:?] at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156) ~[?:?] at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050) ~[?:?] at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) ~[?:?] at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564) ~[?:?] at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) ~[?:?] at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) ~[?:1.8.0_181] at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347) ~[?:?] at org.elasticsearch.ingest.geoip.HttpClient.lambda$get$0(HttpClient.java:55) ~[ingest-geoip-7.16.2.jar:7.16.2] at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_181] at org.elasticsearch.ingest.geoip.HttpClient.doPrivileged(HttpClient.java:97) ~[ingest-geoip-7.16.2.jar:7.16.2] at org.elasticsearch.ingest.geoip.HttpClient.get(HttpClient.java:49) ~[ingest-geoip-7.16.2.jar:7.16.2] at org.elasticsearch.ingest.geoip.HttpClient.getBytes(HttpClient.java:40) ~[ingest-geoip-7.16.2.jar:7.16.2] at org.elasticsearch.ingest.geoip.GeoIpDownloader.fetchDatabasesOverview(GeoIpDownloader.java:135) ~[ingest-geoip-7.16.2.jar:7.16.2] at org.elasticsearch.ingest.geoip.GeoIpDownloader.updateDatabases(GeoIpDownloader.java:123) ~[ingest-geoip-7.16.2.jar:7.16.2] at org.elasticsearch.ingest.geoip.GeoIpDownloader.runDownloader(GeoIpDownloader.java:260) [ingest-geoip-7.16.2.jar:7.16.2] at org.elasticsearch.ingest.geoip.GeoIpDownloaderTaskExecutor.nodeOperation(GeoIpDownloaderTaskExecutor.java:97) [ingest-geoip-7.16.2.jar:7.16.2] at org.elasticsearch.ingest.geoip.GeoIpDownloaderTaskExecutor.nodeOperation(GeoIpDownloaderTaskExecutor.java:43) [ingest-geoip-7.16.2.jar:7.16.2] at org.elasticsearch.persistent.NodePersistentTasksExecutor$1.doRun(NodePersistentTasksExecutor.java:42) [elasticsearch-7.16.2.jar:7.16.2] at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:777) [elasticsearch-7.16.2.jar:7.16.2] at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26) [elasticsearch-7.16.2.jar:7.16.2] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_181] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
原因:此版本默認開啟了GeoIp功能,默認啟動下會去官網默認地址下獲取最新Ip的GEO信息
增加配置 ingest.geoip.downloader.enabled: false即可
5、host無法識別
[2022-03-11T10:30:25,370][WARN ][o.e.d.SeedHostsResolver ] [node152] failed to resolve host [node152:9300]
我的其中一個配置是:discovery.zen.ping.unicast.hosts: ["node152:9300"]
這是因為node152沒有配置到host里,無法識別,改成ip或者修改hosts文件添加進去
