本文将介绍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 配置说明
- cluster.name 集群名称,以此作为是否同一个集群的判断条件
- node.name 节点名称,以此作为集群中不同节点的区分条件
- network.host/http.port 网络地址和端口,用于http和transport服务使用
- path.data 数据存储地址
- 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