以前用的6.1.4集群,用了两年,还是感觉有很多不完善的地方,现在升级为7.6.2,将安装过程记录下来,以防止后面用到
以下内容默认大家有es与linux的基础,且部分内容我直接从网上现有博客中摘抄的,我搭建完了,懒得再敲一遍
1. elsaticsearch安装
7.x后es默认集成了JDK,建议7.x搭配jdk11,所以本地如果没有装jdk11的话,就要启用es默认自带的jdk。修改/bin目录下elasticsearch-env
文件。 如果自己有安装jdk11,则可删除es包中的 jdk文件夹,节约点空间,也可以选择下载不带jdk的es。这些都是废话。
修改前:
39 if [ ! -z "$JAVA_HOME" ]; then
40 JAVA="$JAVA_HOME/bin/java"
41 JAVA_TYPE="JAVA_HOME"
42 else
43 if [ "$(uname -s)" = "Darwin" ]; then
44 # macOS has a different structure
45 JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
46 else
47 JAVA="$ES_HOME/jdk/bin/java"
48 fi
49 JAVA_TYPE="bundled jdk"
50 fi
修改后:
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"
在修改具体的配置之前,大家应该对生产环境的需求有所规划,比如多少个节点,要用到多少内存,cpu等。节点中准备几个数据节点,几个主分片几个副本等等。我这边是10个数据节点,2个主节点为例。
上传安装包,解压,重命名,传送到所有节点,基础操作后:
配置SSL安全认证证书(在主节点做就可以了):
./bin/elasticsearch-certutil ca #证书名是elastic-stack-ca.p12,建议保存在config文件夹下
./bin/elasticsearch-certutil cert --ca /home/elasticsearch/config/elastic-stack-ca.p12 #生成客户端证书,同样保存在config文件夹下
在生成证书的过程都会要求输入密码,注意密码要一致。
将生成出来的elastic-certificates.p12
向各个节点的config文件夹传一份
所有节点将密码保存
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
开始编辑es的配置文件elasticsearch.yml
,数据节点实际上就是node的角色不同,其它一样
#这是主节点的配置
cluster.name: ai-es
node.name: centos60 #这里可以随意取,各节点名称不一致就行
node.master: true
node.data: false
node.ingest: false
path.data: /home/elasticsearch/data
path.logs: /home/elasticsearch/logs
http.port: 9200
bootstrap.memory_lock: true #锁定内存
bootstrap.system_call_filter: false #禁用内存交换
network.host: 0.0.0.0
cluster.initial_master_nodes: ["192.168.10.60","192.168.10.61"] #这里就是可以成为主节点的集合
discovery.zen.ping.unicast.hosts: ["192.168.10.60", "192.168.10.61", "192.168.10.62"] #所有节点
discovery.zen.minimum_master_nodes: 2 #防止脑裂问题
discovery.zen.ping_timeout: 60s # 心跳超时时间
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization,X-Requested-With,Content-Length,Content-Type"
path.repo: ["/home/snapshot"] #快照存储需求,不用的可以注释了
search.max_buckets: 2000000
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /home/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /home/elasticsearch/config/elastic-certificates.p12
编辑jvm.options
,将 -Xms -Xmx 保持一致,保持为物理内存一半,但是不要超过32G。也就是建议虚拟机内存不超过64G。真有钱超过了就分配32给es,其余的给Lucene,这样也是可以提高性能的。
修改系统配置,改完了貌似要重启
vim /etc/security/limits.conf
* soft nofile 1024000
* hard nofile 1024000
* soft nproc 1024000
* hard nproc 1024000
* soft stack 1024000
* soft memlock unlimited
* hard memlock unlimited
vim /etc/sysctl.conf
vm.max_map_count = 655360
es不能以ROOT用户启动,所以新建用户组,新建用户,且将elasticsearch文件夹里面的所有文件所有者都改成你新建用户的。
chown -R elastic:elasticsearch /home/elasticsearch*/
所有节点启动es。待启动完成后,随便访问一个节点的9200,会发现要输入用户名与密码。注意防火墙的状态,9200,9300的端口要开的,kibana所在的5601也要开。
开始为各用户生成密码
./bin/elasticsearch-setup-passwords auto #auto:自动生成,你保存好接下来打印出来的用户名与密码就行 interactive 手动设置每个用户的密码
至此,es安装完成。
2. kibana安装
上传安装包,解压,重命名。编辑配置文件 kibana/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://10.10.200.115:9200"] #自己的es地址
kibana.index: ".kibana"
i18n.locale: "zh-CN" #默认语言设置为中文
elasticsearch.username: "kibana"
elasticsearch.password: "wk4z9b2BBKaA9n6DrHlH"
xpack.reporting.capture.browser.chromium.disableSandbox: true
xpack.reporting.capture.browser.chromium.proxy.enabled: false
xpack.reporting.enabled: false
logging.quiet: true #为了不输出太空日志
#logging.dest: /home/zax/kibana/kibana.log 打印的日志地址,看情况吧,也可以在启动时指定位置
xpack.encryptedSavedObjects.encryptionKey: encryptedSavedObjects12345678909876543210
xpack.security.encryptionKey: encryptionKeysecurity12345678909876543210
xpack.reporting.encryptionKey: encryptionKeyreporting12345678909876543210
三个大长串配置,为啥要加,好像比较绕,加是为了不报错。有兴趣的可以看看关于kibana的配置,另外es的密码也可以不使用明文存在配置文件里。可以用密码本的形式。在bin
目录有个可执行文件
./bin/kibana-keystore create #创建密码本
./bin/kibana-keystore add xxx #用户名,输入这个它马上就会让你输密码了,随后这组数据就会保存在密码本里用于访问es。
相应的 ,也有 list 命令 , remove 命令等等,详情见帮助文档。
启动kibana nohup ./bin/kibana &
如果有小伙伴在本地虚拟机尝试启动kibana时,在启动的最后一步会提示,内容大致是要更新很多模块,耗时比较长,然后还会打印要更新两个包。大致格式是 XXX XXX next xxx npm update
,这个不用管。重点是初始化kibana时会使用大量cpu与内存资源,虚拟机配置不高就会等待时间很长,或者oom,最后显示进程已退出。我被这个坑了半天,小伙伴们注意下。
3. xpack配置与破解
此举仅供学习,希望大家有版权意识
找个地方新建两个类XPackBuild.java
与LicenseVerifier.java
package org.elasticsearch.xpack.core;
import org.elasticsearch.common.SuppressForbidden;
import org.elasticsearch.common.io.PathUtils;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
public class XPackBuild {
public static final XPackBuild CURRENT;
static {
CURRENT = new XPackBuild("Unknown", "Unknown");
}
@SuppressForbidden(reason = "looks up path of xpack.jar directly")
static Path getElasticsearchCodebase() {
URL url = XPackBuild.class.getProtectionDomain().getCodeSource().getLocation();
try {
return PathUtils.get(url.toURI());
} catch (URISyntaxException bogus) {
throw new RuntimeException(bogus);
}
}
private String shortHash;
private String date;
XPackBuild(String shortHash, String date) {
this.shortHash = shortHash;
this.date = date;
}
public String shortHash() {
return shortHash;
}
public String date() {
return date;
}
}
package org.elasticsearch.license;
public class LicenseVerifier{
public static boolean verifyLicense(final License license, byte[] publicKeyData) {
return true;
}
public static boolean verifyLicense(final License license) {
return true;
}
}
编译下
javac -cp "/home/elasticsearch/lib/elasticsearch-7.6.2.jar:/home/elasticsearch/lib/lucene-core-8.4.0.jar:/home/elasticsearch/modules/x-pack-core/x-pack-core-7.6.2.jar" LicenseVerifier.java
javac -cp "/home/elasticsearch/lib/elasticsearch-7.6.2.jar:/home/elasticsearch/lib/lucene-core-8.4.0.jar:/home/elasticsearch/modules/x-pack-core/x-pack-core-7.6.2.jar:/home/elasticsearch/lib/elasticsearch-core-7.6.2.jar" XPackBuild.java
得到两个class,将两个class替换掉elasticsearch/modules/x-pack-core/x-pack-core-7.6.2.jar
里面的calss,路径分别为x-pack-core-7.6.2.jar\org\elasticsearch\xpack\core\
,x-pack-core-7.6.2.jar\org\elasticsearch\license\
,再将这个jar替换掉所有es节点的该jar(理论上应该只用替换kibana节点连接的那个jar就行,我是直接所有节点都替换了)。
去es证书申请登记信息,重要的是邮件地址,收到邮件后根据提示下载证书。打开,将 “basic” 改为 “platinum” ,“expiry_date_in_millis” 这个时间戳改大点。保存。
然后打开kibana,设置里有个许可管理,把你的证书放进去就ok
4. metricbeat配置
在生产集群上设置修改以下两项:
PUT _cluster/settings
{
"persistent": {
"xpack.monitoring.collection.enabled": true,
"xpack.monitoring.elasticsearch.collection.enabled": false
}
}
每个节点上安装metricbeat
,下的慢的可以自己去官网下对应版本,复制链接,用迅雷下
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.6.2-x86_64.rpm
sudo rpm -vi metricbeat-7.6.2-x86_64.rpm
在每个Elasticsearch节点上的Metricbeat中启用Elasticsearch X-Pack模块
metricbeat modules enable elasticsearch-xpack
修改配置,主要是两个:/etc/metricbeat/metricbeat.yml
与/etc/metricbeat/modules.d/elasticsearch-xpack.yml
,注意用户名与密码配置。在此由于metricbeat跟es在同台服务器,所以地址用默认的就好了。实际情况下会出现一个是监控集群,这种情况下设置是不一样的,我没有实际尝试,所以就不说了。
每个节点上都启动 metricbeat
sudo service metricbeat start # 相应的还有 status stop restart reload 可以通过help命令查看
大功告成
重要提示: 上述的3 还是 4 ,有一步操作前要把 es设置里的 xpack.security.enabled: true
改为flase,但是具体在哪我忘记了。。如果破解不成功,或者metricbeat 启动不了,或者metricbeat 启动无数据,可以试试这步,应该是在更新许可的时候要做这步,做完了又改回来。这两天弄这个踩坑太多了。暂时不想再回想了。哪位小伙伴知道也可以留言。
还是重要提示------ 这次先更新安装,后续的相关操作,比如垃圾回收器的详解,快照操作,java api交互,跨集群同步,监控预警等等,等我弄明白了再分享给大家。