共计 4608 个字符,预计需要花费 12 分钟才能阅读完成。
在网上现在有很多那种 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:“*”
未完待续,请关注。
: