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进行展示