一直想在本地安装一下elasticsearch集群,折腾了好久才弄完,记录一下过程。
安装环境:虚拟机,3台centos7
下载安装包
新建/softw文件夹,然后执行
shell
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.0-linux-x86_64.tar.gz
集群规划
服务器 | 角色 | ip |
---|---|---|
yueyue | master\data | 192.168.80.120 |
yueyue2 | master\data | 192.168.80.121 |
yueyue3 | master\data | 192.168.80.122 |
创建用户(每台执行)
es是不能使用root启动,为了安全。 需要每台机器都执行:
shell
# 新增 es 用户
useradd es
# 为 es 用户设置密码
passwd es # 密码为 es
调整操作系统参数(每台执行)
- es要求进程最大打开文件数数量为最低65536,每台都执行:
shell
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
- 修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144
shell
vi /etc/sysctl.conf
# 最后增加一行:
vm.max_map_count = 262144
# 退出执行
sysctl -p
安装软件(每台执行)
解压安装
shell
tar -xvf /softw/elasticsearch-8.9.0-linux-x86_64.tar.gz -C /opt
自带的jdk,版本很高:openjdk20
更改环境变量,使用自带的jdk
shell
vi /etc/profile
# 做如下修改:
export JAVA_HOME=/opt/elasticsearch-8.9.0/jdk
export ES_HOME=/opt/elasticsearch-8.9.0
export PATH=$ES_HOME/bin:$PATH
配置es
- 创建数据文件,证书目录, 并修改 Elasticsearch 文件拥有者 (每台执行)
shell
# 创建数据文件目录
mkdir /opt/elasticsearch-8.9.0/data
# 创建证书目录
mkdir /opt/elasticsearch-8.9.0/config/certs
#切换目录
cd /opt/elasticsearch-8.9.0
# 修改文件拥有者 chown -R es:es /opt/elasticsearch-8.9.0
- 在第一台服务器节点yueyue 设置集群多节点通信密钥
shell
# 切换用户
su - es
# 签发 ca 证书,过程中需按两次回车键,生成目录:es的home:/opt/elasticsearch-8.9.0/
cd /opt/elasticsearch-8.9.0/bin
./elasticsearch-certutil ca
# 两次回车即可
# 用 ca 证书签发节点证书,过程中需按三次回车键,生成目录:es的home:/opt/elasticsearch-8.9.0/
./elasticsearch-certutil cert --ca elastic-stack-ca.p12
# 将生成的证书文件移动到 config/certs 目录中
mv /opt/elasticsearch-8.9.0/elastic-stack-ca.p12 /opt/elasticsearch-8.9.0/elastic-certificates.p12 /opt/elasticsearch-8.9.0/config/certs
- 在第一台服务器节点 yueyue 设置集群多节点 HTTP 证书
shell
# 签发 Https 证书
cd /opt/elasticsearch-8.9.0/bin
./elasticsearch-certutil http
# Generate a CSR? [y/N] 输入N
# Use an existing CA? [y/N] 输入y
# CA Path: 输入 /opt/elasticsearch-8.9.0/config/certs/elastic-stack-ca.p12 # Password for elastic-stack-ca.p12: 无需密码,直接回车
# For how long should your certificate be valid? [5y] 输入5y
# Generate a certificate per node? [y/N] 输入N
# Enter all the hostnames that you need, one per line:输入yueyue、yueyue2、yueyue3,每个一行
# Is this correct [Y/n] 输入Y
# Enter all the IP addresses that you need, one per line. 输入:三台机器的ip:192.168.80.120-122
# Is this correct [Y/n] 输入 Y
# Do you wish to change any of these options? [y/N] 输入N
# 连续两次enter
# Zip file written to /opt/elasticsearch-8.9.0/elasticsearch-ssl-http.zip
解压证书(这里一定要把证书分发到其他节点):
shell
# 解压
cd /opt/elasticsearch-8.9.0
unzip elasticsearch-ssl-http.zip
# 移动证书
mv ./elasticsearch/http.p12 ./kibana/elasticsearch-ca.pem ./config/certs
# 将证书分发到其他节点
cd /opt/elasticsearch-8.9.2/config/certs
scp * yueyue2:/opt/elasticsearch-8.9.0/config/certs
scp * yueyue3:/opt/elasticsearch-8.9.0/config/certs
- 修改yueyue节点主配置文件:./config/elasticsearch.yml
yml
# 设置 ES 集群名称
cluster.name: es-study
# 设置集群中当前节点名称
node.name: es-yueyue
# 节点属性
node.roles: [master,data]
# 设置数据,日志文件路径
path.data: /opt/elasticsearch-8.9.0/data
path.logs: /opt/elasticsearch-8.9.0/logs
# 设置网络访问节点
# network和端口号一定要配置,如果怕安全问题,把host设置成访问此elasticsearch服务器的ip地址,就是设置成唯一访问。 可以配置成 network.host: 0.0.0.0
network.host: 192.168.80.120
# 设置网络访问端口
http.port: 9200
discovery.seed_hosts:
- 192.168.80.120
- 192.168.80.121
- 192.168.80.122
cluster.initial_master_nodes:
- es-yueyue
- es-yueyue2
- es-yueyue3
# 安全认证
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:
enabled: true # 注意第一个空格
keystore.path: /opt/elasticsearch-8.9.0/config/certs/http.p12
truststore.path: /opt/elasticsearch-8.9.0/config/certs/http.p12
xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: /opt/elasticsearch-8.9.0/config/certs/elastic-certificates.p12
truststore.path: /opt/elasticsearch-8.9.0/config/certs/elastic-certificates.p12
# 此处需注意,es-yueyue 为上面配置的节点名称
http.host: [_local_, _site_]
ingest.geoip.downloader.enabled: false
xpack.security.http.ssl.client_authentication: none
启动es
shell
# es 用户启动
/opt/elasticsearch-8.3.2/bin/elasticsearc
第一次成功启动后,会显示密码,请记住,访问时需要。只有第一次才有
shell
ℹ️ Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
iRw+3g9Z2y29alnE_w_P
❌ Unable to generate an enrollment token for Kibana instances, try invoking `bin/elasticsearch-create-enrollment-token -s kibana`.
❌ An enrollment token to enroll new nodes wasn't generated. To add nodes and enroll them into this cluster:
• On this node:
⁃ Create an enrollment token with `bin/elasticsearch-create-enrollment-token -s node`.
⁃ Restart Elasticsearch.
• On other nodes:
⁃ Start Elasticsearch with `bin/elasticsearch --enrollment-token <token>`, using the enrollment token that you generated.
修改密码:
shell
bin/elasticsearch-reset-password -u elastic -i
# 输入:es
登录网页 https://192.168.80.120:9200
因为配置了安全协议,所以使用 https 协议进行访问,但由于证书是自己生成的,并不可靠,所以会有安全提示
输入账号: es es
其他节点配置
安装文件、配置文件和证书前期已经copy完了,这里只需要修改配置文件即可 yueyue2修改 config/elasticsearch.yml
shell
vi config/elasticsearch.yml
# 设置节点名称
node.name: yueyue2
# 设置网络访问主机
network.host: 192.168.80.121
yueyue3修改 config/elasticsearch.yml
shell
vi config/elasticsearch.yml
# 设置节点名称
node.name: yueyue3
# 设置网络访问主机
network.host: 192.168.80.122
启动集群
启动前每台节点需要关一下防火墙不然访问不了
shell
systemctl stop firewalld
每台节点依次启动(无顺序要求,只要多于2台,就可以启动集群,这就是es的无主模式,自动识别集群,选举master):
shell
/opt/elasticsearch-8.3.2/bin/elasticsearch -d
访问https://192.168.80.120:9200/_cat/nodes?v
kibana安装
在/softw文件夹下下载安装包
shell
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.9.0-linux-x86_64.tar.gz
解压安装
shell
tar -xvf /softw/kibana-8.9.0-linux-x86_64.tar.gz -C /opt
修改文件拥有者
shell
chown -R es:es /opt/kibana-8.9.0
修改/config/kibana.yml
yml
# 改成自己节点的ip
server.host: "192.168.80.120"
本来想用token的方式初始化kibana的,但是在运行下面命令生成token的时候
shell
./bin/elasticsearch-create-enrollment-token -s kibana --url "https://192.168.80.120:9200"
不知道为什么会出现下面的错误:
shell
ERROR: Unable to create an enrollment token. Elasticsearch node HTTP layer SSL configuration Keystore doesn't contain any PrivateKey entries where the associated certificate is a CA certificate
试了segmentfault.com/q/101000004... 里的解决方案也不行 于是换了手动初始化的方式,运行下面的命令生成初始化账号的密码:
shell
/opt/elasticsearch-8.9.0/bin/elasticsearch-reset-password -u kibana_system
然后启动kibana
shell
/opt/kibana-8.9.0/bin/kibana
选择configure manually
填入elasticsearch的地址,然后输入刚才生成的kibana_system账号和密码,等待初始化完成即可