第一次安装Elasticsearch7.5
本来觉得安装ES应该是一个很轻松的事,但第一次安装ES7.5,还是遇到了一些问题,在这里记录一下,如果能帮助到一些人,也很不错了。
集群规划
因为家里有两台一样的旧电脑,放在那里没用,所有就想起来不如架一个虚拟机集群,有时间的时候练练技术,学学运维,所以两台机器都跑起来WMWareEXSI,所以这次手欠,规划了5个ES节点和一个独立的Kibana节点,因为我的那台thinkpad借给别人用去了,只好在Mac本上操作,这个效率有点差。
操作系统:CentOS Linux release 7.7.1908 (Core)
内核版本:Linux version 5.4.0-1.el7.elrepo.x86_64
机器名 | IP | 资格 |
---|---|---|
es-node1 | 192.168.1.71 | master |
es-node2 | 192.168.1.72 | master |
es-node3 | 192.168.1.73 | node |
es-node4 | 192.168.1.74 | node |
es-node5 | 192.168.1.75 | master |
es-kibana | 192.168.1.70 | kibana |
修改hosts文件:
192.168.1.70 es-kibana
192.168.1.71 es-node1
192.168.1.72 es-node2
192.168.1.73 es-node3
192.168.1.74 es-node4
192.168.1.75 es-node5
要说明的两点如下:
1. Elasticsearch7 之后自带JAVA环境,不需要在CentOS里安装JAVA
2. Elasticsearch7 之后默认安装了X-pack插件,且免费开放了基本的安全认证功能
3. 在不同的主机上启动ES,并且绑定到固定IP,ES会认为是在生产环境上运行了
之后就是在官网下载RPM安装包:
安装包下载
下载之后拷到每台机器上执行
[root@es-node1 software]#rpm -ivh elasticsearch-7.5.0-x86_64.rpm
配置集群
主要有两个文件,第一个是
jvm.options
,第二个是
elasticsearch.yml
,rpm 方式安装的配置文件都在
/etc/elasticsearch/
目录下。
jvm.options
#主要修改内存大小,根据自己的配置来,最大到32G,超过32G会有32G现象,感兴趣可以去搜一下
-Xms4g
-Xmx4g
elasticsearch.yml,我就不全贴了,捡重要的写
#集群名称,每台机器上都要一样,才能组成一个集群
cluster.name: ES-Cluster
#节点名称,每台节点都不能一样,如果设置了机器名,也可以写${HOSTNAME},就不用每台都改一下了
node.name: es-node1
#该节点是否存储数据,生产环境主节点不建议存储数据
node.data: true
#是否有选举成为主节点的资格
node.master: true
#数据目录设置
path.data: /var/lib/elasticsearch
#日志目录设置
path.logs: /var/log/elasticsearch
#绑定网络,一定要写固定IP ,生产环境不可以用0.0.0.0,这样会绑定到所有网卡上,可能会出现安全问题
network.host: 192.168.1.71
#Http请求端口号
http.port: 9200
#群集自动发现种子节点,我就全写上了
discovery.seed_hosts: ["es-node1", "es-node2","es-node3","es-node4","es-node5"]
#这三个节点全启动了才会选举主节点
cluster.initial_master_nodes: ["es-node1", "es-node2","es-node5"]
五个节点全配置完成后就可以启动集群了,这里本来应该一帆风顺,我在写node.name的时候,写了个大写ES,
node.name: ES-node1
,结果集群怎么与组不成,后来发现
node.name
属性必须与
discovery.seed_hosts
和
cluster.initial_master_nodes
里面的保持一致才可以。
在所有机器上执行:
[root@es-node1 elasticsearch]#systemctl enable elasticsearch.service
[root@es-node1 elasticsearch]#systemctl start elasticsearch.service
安装Kibana
在es-kibana上安装kibana
[root@es-kibana software]#rpm -ivh kibana-7.5.0-x86_64.rpm
修改配置文件,需要修改的不多
#绑定主机地址或主机名
server.host: "es-kibana"
#服务名
server.name: "es-kibana"
#ES集群地址
elasticsearch.hosts: ["http://es-node1:9200"]
启动 kibana:
[root@es-kibana kibana]#systemctl enable kibana.service
[root@es-kibana kibana]#systemctl start kibana.service
但点开stack monitoring,监控并未设置,开始设置时提示在生产环境需要配置安全选项。
启用X-pack安全
生成证书
因为我们使用的一个集群,还是生产模式,所以开启安全模块后,也要开启节点间通讯的安全配置,节点间的安全通讯需要数字证书,以下命令创建数据证书
[root@es-node1 elasticsearch]#bin/elasticsearch-certutil ca
[root@es-node1 elasticsearch]#bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
证书会生成在当前目录下,我们把证书文件拷贝到每个节点
/etc/ealsticsearch/
目录下。
修改配置文件
最后修改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: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
设置密码
Elastic stack 有一组内置用户,帮助我们启动和运行系统,这些用户在设置账号密码之前不可被使用,设置密码有两种方式,我在配置过程中使用了第二种,每个用户的密码都使用了
123qwe
#第一种:自动生成,执行命令后会把自动生成的密码输出到控制台
[root@es-node1 elasticsearch]#bin/elasticsearch-setup-passwords auto
#第二种:交互式输入,自己随意输入每个用户的密码,
[root@es-node1 elasticsearch]#bin/elasticsearch-setup-passwords interactive
修改Kibana密码设置
修改Kibana配置文件
/etc/kibana/kibana.yml
elasticsearch.username: "elastic"
elasticsearch.password: "123qwe"
重新启动Kibana后需要输入用户名和密码就可以访问了。
启用集群监控
最后,我这再开启监控,在这里我们不再使用配置的方式,打开Kibana的开发工具页面输入以下命令:
# 设置开启收集监控信息
PUT _cluster/settings
{
"persistent": {
"xpack.monitoring.collection.enabled": true
}
}
如下图所示:
然后我们就可以看到以下各种监控信息了
好了,后续就可以开始使用了,如果有从文件导入日志的需求请参考我的另一篇实记:
导入CDN日志到Elasticsearch
#快速用容器启动测试Elasticsearch7.5
Docker的安装我在这里就不讲了,记住这两条命令就OK了
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.5.0
docker run --link YOUR_ELASTICSEARCH_CONTAINER_NAME_OR_ID:elasticsearch -p 5601:5601 docker.elastic.co/kibana/kibana:7.5.0
9300是集群节点指点的tcp通讯端口,
9200是http协议的web客户端RESTful端口
discovery.type=single-node 表示使用单个节点,用来跳过ES启动引导检查
link 参数连接本地容器