在网上现在有很多那种ES步骤和问题的解决 方案的,不过没有一个详细的整合和问题的梳理;现在我们来记录一下自己安装的过程以及遇到问题的解决;有什么不对的和问题希望及时拍砖。
Linux系统:CentOS 7.5
ES安装环境的准备和初始化
现在比较新的版本Elasticsearch 5.6.3,官方建议安装Oracle的JDK8,安装前先检查机器是否已安装JDK。
检查环境机器是否已安装JDK
rpm -qa | grep -E '^open[jre|jdk]|j[re|dk]'
如果有的话,卸载掉,可以使用rpm -qa | grep Java | xargs rpm -e --nodeps 批量卸载所有带有Java的文件,然后进行重新安装。
下载新的JDK
下载网址:
[linuxidc@localhost ~]$ wget --no-check-certificate --no-cookies > --header "Cookie: oraclelicense=accept-securebackup-cookie" > http://download.oracle.com/otn-pub/java/jdk/8u192-b12/750e1c8617c5452694857ad95c3ee230/jdk-8u192-linux-x64.tar.gz
JDK的下载可以去官网上直接下载,再次声明一下不要下载最新版本 JAVA 9 版本本人在次已经踩过坑了
ES 去官网直接下载,本人使用的是 5.6.3 版本;因为版本的不同安装head插件的时候安装步骤不同;好像是从5.0 以后的版本安装head 插件的步骤就不一样了;下面会详细介绍。
安装JDK环境
前提:查看该系统是否安装过Java 环境,如果安装过将其卸载安装最新的版本,更换Java 的版本也可以这样去操作。
执行命令 rpm -qa|grep jdk 如果安装过将会列出相应的版本,如果没有什么都不会输出。如果安装过使用rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.2.el7_2.x86_64 使用这个命令需要注意的就是,列出多少个版本插件就要卸载几个插件;执行完成后;在使用 rpm -qa|grep jdk 去查看一下是否有遗漏的插件没有卸载。
直接将下载好的 jdk-8u192-linux-x64.rpm 安装包 ;上传到自己创建好的java文件下;cd 命令进入到java文件下使用rpm 命令进行安装 rpm -ivh jdk-8u192-linux-x64.rpm
安装完成后执行 java -version 命令查看安装是否成功
查看安装目录命令,
命令一:
[linuxidc@localhost ~]$ java -version java version "1.8.0_192" Java(TM) SE Runtime Environment (build 1.8.0_192-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
命令二:
[linuxidc@localhost ~]$ which java /usr/bin/java
[linuxidc@localhost ~]$ ls -lrt /usr/bin/java lrwxrwxrwx. 1 root root 22 11月 12 18:23 /usr/bin/java -> /etc/alternatives/java
命令三:
[linuxidc@localhost ~]$ ls -lrt /etc/alternatives/java lrwxrwxrwx. 1 root root 41 11月 12 18:23 /etc/alternatives/java -> /usr/java/jdk1.8.0_192-amd64/jre/bin/java
最后将会得出如如上这样的目录 /usr/java/jdk1.8.0_192-amd64/jre/bin/java
如下图:
配置环境变量,执行命令 nano /etc/profile;然后进入编辑模式,在文件的最后添加下面的配置,如图
JAVA_HOME=/usr/java/jdk1.8.0_192-amd64
JRE_HOME=/usr/java/jdk1.8.0_192-amd64/jre
CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
修改完配置后,保存并退出。
执行命令 source /etc/profile 使用环境变量生效
验证环境变量是否生效,分别执行下面的命令
echo $JAVA_HOME
echo $CLASSPATH
echo $PATH
OK,到现在JDK就安装好了。
安装Elasticsearch
下载ES安装包elasticsearch-5.6.3.tar.gz
进入ES官网,选择合适的版本网址,进行下载
以下是5.6.3 版本的网址
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.tar.gz
新建账号
因为使用root用户执行ES程序,将会出现错误;
[WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
所以这里需要创建单独的用户去执行ES 文件;命令如下:
useradd estest --添加账号
chown -R estest:estest elasticsearch-5.6.3 --为新增账号赋予文档目录的权限
su estest ---切换账号
创建ES数据文件和日志文件,直接在root用户根目录一下创建就可以了
执行命令一:mkdir /data
命令二:chown -R estest:estest data
执行命令三:mkdir /logs
命令四:chown -R estest:estest logs
看看,如下图
修改ES配置文件,使用cd命令进入到config 文件下,执行 nano elasticsearch.yml 命令,如图所示,本人没有配置集群,只是简单的配置了一下;详细说明可以参考官网;
启动ES
在新建的账号estest下启动ES。
在ES 的bin 文件所在的目录下执行以下命令即可
./elasticsearch -d
验证 ES 是否正常启动
方法1. curl http://localhost:9200/ 检查,显示以下信息证明已启动OK。
启用远程IP 访问
Elasticsearch 默认是rest-api的端口是9200,不支持IP地址,只能在本机使用http://localhost:9200 来访问,如果需要完成访问,还需进行以下配置。
Step 1 修改elasticsearch.yml 文件中的network.host 和 http.port 参数
去除文件中network.host 和 http.port 参数前面的注释(#),且将network.host 的IP地址修改为本地的IP地址。
Step 2 .编辑/etc/security/limits.conf 文档,在文档中添加以下参数
sudo nano /etc/security/limits.conf
* soft nofile 65536 * hard nofile 131072
此参数主要解决以下错误:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
需要退出当前用户,再次登录才能生效。
Step 3 . 编辑vim /etc/sysctl.conf 文档,在文档中添加以下参数
vm.max_map_count=655360
编辑保存后并执行命令: sysctl -p
此操作主要是解决以下问题
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ps:别的机器进行访问时需要开放9200端口和9300端口,9200是http协议端口,9300是tcp协议端口,为java client服务的。我这里没有单独打开端口,只是关闭了防火强,CentOS7关闭防火墙和CentOS6不一样,7的防火墙是firewalld的服务,执行命令 //临时关闭 systemctl stop firewalld //禁止开机启动 systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.Fedoraproject.FirewallD1.service.
集群时需要添加一些配置,如果搭三个虚拟机做集群,想cluster.name相同时发现并不是集群,在es配置文件中需要添加额外配置 discovery.zen.ping.unicast.hosts: ["xxx.xxx.xxx","xxx.xxx.xxx","xxx.xxx.xxx"] discovery.zen.minimum_master_nodes: 3
解释说明: bootstrap.memory_lock: false 这是锁定内存,在一篇调优文章中这个设置成true时会减少内存交换的消耗,这里先设置成false bootstrap.system_call_filter: false 这个配置设置true在CentOS6或以上时会出现错误, 因为Centos6不支持SecComp
cluster.name 集群名字,同一个集群中使用相同名字,单机就随意 node.name: node-01 节点名字 node.master: 是否为集群的master机器 node.data: true 是否作为数据节点 network.host: xxx.xxx.xxx.xxx 这个不用自然是配置ip地址的 http.port: 9200 端口号,不配置的话默认9200 discovery.zen.ping.unicast.hosts: [“xxx.xxx.xxx”,”xxx.xxx.xxx”,”xxx.xxx.xxx”] 这个就是配置集群的时候要用的到了,[]中填上集群中其他集群的ip的地址,如果是master的话请把所有salve的机器地址填上 discovery.zen.minimum_master_nodes: 2 关于这个值配置多少合适的话大家去搜一下,自己权衡一下集群,这里我用了3台机器模拟集群,所以填上2。 http.cors.enabled: true 这个参数的设置和下面一个配置就关于ip的访问策略了,如果你发现其他ip地址访问不了就有可以这参数没有配置 http.cors.allow-origin: “*”
未完待续,请关注。