ElasticSearch7.8.0集群部署
最近需要对项目依赖的ElasticSearch进行升级工作,升级之前已经对ES6、ES7等版本做过了测试,所以本次升级也是本着用新不用旧
的原则,直接用上了当前最新稳定版ElasticSearch7.8.0
。下面就记录下搭建ElasticSearch7.8.0集群的过程。
集群规模
IP | Host | master.node | data.node | node-name | cluster-name |
---|---|---|---|---|---|
10.10.100.50 | es01 | true | true | node-1 | es-cluster |
10.10.100.51 | es02 | true | true | node-2 | es-cluster |
10.10.100.52 | es03 | true | true | node-3 | es-cluster |
10.10.100.53 | es04 | false | true | node-4 | es-cluster |
10.10.100.54 | es05 | false | true | node-5 | es-cluster |
安装ES
环境说明
- CentOS 6.5
- OpenJDK14(使用的是ES自带的OpenJDK14)
下载ElasticSearch的RPM包
本次通过rpm
包的方式进行安装,所以提前准备好:elasticsearch-7.8.0-x86_64.rpm。
1 | wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-x86_64.rpm |
安装ElasticSearch
1 | rpm -ivh elasticsearch-7.8.0-x86_64.rpm |
安装后的目录信息
Type | Description | Default Location | Setting |
---|---|---|---|
es home | ES的安装路径 | /usr/share/elasticsearch | |
bin | ES命令所在的路径 | /usr/share/elasticsearch/bin | |
conf | ES配置文件 | /etc/elasticsearch | ES_PATH_CONF |
conf | ES环境变量 | /etc/sysconfig/elasticsearch | |
jdk | ES内置JDK路径 | /usr/share/elasticsearch/jdk | |
plugins | ES插件所在路径 | /usr/share/elasticsearch/plugins |
配置ES
修改elasticsearch.yml
1 | vim /etc/elasticsearch/elasticsearch.yml |
cluster.name
集群名称
1 | cluster.name: es-cluster |
node.name
节点名称
1 | node.name: node-1 |
path.data
数据所在路径,可以设置多个,按照如下两种方式设置
1 | path.data: /mnt/disk1/es7/data,/mnt/disk2/es7/data,/mnt/disk3/es7/data,/mnt/disk4/es7/data,/mnt/disk5/es7/data,/mnt/disk6/es7/data,/mnt/disk7/es7/data,/mnt/disk8/es7/data |
或者:
1 | path: |
path.logs
ES运行日志所在路径,只需要设置几个即可。
1 | path.logs: /mnt/disk1/es7/logs # 我用的这一种 |
或者
1 | path: |
bootstrap.memory_lock
是否锁定内存,默认是false,但是在生产环境建议设置为true。由于当jvm开始swapping时es的效率会降低,所以要保证它不swap,这对节点健康极其重要。解决方法就是设置
bootstrap.memory_lock: true
,并且需要让操作系统也支持,还需要修改/etc/security/limits.conf
配置文件。
1 | bootstrap.memory_lock: true |
修改/etc/security/limits.conf
1 | vim /etc/security/limits.conf |
在/etc/systemd/system/elasticsearch.service.d
目录下创建override.conf
。并填入如下内容:
1 | [Service] |
可参考Configuring system settings | Elasticsearch Reference 7.9 | Elastic
network.host
ES 绑定的IP地址,通常图省事都是0.0.0.0(多网卡会绑定其网卡所有的IP),也可以指定该服务器上网卡的IP
1 | network.host: 0.0.0.0 |
http.port
ES的HTTP端口,默认是9200,如果被占用了可以在这里进行修改
1 | http.port: 9200 |
transport.tcp.port
ES集群间通信的端口,默认9300,且该配置项不存在,如需修改需要手动添加,通常为了方便还是将其加上吧,难免会遇到一台机器多个不同版本ES的存在。
1 | transport.tcp.port: 9300 |
discovery.seed_hosts
如果要与其他主机上的节点组成集群,则必须设置 discovery.seed_hosts,提供集群中其他主机的列表,这些节点都具备主机资格,并且可能在其中处于活动状态并可以联系,以便为发现过程。此设置通常应包含群集中所有符合主机条件的节点的地址,是主机地址数组或逗号分隔的字符串。每个值都采用 host:port 或者 host 形式。注意,IPV6 主机放在方括号里。默认值是: 127.0.0.1, [::1].
1 | discovery.seed_hosts: ["es01:9300", "es02:9300", "es03:9300", "es04", "es05"] |
或者
1 | discovery.seed_hosts: |
cluster.initial_master_nodes
首次启动ES时参与集群选主的节点,对于生产环境的集群来说,必须配置上。不配置也不会造成错误,但是自动引导是不安全的。这里配置的一定是
node.name
的值,大多数人推荐单数节点,不知道是不是受Zookeeper影响,实际上双数也没遇到过脑裂的情况。
1 | cluster.initial_master_nodes: ["node-1","node-2","node-3"] |
或者
1 | cluster.initial_master_nodes: |
discovery.zen.minimum_master_nodes
最小主节点数,这对你的集群的稳定
极其
重要,当你的集群中有两个 masters(注:主节点)的时候,这个配置有助于防止 脑裂 ,一种两个主节点同时存在于一个集群的现象。官方对这个值的设定公式为:( master 候选节点个数 / 2) + 1,比如本次有三个master,那么我们需要将其设置为2,除不尽的向下取整。
1 | discovery.zen.minimum_master_nodes: 2 |
node.max_local_storage_nodes
一台服务器最多能启动的ES节点数,如果是rpm安装的那只能启动一台,如果是压缩包方式安装的,这里可以根据实际情况设置。通常如果专用服务器的内存很大(128G),但是ES官方推荐最大堆不超过32G,所以这台机器上可以部署2-3个节点。
1 | node.max_local_storage_nodes: 2 # 即使设置了2,你启动一个也没问题 |
action.auto_create_index
自动创建索引,默认也是true
1 | action.auto_create_index: true |
xpack.monitoring.collection.enabled
开启x-pack监控
1 | xpack.monitoring.collection.enabled: true |
bootstrap.system_call_filter
是否支持过滤掉系统调用,在bootstrap的时候check是否支持seccomp
1 | bootstrap.system_call_filter: false |
xpack.security.enabled
是否开启x-pack的安全认证,有需要的人开启即可
1 | xpack.security.enabled: false |
node.master
是否允许该节点可以选举为master,该配置默认为true,而且这个配置项也不存在,如果需严格区分master节点、data节点、负载均衡节点的话需要加上。按照node.master和node.data的组合来区分节点角色。
1 | node.master: true |
node.data
该节点是否是数据节点
1 | node.data: true |
如果node.master
和node.data
都是false,那么该节点就是负载均衡节点。
最终配置文件elasticsearch.yml
:
1 | # 集群名称 |
修改jvm.options
如果需要配置JVM相关的参数,需要修改这里:
1 | -Xms10g |
该节点最大堆和最小堆都是10g,这里推荐两个值设置为相同的值。
修改ES的JAVA_HOME
1 | vi /etc/sysconfig/elasticsearch |
将其注释打开,将值设置为ES自带的JDK版本。不要使用JDK1.8及以下的版本。
1 | JAVA_HOME=/usr/share/elasticsearch/jdk |
修改系统参数
光修改ES的配置还是不够的,还需要系统参数的支持。
最大进程数
1 | vi /etc/security/limits.d/90-nproc.conf |
进程可以拥有的VMA(虚拟内存区域)的数量
1 | vi /etc/sysctl.conf |
最大打开文件数
1 | vi /etc/security/limits.conf |
最大文件打开数一定是超过65535
的。
启动ES集群
将配置文件分发到其他机器上,并且只需要修改如下内容即可:
node.name
path.data
node.master
node.data
修改完成后,启动ES
1 | service elasticsearch start |
打开其中一个节点http://10.10.100.50:9200/_cat/nodes 即可看到类似如下内容:
1 | 10.10.100.52 41 74 -1 1.14 1.95 2.57 dilmrt - node-3 |