Elasticsearch 集群

启动用户

1
2
3
[root@localhost elasticsearch]# tar xf elasticsearch-7.10.1-linux-x86_64.tar.gz
[root@localhost elasticsearch]# cd elasticsearch-7.10.1/bin
[root@rocketmq-nameserver1 bin]# ./elasticsearch

直接通过root启动,将会出现以下异常:

1
java.lang.RuntimeException: can not run elasticsearch as root

原因是ES为了安全,不允许直接使用root用户启动,需要创建用户启动:

1
2
3
4
5
6
7
8
#创建用户:elasticsearch
[root@localhost bin]# adduser elasticsearch
#创建用户密码,需要输入两次
[root@localhost bin]# passwd elasticsearch
#切换到es文件夹上,将对应的文件夹权限赋给该用户
[root@localhost elasticsearch]# chown -R elasticsearch elasticsearch-7.10.1
#切换至elasticsearch用户
[elasticsearch@localhost elasticsearch]# su elasticsearch

集群配置

linux下的elasticsearch.yml配置:

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
#---------------------------------- Cluster -----------------------------------
#配置文件配置相同的集群名称
cluster.name: my-application

# ------------------------------------ Node ------------------------------------
#各个节点需要有不同的结点名称
node.name: node-1

# ----------------------------------- Paths ------------------------------------
#节点存储数据目录 生产环境不要使用默认目录
path.data: /path/to/data
#节点存储日志目录 生产环境不要使用默认目录
path.logs: /path/to/logs

# ----------------------------------- Memory -----------------------------------
#开启引导检查的内存锁,关闭使用swapp分区,防止因为内存不足而使用swap分区造成机器性能下降
bootstrap.memory_lock: true

# ---------------------------------- Network -----------------------------------
#把当前节点绑定到以下IP上,如果配置了该项,会触发ES的引导检查
network.host: 192.168.163.129
#默认可以不用配置,区间[9200,9300)
#服务端口
http.port: 9200
#通讯端口,用于集群不同节点的通讯
transport.port: 9300

# --------------------------------- Discovery ----------------------------------
#当进行Master时,有哪些节点能参与竞选(node.master: true的节点)
discovery.seed_hosts: ["192.168.163.129:9300", "192.168.163.130:9300"]
#设置集群启动时竞选Master的节点列表
cluster.initial_master_nodes: ["node-1"]
#绕过引导检查(生产环境不能配置该项)
#discovery.type: single-node

http.cors.enabled: true
#允许跨域访问 *代表所有
http.cors.allow-origin: "*"

#标记该节点具备竞争master的资格
node.master: true
#该节点进行数据存储
node.data: false
1
2
3
4
#修改完配置后,关闭防火墙
[elasticsearch@localhost bin]# systemctl stop firewalld
#进入bin目录启动 -d:表示后台启动
[elasticsearch@localhost bin]# ./elasticsearch -d

如果克隆了服务器或者拷贝了多份elasticsearch目录,需要去path.data:配置的路径下删除节点信息,否则会造成ID重复的冲突。

基于Docker

不建议使用ES启动docker,因为很麻烦!!!

1
2
3
4
5
[root@localhost /]# docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.1
[root@localhost /]# docker run -d -p 9200:9200 -p 9300:9300 --name es elasticsearch:7.10.1

#启动命令参考
[root@localhost /]# docker run -d -p 9200:9200 -p 9300:9300 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e discovery.type=single-node --name es elasticsearch:7.10.1
1
2
3
问题1:error='Cannot allocate memory' 
原因:ES 5.x+堆内存大小默认配置为2G ES 7.x+默认4G
解决:-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
1
2
3
4
5
问题2:WARNING: IPv4 forwarding is disabled. Networking will not work.
解决: vi /etc/sysctl.conf
net.ipv4.ip_forward=1
restart network && systemctl restart docker
sysctl net.ipv4.ip_forward
1
2
3
4
5
6
7
8
9
问题3: max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解释: 5.0以后,ES使用mmapfs作为默认的文件系统存储类型。可以通过配置index.store.type来设置ES默认的文件系统存储类型。
Niofs(非阻塞文件系统) mmapfs(内存映射文件系统)
配置:index.store.type: niofs
解决:sysctl -w vm.max_map_count=262144
查看是否生效:
或:vi /etc/sysctl.conf
vm.max_map_count=262144
grep vm.max_map_count /etc/sysctl.conf
1
2
3
4
问题4:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
解决:vi /etc/security/limits.conf,最后添加以下内容。
* soft nofile 65536
* hard nofile 65536
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
问题5:max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]
解决:
vi /etc/security/limits.d/90-nproc.conf
修改如下内容(注意星号):
* soft nproc 1024 => * soft nproc 4096

当引导检查报未开启内存锁时,需要修改一下配置:
vi /etc/security/limits.conf,最后添加以下内容。
* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
* hard memlock unlimited
* soft memlock unlimited
vi /etc/systemd/system.conf ,分别修改以下内容。
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
注意 修改操作系统配置需要重启系统才能生效,如果宿主机内存过小,可能导致容器无法启动。开发模式内存建议4G以上,生产建议32G以上.
1
2
问题6:docker中的es无法加入集群
elasticsearch.yml配置中增加 network.publish_host:192.168.1.129
1
其他问题:如路径的权限问题、多网卡问题、引导检查问题

最后更新: 2020年12月16日 10:31

原始链接: https://midkuro.gitee.io/2020/12/10/elasticearch-cluster/

× 请我吃糖~
打赏二维码