ElasticSearch单机/集群搭建教程

2021-05-14 17:28:24 浏览数 (1)

本文将介绍ElasticSearch单机版与集群版的安装与配置,ElasticSearch依赖JRE,注意机器是否安装JDK8【最低版本要求就是JDK8】,且JDK环境变量是否已配置完成

代码语言:javascript复制
java -version
代码语言:javascript复制
echo $JAVA_HOME

一、下载

《从官网下载ElasticSearch》

二、上传安装包到虚拟机

解压到/usr/local/下

三、创建一个普通用户

注意,处于安全考虑,ElasticSearch禁止以root用户身份运行,否则将会报如下错误

代码语言:javascript复制
[root@hdp-01 bin]# ./elasticsearch
[2018-01-02T17:42:42,296][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException:can not run elasticsearch as root
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.1.1.jar:6.1.1]
at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:85) ~[elasticsearch-6.1.1.jar:6.1.1]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:322) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-6.1.1.jar:6.1.1]
... 6 more

3.1    创建一个普通用户

代码语言:javascript复制
useradd itcats

为itcats用户添加密码

代码语言:javascript复制
passwd itcats

对于的目录修改为普通用户的所属用户和所属组,假设ElasticSeach安装在/usr/local/下

代码语言:javascript复制
chown -R itcats:itcats /usr/local/elasticsearch

执行命令验证

代码语言:javascript复制
ll

若显示    drwxr-xr-x. 10 itcats itcats 4096 Apr 25 11:32 elasticsearch  则成功

3.2    修改配置文件【注意:后空一格】

配置文件存在于config目录下

elasticsearch.yml  -> es的相关配置

jvm.options           -> jvm相关配置

log4j2.properties  -> 日志信息配置

elasticsearch.yml 配置说明

  1. cluster.name  集群名称,以此作为是否同一个集群的判断条件
  2. node.name  节点名称,以此作为集群中不同节点的区分条件
  3. network.host/http.port 网络地址和端口,用于http和transport服务使用
  4. path.data  数据存储地址
  5. path.log  日志存储地址

因为是yml后缀文件,需要注意改配置时候,在冒号后面空一格

代码语言:javascript复制
cd /usr/local/elasticsearch/config
代码语言:javascript复制
vi elasticsearch.yml

修改两处配置:

代码语言:javascript复制
network.host: 10.211.55.36

http.port: 9200

3.3    启动,发现报错

先切换到itcats用户身份,否则报错:

代码语言:javascript复制
su itcats

启动命令:

代码语言:javascript复制
bin/elasticsearch

发现报错:

