背景
线上的es一直是单节点,最近业务数据突然增长,每日入es数据量有30+G了,但是原有资源池磁盘资源告急,只能在新资源池下搭新node-2节点和原有node1节点组成集群来满足后续的扩容需求。
节点二部署
防止踩坑,保持新环境的版本和旧环境一致,我这里都采用的版本是7.7.0。因为环境是离线环境所以采用rpm包的方式。
rpm -ivh elasticsearch-7.7.0-x86_64.rpm
安装完成后编辑/etc/elasticsearch.yml
配置文件,这里我直接给出node2的配置文件:
# 集群名称
cluster.name: elasticsearch_cluster
# 是否允许跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
# 集群间通信主机IP
network.publish_host: 192.168.2.36
# 节点名称
node.name: node-2
# 是否可以竞争主节点
node.master: true
# 数据目录
path.data: /data/elasticsearch
# 日志目录
path.logs: /data/log/elasticsearch
# 主机IP
network.host: 192.168.2.36
# 端口
http.port: 9200
# 集群自发现主机IP列表
discovery.seed_hosts: ["192.168.2.182", "192.168.2.36"]
# 可竞争主机群名称列表
cluster.initial_master_nodes: ["node-1", "node-2"]
节点一配置
配置好node2后,现在修改node1的配置使得两个节点组成同一个集群,node1的配置和node2类似:
# 集群名称
cluster.name: elasticsearch_cluster
# 是否允许跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
# 集群间通信IP
network.publish_host: 192.168.2.182
# 节点名称
node.name: node-1
# 是否可以竞争主节点
node.master: true
# 数据目录
path.data: /data/elasticsearch
# 日志目录
path.logs: /data/log/elasticsearch
# 主机IP
network.host: 192.168.2.182
# 端口
http.port: 9200
# 集群自发现主机IP列表
discovery.seed_hosts: ["192.168.2.182", "192.168.2.36"]
# 可竞争主机群名称列表
cluster.initial_master_nodes: ["node-1", "node-2"]
重启node1节点的es:
systemctl restart elasticsearch
重启后就可以看到两个节点组成一个集群了
注意我这里修改了数据目录和日志目录的路径,大家使用官方默认路径是没问题的。需要修改的话注意文件夹权限问题!文件权限修改可以参考r如下命令对照自己的自行修改:
chown -R elasticsearch:elasticsearch /data/elasticsearch
chown -R elasticsearch:elasticsearch /data/log/elasticsearch
集群访问认证
下面我们需要给集群设置访问密码。集群设置密码只需要在主节点设置,其他节点会同步,我这里只有两个节点,其他多节点类似。
- 生成node1节点的公钥
/usr/share/elasticsearch/bin/elasticsearch-certutil cert -out /etc/elasticsearch/elastic-certificates.p12 -pass ""
chown -R elasticsearch:elasticsearch /etc/elasticsearch/elastic-certificates.p12
chmod 755 /etc/elasticsearch/elastic-certificates.p12
- 公钥拷贝
将node1下/etc/elasticsearch/elastic-certificates.p12
拷贝到node2节点的/etc/elasticsearch
目录下,这里可以使用scp。例:
scp /etc/elasticsearch/elastic-certificates.p12 root@192.168.2.36:/etc/elasticsearch
输入密码即可完成传输。
- 修改node1、node2节点的
/etc/elasticsearch.yml
配置文件,加入下列内容
xpack.security.enabled: true
xpack.license.self_generated.type: basic
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
注意给文件赋权限:
chown -R elasticsearch:elasticsearch /etc/elasticsearch/elastic-certificates.p12
chmod 755 /etc/elasticsearch/elastic-certificates.p12
- 重启es节点
重启两个node1、node2的es。
systemctl restart elasticsearch
- node1节点设置密码
接下来我们就剩在node1主节点设置密码了。
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
复制上面命令,再一路yyy设置完成密码即可。密码设置成功后会发现node2的节点也需要使用同样的密码才能访问。同时node2会自动创建node1存在的所有索引数据的副本。
访问用户可以用elastic用户。自此elastic双节点搭建和设置密码就都完成了!