记录一下ES集群的搭建
环境:Centos7.6、elasticsearch7.9.0
准备
| ip |
系统 |
节点名称 |
| 172.16.88.26 |
centos7.6 |
Node01 |
| 172.16.88.27 |
centos7.6 |
Node02 |
| 172.16.88.28 |
centos7.6 |
Node03 |
下载安装ELasticsearch
单机安装步骤在这里
修改集群设置
修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
###每个节点都需要修改此配置文件
$ vim /usr/local/elasticsearch-7.9.0/config/elasticsearch.yml
###修改为以下内容
# 允许其他机器访问
network.bind_host: 0.0.0.0
#设置集群名称,保证每个节点的此参数名称相同,这样就能都处于一个集群之内了
cluster.name: kute-elasticsearch
##设置节点名称,每个节点的名称必须不一样
node.name: es-node1
##是不是有资格竞选主节点
node.master: true
##是否存储数据 数据节点,用于对文档数据的增删改查
node.data: true
# 监听端口(默认)
http.port: 9200
##设置绑定ip,设置为0.0.0.0外网都能访问
network.host: 172.16.88.26
##设置数据存储路径
path.data: /usr/local/elasticsearch-7.9.0/data
##设置日志存储路径
path.logs: /usr/local/elasticsearch-7.9.0/logs
# 集群TCP端口
transport.tcp.port: 9300
##初始化主节点 es7.x 之后新增的配置 初始化一个新的集群时需要此配置来选举 master
cluster.initial_master_nodes: ["es-node1"]
# 集群列表 es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["172.16.88.26:9300", "172.16.88.27:9300", "172.16.88.28:9300"]
# 为了避免脑裂,集群节点数最少为 半数+1
discovery.zen.minimum_master_nodes: 2
# # # 增加参数,使head插件可以访问es
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
http.max_content_length: 200mb
#集群内同时启动的数据任务个数,默认是 2 个
cluster.routing.allocation.cluster_concurrent_rebalance: 16
#添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
cluster.routing.allocation.node_concurrent_recoveries: 16
#初始化数据恢复时,并发恢复线程的个数,默认 4 个
cluster.routing.allocation.node_initial_primaries_recoveries: 16
#只要指定数量的节点加入集群,就开始进行恢复
gateway.recover_after_nodes: 2
#如果期望的节点数量没有达标,那么会等待一定的时间,然后就开始进行shard recovery,默认是等待5m
gateway.recover_after_time: 5m
#要求必须有多少个节点在集群中,当加入集群中的节点数量达到这个期望数值之后,每个node的local shard的恢复就会理解开始,默认的值是0,也就是不会做任何的等待
gateway.expected_nodes: 2
#查询结果在分片上找到的条目超过了限定的10000个,官网限制在10000是为了其性能考虑的。需要调大search.max_buckets这个参数。
search.max_buckets: 90000000
#es的查询参数限制,默认是限制只能传入1024个参数
indices.query.bool.max_clause_count: 10240
#将阻止主副本分片被分配到同一台物理机,提高可用性。
cluster.routing.allocation.same_shard.host: true
#ES默认开启了内存地址锁定,为了避免内存交换提高性能。但是Centos6不支持SecComp功能,启动会报错,Centos7支持
#这里暂时关闭 测试后发现centos7添加也会报错
bootstrap.memory_lock: true
#设置是否压缩tcp传输时的数据,默认为false,不压缩。
transport.tcp.compress: true
|
- 注意 三台机器就
node.name和network.host的值不一样,其他配置都一样
启动查看
分别启动三台es,执行get请求,查看节点信息
http://172.16.88.26:9200/_cat/nodes
显示如下,可以看到node1为主节点
1
2
3
|
172.16.88.28 29 38 0 0.61 0.45 0.25 dilmrt - es-node3
172.16.88.27 10 40 0 0.04 0.07 0.07 dilmrt - es-node2
172.16.88.26 22 28 1 0.01 0.06 0.05 dilmrt * es-node1
|
es-head查看

搭建问题处理
bootstrap.memory_lock问题
elasticsearch官网建议生产环境需要设置bootstrap.memory_lock: true
但是此参数设置为true后,启动es时会报以下错误
1
2
3
|
[xxxx-xx-xxT20:00:30,594][ERROR][o.e.b.Bootstrap ] [es-node1] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
|
解决办法
- 修改文件/etc/security/limits.conf,最后添加以下内容。
1
2
3
4
5
6
|
* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
* hard memlock unlimited
* soft memlock unlimited
|
- 修改文件 /etc/systemd/system.conf ,分别修改以下内容。
1
2
3
|
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
|
然后重启服务器,再启动elasticsearch