代码语言:javascript复制
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
	[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

原因是打开文件的数量和虚拟内存的数量都太小了,需要修改配置

修改可打开文件数量:【root身份】

代码语言:javascript复制
sudo vi /etc/security/limits.conf

在文件的最末尾添加:

代码语言:javascript复制
* soft nofile 65536
* hard nofile 65536

保存退出

查看可打开文件数量

代码语言:javascript复制
ulimit -Hn

设置最大虚拟内存

代码语言:javascript复制
sudo vi /etc/sysctl.conf

修改配置,在文件末尾添加一行:

代码语言:javascript复制
vm.max_map_count=262144

保存退出

查看虚拟内存的大小

代码语言:javascript复制
sudo sysctl -p

3.4    关机重启linux

代码语言:javascript复制
shutdown -r now

先启动elasticsearch

1、切换到普通用户身份

代码语言:javascript复制
su itcats

2、进入到elasticsearch安装目录

代码语言:javascript复制
cd /usr/local/elasticsearch/bin

3、启动

代码语言:javascript复制
#前台启动
./elasticsearch

#后台启动
./elasticsearch -d

3.5    验证单机版安装是否成功

通过浏览器访问ES

代码语言:javascript复制
http://hdp-01:9200

若正常返回json串,则到此位置ElasticSearch安装完毕

3.6    Development与Production模式说明

  • 以transport的地址是否为localhost或127.0.0.1作为判断是Development与Production模式,一但将network.host改为真实的ip地址(非localhost和127.0.0.1),ES就认为处于Production模式
  • Development模式下在启动时会以warning的方式提示配置检查异常
  • 在Production模式下在启动时会以error的方式提示配置检查异常并退出
  • 除了通过network.host修改地址,还可以通过 bin/elasticsearch -Ehttp.port=19200  方式修改

4、集群版配置

在本地启动集群的方式

1.     bin/elasticsearch

2.     bin/elasticsearch -Ehttp.port=8200 -Epath.data=node2

3.     bin/elasticsearch -Ehttp.port=7200 -Epath.data=node3

4.     查看三台节点是否在同一个集群中   http://127.0.0.1:7200/_cat/nodes             plus:访问7200   8200 9200都可以,如果返回三个节点则说明集群启动成功  【*为主节点】

代码语言:javascript复制
127.0.0.1 17 100 10 3.55   mdi - localhost
127.0.0.1 25 100 13 3.55   mdi * localhost
127.0.0.1 17 100 14 3.55   mdi - localhost

5.      查看cluster的详细信息    http://localhost:7200/_cluster/stats

4.1    准备工作

代码语言:javascript复制
准备3台机器
10.211.55.26  hdp-01  (刚已装好的单机版)
10.211.55.27  hdp-02
10.211.55.28  hdp-03

同样,在另外两台机器上也要创建好用户,并把elasticsearch安装目录修改为普通用户的所属用户和所属组,参考3.1

检查3台机器的jdk和环境变量是否配置好,参考文章开头

上传es安装包到另外两台机器,也可通过scp命令复制到另外两台机器

代码语言:javascript复制
scp -r /usr/local/elasticsearch hdp-02:/usr/local/
scp -r /usr/local/elasticsearch hdp-03:/usr/local/

上述的hdp-02和hdp-03是我设置的域名映射,读者改为自己机器的ip地址即可

4.2    修改配置

以下步骤,集群的3台机器做同样的修改操作

代码语言:javascript复制
vi /usr/local/elasticsearch/config/elasticsearch.yml

修改配置:【再次提醒,yml文件在修改配置时冒号后面空格一位】

代码语言:javascript复制
#集群名称,通过组播的方式通信,通过名称判断属于哪个集群,我修改为myes,三台机器都必须相同
cluster.name: myes

#节点名称,要唯一,我修改为node-1,node-2,node-3
node.name: node-1

#数据存放位置
path.data: /usr/local/elasticsearch/esdata

#日志存放位置(可选)
path.logs: /usr/local/elasticsearch/eslog

#es绑定的ip地址,根据自己机器ip进行修改,我的机器分别是10.211.55.26/27/28
network.host: 10.211.55.26

#初始化时可进行选举的节点,""内部写自己ip地址,我是配置了域名映射
discovery.zen.ping.unicast.hosts: ["hdp-01", "hdp-02", "hdp-03"]

plus:最后一处配置,即初始化时可进行选举节点,可只配置在集群的一台机器,当然每个机器都配置也可以。

另外别忘了,在三台机器目录下都创建以下目录【用于存放data和log】:

代码语言:javascript复制
mkdir /usr/local/elasticsearch/esdata

mkdir /usr/local/elasticsearch/eslog

可以在普通用户itcats身份下创建,也可以在root下创建,但最后别忘了检查目录所属的用户与组。

代码语言:javascript复制
ll

正常返回:

代码语言:javascript复制
drwxrwxr-x.  3 itcats itcats   4096 Apr 25 09:45 data
drwxrwxr-x.  3 itcats itcats   4096 Apr 25 11:42 esdata

4.3    集群中的三台机器启动

代码语言:javascript复制
/usr/local/elasticsearch/bin/elasticsearch -d

执行jps,每台机器都进行验证,正常会返回:

代码语言:javascript复制
[root@hdp-02 bin]# jps
2178 Jps
1924 Elasticsearch

如果没有显示ElasticSearch,那么就不要后台启动了,执行如下命令检查报错,也可去log/下检查日志文件看报错:

代码语言:javascript复制
/usr/local/elasticsearch/bin/elasticsearch

4.4    最后的验证

在浏览器中打开:

代码语言:javascript复制
http://hdp-01:9200
http://hdp-02:9200
http://hdp-03:9200

正常都会显示如下:

那么恭喜你,ES集群也安装成功了~!!!

#查看集群状态

代码语言:javascript复制
curl -XGET 'http://hdp-01:9200/_cluster/health?pretty'
代码语言:javascript复制
http://hdp-01:9200/_cluster/health?pretty

0 人点赞