ES版本依赖: https://www.elastic.co/cn/support/matrix
环境
- Linux CentOS-7.6
- JDK 8+
三台服务器:
IP | hostname |
---|---|
x.x.x.101 | s01 |
x.x.x.102 | s02 |
x.x.x.103 | s03 |
准备
现在完成后上传至Linux服务器。比如通过ssh rz
命令上传到home目录
[root@s01 ~]# rz
[root@s01 ~]# ls
elasticsearch-7.7.0-linux-x86_64.tar.gz
安装
- 创建es用户组
useradd es
注意:ES不能运行在 root 用户下,需创建普通用户 - 解压es安装包到/opt目录下
tar -xzvf elasticsearch-7.7.0-linux-x86_64.tar.gz -C /opt/
- 修改目录所属用户和组
chown -R es:es /opt/elasticsearch-7.7.0
配置
- 创建存放数据与日志的目录并授权用户
[root@s01 ~]# cd /srv/
[root@s01 srv]# mkdir es
[root@s01 es]# cd es/
[root@s01 es]# mkdir {data,logs}
[root@s01 es]# chown -R es:es /srv/es
- 修改Elasticsearch配置
vim /opt/elasticsearch-7.7.0/config/elasticsearch.yml
cluster.name: es # ES集群名
node.name: node-1 # 当前节点名,不同节点填写不同名称
path.data: /srv/es/data # 数据存放路径
path.logs: /srv/es/logs # 日志存放路径
bootstrap.memory_lock: false # 锁定物理内存地址,防止es内存被交换(swap)出去。这里先不锁定
network.host: 192.168.1.151 # 绑定IP地址,设置本节点IP
http.port: 9200 # HTTP访问端口
http.cors.enabled: true # 开启跨域访问
http.cors.allow-origin: "*" # 允许任何访问
discovery.seed_hosts: ["s01.ts.com", "s02.ts.com", "s03.ts.com"] # 集群选举时,可通信的候选地址(hostname, ip, ip:port)
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"] # 集群初始化的提供的master候选地址,第一次启动时将从该列表中获取master
安装可视化工具
这里选择 ElasticHD ,解压即可使用。
[root@s01 ~]# firewall-cmd --permanent --zone=public --add-port=9800/tcp --permanent
success
[root@s01 ~]# firewall-cmd --reload # 重启防火墙
success
[root@s01 ~]# cd /opt/elasticHD/
[root@s01 elasticHD]# su es
[es@s01 elasticHD]$ nohup ./ElasticHD > ./eshd.log 2>&1 &
[1] 17317
有关ES可视化工具,参见下面附录
启动
- 切换到es安装目录
cd /opt/elasticsearch-7.7.0
- 切换用户
su es
- 启动
./bin/elasticsearch
/bin/elasticsearch -d # 后台启动
- 查看服务是否启动成功
(1) 通过查看端口占用情况9200,9300
[root@s01 ~]$ netstat -ntlp
tcp6 0 0 192.168.200.101:9200 :::* LISTEN 15779/java
tcp6 0 0 192.168.200.101:9300 :::* LISTEN 15779/java
- Java Api: java代码调用es的API方式,默认端口: 9300
- RESTful API: 基于http协议,任何语言都可以交互,默认端口: 9200
问题解答
1. 不能使用root用户运行
报错如下,切换至非root用户即可
java.lang.RuntimeException: can not run elasticsearch as root
2. JDK版本不符合要求
future versions of Elasticsearch will require Java 11; your Java version from [/opt/jdk1.8.0_231/jre] does not meet this requirement
ES未来的把版本要求匹配JDK 11,这里可以忽略。
- 要使用自己的Java版本,设置JAVA_HOME环境变量即可,且Java是受支持的LTS版本。
- 如果使用的版本不匹配,ES拒绝启动。
- 使用自己的JVM时,可以删除捆绑的JVM目录(es解压目录下的jdk目录)。
说明看这里
3. ERROR: [3] bootstrap checks failed
ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3795] for user [es] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
启动检查失败,这里有三个错误。
[1] es进程的最大文件描述符[4096]太低,请至少增加到[65535]
[2] 用户[es]的最大线程数[3795]太低,请至少增加到[4096]
[3] 最大虚拟内存区域[65530]太低,请至少增加到[262144]
修改limits.conf配置 vim /etc/security/limits.conf
在末尾添加如下内容:
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
修改sysctl.conf配置 vim /etc/sysctl.conf
在末尾添加如下内容:
vm.max_map_count = 655300
修改保存之后重新加载配置
sysctl -p
4. 正常启动,外网访问不到
查看防火墙状态,看防火墙是未开启此端口。
[root@s01 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 一 2020-05-11 11:26:54 CST; 5 days ago
Docs: man:firewalld(1)
Main PID: 6653 (firewalld)
CGroup: /system.slice/firewalld.service
└─6653 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
5月 11 11:26:51 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
5月 11 11:26:54 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
[root@s01 ~]# firewall-cmd --permanent --query-port=9200/tcp
no
直接关闭防火墙(比较暴力)
[root@s01 ~]# systemctl stop firewalld
或者开启端口
[root@s01 ~]# firewall-cmd --permanent --zone=public --add-port=9200/tcp --permanent
success
[root@s01 ~]# firewall-cmd --permanent --query-port=9200/tcp
yes
[root@s01 ~]# firewall-cmd --reload # 重启防火墙
success
浏览器可以成功访问: http://192.168.200.101:9200
image.png5. master not discovered yet
日志不停的打印警告,主节点没有发现,原因是9300端口防火墙没有放开,因为节点通信、发现、选举master,默认使用9300端口。
[2020-05-16T21:49:31,592][WARN ][o.e.c.c.ClusterFormationFailureHelper] [node-3] master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes [node-1, node-2, node-3] to bootstrap a cluster: have discovered [{node-3}{NiGARuh-SbC28_voF4ZHtQ}{RF26rHS2RACiqkYuqdOZ1Q}{192.168.200.103}{192.168.200.103:9300}{dilmrt}{ml.machine_memory=1019797504, xpack.installed=true, transform.node=true, ml.max_open_jobs=20}]; discovery will continue using [192.168.200.101:9300, 192.168.200.102:9300] from hosts providers and [{node-3}{NiGARuh-SbC28_voF4ZHtQ}{RF26rHS2RACiqkYuqdOZ1Q}{192.168.200.103}{192.168.200.103:9300}{dilmrt}{ml.machine_memory=1019797504, xpack.installed=true, transform.node=true, ml.max_open_jobs=20}] from last-known cluster state; node term 0, last-accepted version 0 in term 0
附录
ES官网: https://www.elastic.co/cn/elasticsearch
官网文档: https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
中文社区: https://elasticsearch.cn/
ES常用工具清单: https://blog.csdn.net/laoyang360/article/details/80645710
网友评论