在生产环境中使用 ElasticSearch 时,一般会使用集群模式(分片+副本)提高服务的可用性,另外,集群部署相对于单机部署有更多的存储空间,可存储的数据量更大。
安装前准备
选择合适的版本
前往 Elastic官网 下载安装包。不同版本的 ElasticSearch 及 SDK 差异较大,需要根据应用选择合适的版本部署。较早的项目多为 6.x 的版本,此版本仍有
_doc
的类型,到了 7.x 版本开始便移除了类型,贸然选择最新版本可能导致代码与 ElasticSearch 之间不兼容,应谨慎选择 ElasticSearch 的大版本。集群规划
ElasticSearch 集群要求至少部署三个节点以保证可用性。在部署前要规划好服务器以及ES服务占用的端口,以下是部署规划:
主机IP地址 ES提供服务端口 ES集群通信端口 10.231.176.18 9200 9300 10.231.176.19 9200 9300 10.231.176.20 9200 9300 由于 ElasticSearch 的日志与数据文件会随着使用增长,在安装配置前需要查看磁盘空间来规划安装、日志、数据的目录,避免因为磁盘空间不足导致无法正常提供服务。如果使用量较大单台机器无法满足存储要求,可使用 NFS 等可扩展的文件系统。
1
2
3
4
5
6
7
8
9
10
11[root@hadoop1 bin]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 63G 12M 63G 1% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 2.3G 48G 5% /
/dev/sda1 1014M 150M 865M 15% /boot
/dev/mapper/centos-home 418G 6.4G 411G 2% /home
tmpfs 13G 0 13G 0% /run/user/0
tmpfs 13G 0 13G 0% /run/user/1000执行命令后可以看到,空间最大的数据盘挂载目录为 /home 目录,将 ElasticSearch 部署在该目录下,日志、数据也存放在该目录下。
修改服务器配置
由于 ElasticSearch 需要使用到大量的内存,控制虚拟内存映射区,操作大量文件,因此需要调整系统参数,否则无法正常启动。
1
2// 错误一
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]Elasticsearch 拥有的最大内存权限太小,至少需要 262144。切换到 root 用户以后调整 vm.max_map_count 参数值,执行
vi /etc/sysctl.conf
,追加vm.max_map_count=262144
或其他合适的数值即可。1
2
3// 错误二
ERROR: [1] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]Elasticsearch 进程可操作的文件句柄太小,至少需要 65535。切换到 root 用户以后,执行
/etc/security/limits.conf
,追加以下内容:1
2
3
4* soft nproc 655350
* hard nproc 655350
* soft nofile 65536
* hard nofile 65536修改完成以后使用
ulimit -S -n
查看参数。
部署步骤
上传 elasticsearch-7.17.15-linux-x86_64.tar.gz 到规划集群服务器的 /home 目录下并解压,然后创建存储数据与日志的文件夹。
1
2cd /home
tar -zxvf elasticsearch-7.17.15-linux-x86_64.tar.gz创建用户并授权相应目录的读写权限
出于安全性考虑,官方编译发行的 ElasticSearch 禁止使用 root 用户启动,需要创建一个普通用户,并将对应目录授予读写权限。
1
2
3
4cd ./elasticsearch-7.17.15
mkdir esdata && eslogs
useradd elasticsearch
chown -R elasticsearch:elasticsearch /home/elasticsearch-7.17.15切换到普通用户,修改 ES 的配置文件
1
2su elasticsearch
vi config/elasticsearch.yml对每台服务器的原有配置文件项进行以下的新增或修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# 修改为自己的ES集群名称即可,用于区分当前节点是否为某个集群之一
cluster.name: elasticsearch-cluster
# 节点名称,在集群内不重复即可
node.name: es-node-1
# 该节点是否存储数据
node.data: true
path.data: /home/elasticsearch-7.17.15/esdata
path.logs: /home/elasticsearch-7.17.15/eslogs
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
# 根据实际部署规划修改,将所有节点IP填入
discovery.seed_hosts: ["10.231.176.18", "10.231.176.19", "10.231.176.20"]
# 根据实际配置文件修改,将所有节点名称填入
cluster.initial_master_nodes: ["es-node-1", "es-node-2", "es-node-3"]
# 如果不需要 Kibana 和 Logstash 可以不用配置跨域选项
http.cors.enabled: true
http.cors.allow-origin: "*"修改 ES 的 JVM 配置文件
1
vi config/jvm.options
根据服务器实际情况设置
Xmx
和Xms
的值,需要注意的是 xmx 和 xms 的数值需要设置为一样的。启动 ElasticSearch
1
./bin/elasticsearch -d
每个集群节点都启动完成后,可以访问 http://ip:port 验证集群是否可用,只要页面展示的 cluster_uuid 不为
_na_
,那么集群的部署已经完成了。
启用basic密码认证(可选)
出于安全和权限管理考虑,可以为 ElasticSearch 集群启用基于 HTTP Basic 认证的密码。执行步骤如下:
vi config/elasticsearch.yml
修改配置文件,新增以下配置:1
2
3
4
5
6xpack.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生成集群间通信使用到的证书,并将证书文件发送到其他节点上
1
2
3bin/elasticsearch-certutil cert -out config/elastic-certificates.p12
scp elastic-certificates.p12 root@10.231.176.19:/home/elasticsearch-7.17.15/config/
scp elastic-certificates.p12 root@10.231.176.20:/home/elasticsearch-7.17.15/config/重启每个节点的 ElasticSearch 服务,保证服务是启动的,然后使用内置的
elasticsearch-setup-password
脚本设置密码,执行以下命令后,依次输入密码即可,密码会自动在集群间同步,无需多次设置。1
bin/elasticsearch-setup-passwords interactive