Elasticsearch的安裝
1. 安裝
1.1 下載安裝包:elasticsearch-7.4.2-linux-x86_64.tar.gz 或直接在服務器直接下載:wget https://mirrors.huaweicloud.com/elasticsearch/7.4.2/elasticsearch-7.4.2-linux-x86_64.tar.gz
1.2 通過FTP工具上傳安裝到在服務器目錄(如:/home/software)
1.3 解壓安裝包:
// 解壓安裝包
tar -zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz
// 重命名
mv elasticsearch-7.4.2-linux-x86_64 elasticsearch-7.4.2
// 移動到 /usr/local 下
mv elasticsearch-7.4.2 /usr/local
2. 配置相關配置文件
2.1 配置elasticsearch.yml
// 進入目錄
cd /usr/local/elasticsearch-7.4.2/config vim elasticsearch.yml
配置如下:
// 集群時,cluster.name 要保持一致
cluster.name: imooc-elasticsearch
// 集群時,node.name 要各不相同 node.name: es-node1 path.data: /usr/local/elasticsearch-7.4.2/data path.logs: /usr/local/elasticsearch-7.4.2/log network.host: 0.0.0.0
// 集群配置,不是集群的話下面這一行代碼不用配置
discovery.seed_hosts: ["192.168.40.179", "192.168.40.180","192.168.40.181"]
cluster.initial_master_nodes: ["es-node1"]
2.2 配置 jvm.options
cd /usr/local/elasticsearch-7.4.2/config
vim jvm.options
根據自己的Linux實際內存來改,我的內存為1G,這里改為128m
-Xms128m
-Xms128m
2.3 修改jdk默認路徑
由於我這邊環境JDK使用的1.8,而ElasticSearch7.4.2要求JDK版本必須為JDK11+,否則啟動會報錯,在這種情況下如想在不升級環境JDK版本下啟動ES需修改ES的JDK配置,其實ElasticSearch7.X安裝包中都自帶有JDK(系統無配置JDK環境變量時啟動會使用自帶JDK),我這里通過修改bin目錄下elasticsearch和elasticsearch-cli來指向自帶JDK。
修改bin/elasticsearch,添加Elasticsearch自帶的jdk
cd /usr/local/elasticsearch-7.4.2/bin
vim elasticsearch
添加位置如下:
#!/bin/bash # CONTROLLING STARTUP: # # This script relies on a few environment variables to determine startup # behavior, those variables are: # # ES_PATH_CONF -- Path to config directory # ES_JAVA_OPTS -- External Java Opts on top of the defaults set # # Optionally, exact memory values can be set using the `ES_JAVA_OPTS`. Note that # the Xms and Xmx lines in the JVM options file must be commented out. Example # values are "512m", and "10g". # # ES_JAVA_OPTS="-Xms8g -Xmx8g" ./bin/elasticsearch # 配置為elasticsearch自帶jdk export JAVA_HOME=/usr/local/elasticsearch-7.4.2/jdk export PATH=$JAVA_HOME/bin:$PATH source "`dirname "$0"`"/elasticsearch-env if [ -z "$ES_TMPDIR" ]; then ES_TMPDIR=`"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.launchers.TempDirectory` fi ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options JVM_OPTIONS=`"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.launchers.JvmOptionsParser "$ES_JVM_OPTIONS"` ES_JAVA_OPTS="${JVM_OPTIONS//\$\{ES_TMPDIR\}/$ES_TMPDIR}" # 添加jdk判斷 if [ -x "$JAVA_HOME/bin/java" ]; then JAVA="/usr/local/elasticsearch-7.4.2/jdk/bin/java" else JAVA=`which java` fi # manual parsing to find out, if process should be detached if ! echo $* | grep -E '(^-d |-d$| -d |--daemonize$|--daemonize )' > /dev/null; then exec \ "$JAVA" \ $ES_JAVA_OPTS \ -Des.path.home="$ES_HOME" \ -Des.path.conf="$ES_PATH_CONF" \ -Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" \ -Des.distribution.type="$ES_DISTRIBUTION_TYPE" \ -Des.bundled_jdk="$ES_BUNDLED_JDK" \ -cp "$ES_CLASSPATH" \ org.elasticsearch.bootstrap.Elasticsearch \ "$@" else exec \ "$JAVA" \ $ES_JAVA_OPTS \ -Des.path.home="$ES_HOME" \ -Des.path.conf="$ES_PATH_CONF" \ -Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" \ -Des.distribution.type="$ES_DISTRIBUTION_TYPE" \ -Des.bundled_jdk="$ES_BUNDLED_JDK" \ -cp "$ES_CLASSPATH" \ org.elasticsearch.bootstrap.Elasticsearch \ "$@" \ <&- & retval=$? pid=$! [ $retval -eq 0 ] || exit $retval if [ ! -z "$ES_STARTUP_SLEEP_TIME" ]; then sleep $ES_STARTUP_SLEEP_TIME fi if ! ps -p $pid > /dev/null ; then exit 1 fi exit 0 fi exit $?
2) 修改bin/elasticsearch-cli
vim elasticsearch-cli
#!/bin/bash set -e -o pipefail #配置es自帶jdk13
source "`dirname "$0"`"/elasticsearch-env IFS=';' read -r -a additional_sources <<< "$ES_ADDITIONAL_SOURCES" for additional_source in "${additional_sources[@]}" do source "$ES_HOME"/bin/$additional_source done IFS=';' read -r -a additional_classpath_directories <<< "$ES_ADDITIONAL_CLASSPATH_DIRECTORIES" for additional_classpath_directory in "${additional_classpath_directories[@]}" do ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/$additional_classpath_directory/*" done # use a small heap size for the CLI tools, and thus the serial collector to # avoid stealing many CPU cycles; a user can override by setting ES_JAVA_OPTS ES_JAVA_OPTS="-Xms4m -Xmx64m -XX:+UseSerialGC ${ES_JAVA_OPTS}" #添加jdk判斷
exec \ "$JAVA" \ $ES_JAVA_OPTS \ -Des.path.home="$ES_HOME" \ -Des.path.conf="$ES_PATH_CONF" \ -Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" \ -Des.distribution.type="$ES_DISTRIBUTION_TYPE" \ -cp "$ES_CLASSPATH" \ "$ES_MAIN_CLASS" \ "$@"
2-4 編輯limits.conf配置文件(解決無法創建本地文件問題,用戶最大可創建文件數太小)
vim /etc/security/limits.conf
添加以下配置
注:* 代表Linux所有用戶名稱
* soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096
2-5 編輯/etc/sysctl.conf配置文件(解決最大虛擬內存太小)
vim /etc/sysctl.conf
添加如下配置:
vm.max_map_count=262144
保存后執行命令,進行刷新
sysctl -p
3. 創建用戶用來啟動es
// 創建用戶
useradd esuser cd /usr/local/elasticsearch-7.4.2
// 授權
chown -R esuser /usr/local/elasticsearch-7.4.2
chown -R esuser:esuser /usr/local/elasticsearch-7.4.2
啟動
// 使用創建的用戶進行啟動
su esuser // 后台啟動 ./elasticsearch -d
// 前台啟動
./elasticsearch
啟動完成,瀏覽器訪問:http://192.168.40.179:9200,界面顯示如下:
Elasticsearch安裝 X-pack
集群的話,三體機器一起操作
X-Pack是Elastic Stack擴展功能,提供安全性,警報,監視,報告,機器學習和許多其他功能。 ES7.0+之后,默認情況下,當安裝Elasticsearch時,會自動安裝X-Pack,無需單獨再安裝。自6.8以及7.1+版本之后,基礎級安全永久免費。
從上面啟動ES並訪問我們可以發現在訪問ES過程中我們沒有任何安全認證就可以直接訪問並操作ES,這在生產環境下如果端口號向外暴露的話對數據安全性無法得到保障。當然還有其它解決方案比如使用nginx作代理防護這里就不作過多介紹。
1. 修改配置文件
cd /usr/local/elasticsearch7.4.2/config
vim elasticsearch.yml
添加以下內容,紅線下面的內容是下一步要配置的,這里暫且只添加這一句
xpack.security.enabled: true
2. 生成節點證書
借助elasticsearch-certutil命令生成證書:
cd /usr/local/elasticsearch7.4.2/bin
./elasticsearch-certutil ca -out config/elastic-certificates.p12 -pass "
3. 配置通信證書
vi elasticsearch.yml
新增如下配置項: # xpack.security.enabled: true # 這一句在上面添加過了,不用再添加 xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
4. 設置集群密碼,我選擇的是手動配置,密碼是 123456
大概一共需要輸入12次密碼,輸入密碼時不顯示密碼,輸入完成點回車就行
bin/elasticsearch-setup-passwords interactive --手動配置每個用戶密碼模式
bin/elasticsearch-setup-passwords auto --自動配置每個用戶密碼模式
配置完成后瀏覽器訪問就會需要密碼
賬號可以使用:elastic
密碼:123456
在集群的其中一台節點上安裝kibana
可以在華為的 https://mirrors.huaweicloud.com/ 下載 kibana,版本要和ES的保持一致
tar -zxvf kibana-7.4.2-linux-x86_64.tar.gz -C /usr/local/
mv kibana-7.4.2-linux-x86_64/ kibana-7.4.2
## 進入kibana目錄,修改配置文件
vim /usr/local/kibana-7.4.2/config/kibana.yml
## 修改配置如下:這里的ip就是本機Linux的IP地址
server.host: "192.168.40.179"
elasticsearch.url: http://192.168.40.179:9200
## 啟動:
# /usr/local/kibana-7.4.2/bin/kibana &
/usr/local/kibana-7.4.2/bin/kibana --allow-root
## 指定配置文件啟動:
# nohup /usr/local/kibana-7.4.2/bin/kibana -c /usr/local/kibana-7.4.2/config/kibana.yml > /dev/null 2>&1 &
/usr/local/kibana-7.4.2/bin/kibana -c /usr/local/kibana-7.4.2/config/kibana.yml > /dev/null 2>&1 --allow-root
## 訪問:
http://192.168.40.179:5601/app/kibana (5601為kibana默認端口)
安裝 kibana 並開啟X-pack
我下載的版本是7.4.2,自帶了x-pack,在配置文件中開啟就可以。
國內下載地址:https://www.newbe.pro/Mirrors/Mirrors-Kibana/
下載好相應的版本,要與Elasticsearch一致,我講它放到了/home/software中
1.解壓重命名,並放到/usr/local下
tar -zxvf kibana-7.4.2-linux-x86_64.tar.gz -C /usr/local/
mv kibana-7.4.2-linux-x86_64 kibana-7.4.2
2.配置配置文件
cd /usr/local/kibana-7.4.2/config/
vim kibana.yml
修改配置文件如下
server.host: "0.0.0.0"
// 本機地址
server.name: "192.168.40.179"
// elasticsearch 的ip地址 以及用戶名密碼
elasticsearch.hosts: ["http://192.168.40.179:9200"]
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
// 開啟x-pack
xpack.security.enabled: true
保存退出,啟動就可以了
瀏覽器訪問kibana就會出現消息了
前提是首先配置好EKL集群:
Zookeeper(集群) + kafka
Elasticsearch(集群) + kibana(部署到es的某一台節點上)
Filebeat(日志收集) + Logstash(日志過濾)
這里只是配置的Elasticsearch(包括kibana可視化)
filebeat將日志收集起來 ——> 放到kafka消息隊列 ——> Logstash消息過濾 ——> 持久化到 Elasticsearch上——> 通過kibana可視化出來
1. 把項目應用的日志打到磁盤上
2. 通過filebeat抓取到kafka中
3. 通過Logstash去進行消費kafka中的日志,並做一些過濾
4. 之后Logstash將處理好的日志輸出到Elasticsearch上
5. 最后用kibana進行展示