Elasticsearch集群服务器部署

准备好安装的软件包: elasticsearch-6.2.2.tar.gz, elasticsearch-head-master.zip, Kibana_Hanization-master.zip, kibana-6.2.2-linux-x86_64.tar.gz, logstash-6.2.2.tar.gz

elasticsearch下载:要使用迅雷软件下载,浏览器难下载下来。

安装软件包 百度盘和PC机都有备份
elasticsearch-6.2.2.tar.gz
elasticsearch-head-master.zip
Kibana_Hanization-master.zip
kibana-6.2.2-linux-x86_64.tar.gz
logstash-6.2.2.tar.gz

最新版下载:https://www.elastic.co/downloads/elasticsearch#ga-release
其它版下载:
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.tar.gz
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
https://codeload.github.com/mobz/elasticsearch-head/zip/maste

安装好的结果如图

本配置参照:http://blog.51cto.com/lampzxr/2079935

三个安装包:
 1. jdk-8u121-linux-x64.tar.gz  (三台都要安装 )
 2.elasticsearch-6.2.2.tar.gz (三台都要安装 )
  下载:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.tar.gz
 3.elasticsearch-head-master.zip (elasticsearch的操作界面系统只安装在master 10.253.128.10 机上,其它服务器无须安装 )
   下载:https://codeload.github.com/mobz/elasticsearch-head/zip/maste

先说明一下:
每台机的 文件放在 home目录
     10.253.128.10   的home目录放三个文件:jdk-8u121-linux-x64.tar.gz,elasticsearch-6.2.2.tar.gz,elasticsearch-head.zip
     10.253.128.13   的home目录放二个文件:jdk-8u121-linux-x64.tar.gz,elasticsearch-6.2.2.tar.gz
     10.253.128.14   的home目录放二个文件:jdk-8u121-linux-x64.tar.gz,elasticsearch-6.2.2.tar.gz

一、三台服务器的 hosts 文件 指定 集群IP
 1.每台服务器
  [root@elasticsearch ]# vim /etc/hosts
     10.253.128.10  master  
     10.253.128.13  master data   
     10.253.128.14  master data 
2. 每台服务器增加一个 es 用户并给权限w12345678
   [root@elasticsearch1 ]useradd es  && passwd es 
   提示给密码:w12345678
3. 每台服务器安装java
   [root@elasticsearch1 ]# cd /home/
   [root@elasticsearch1 ]# mkdir  /usr/java
   [root@elasticsearch1 ]# tar -zxvf jdk-8u121-linux-x64.tar.gz  -C /usr/java
   [root@elasticsearch1 ]# vi /etc/profile
  编辑文件,在最后添加如下内容:
    export JAVA_HOME=/usr/java/current
    export PATH=$JAVA_HOME/bin:$PATH
   配置好之后要用命令
  [root@elasticsearch1]#  source /etc/profile
  使配置文件生效,这样jdk就安装完毕了。

4. 每台服务器创建指定的elasticsearch 数据目录和日志目录
    [root@elasticsearch1]#  mkdir -p /mnt/d/data/data/
    [root@elasticsearch1]#  mkdir -p /mnt/d/data/logs/
    给数据存放目录权限:[root@elasticsearch1]# chown -R es:es /mnt/d/data
5. 每台服务器解压elasticsearch-6.2.2.tar.gz,elasticsearch-head.zip文件
    [root@elasticsearch1 ]# cd /home/
    [root@elasticsearch1]# tar xzvf  elasticsearch-6.2.2.tar.gz     
    给elasticsearch-6.2.2目录权限:chown -R es:es /home/elasticsearch-6.2.2
  
6、每台服务器elasticsearch.yml文件修改配置,详情如下
10服务器 配置信息: /home/elasticsearch-6.2.2/config/elasticsearch.yml

#注意yml文件格式:(空格)name:(空格)value(空格)
#将下面内容复制到elasticsearch.yml文件最后
也要注意 中文注释 引起的invalid UTF8 的报错“ #允许跨域,用于elasticsearch-head界面系统"

 cluster.name: my-application 
 node.name: node-10-253-128-10 
 path.data: /mnt/d/data/data 
 path.logs: /mnt/d/data/logs 
 bootstrap.memory_lock: false 
 bootstrap.system_call_filter: false 
 network.host: 0.0.0.0 
 #network.host: 10.253.128.10 
 http.port: 9200 
 discovery.zen.ping.unicast.hosts: ["10.253.128.10:9300","10.253.128.13:9300","10.253.128.14:9300"] 
 discovery.zen.minimum_master_nodes: 2 
 gateway.recover_after_nodes: 3 
 node.master: true 
 node.data: true 
 node.ingest: false 
 search.remote.connect: false 
 #允许跨域,用于elasticsearch-head界面系统
 http.cors.enabled: true 
 http.cors.allow-origin: "*" 

13 服务器 配置信息: /home/elasticsearch-6.2.2/config/elasticsearch.yml

#注意yml文件格式:(空格)name:(空格)value(空格)
#将下面内容复制到elasticsearch.yml文件最后
也要注意 中文注释 引起的invalid UTF8 的报错“ #允许跨域,用于elasticsearch-head界面系统"

 cluster.name: my-application 
 node.name: node-10-253-128-13 
 path.data: /mnt/d/data/data 
 path.logs: /mnt/d/data/logs 
 bootstrap.memory_lock: false 
 bootstrap.system_call_filter: false 
 network.host: 0.0.0.0 
 http.port: 9200 
 discovery.zen.ping.unicast.hosts: ["10.253.128.10:9300","10.253.128.13:9300","10.253.128.14:9300"] 
 discovery.zen.minimum_master_nodes: 2 
 gateway.recover_after_nodes: 3 
 node.master: true 
 node.data: true
 node.ingest: false 
 search.remote.connect: false 
 #允许跨域,用于elasticsearch-head界面系统
 http.cors.enabled: true 
 http.cors.allow-origin: "*" 


14 服务器 配置信息: /home/elasticsearch-6.2.2/config/elasticsearch.yml

#注意yml文件格式:(空格)name:(空格)value(空格)
#将下面内容复制到elasticsearch.yml文件最后
也要注意 中文注释 引起的invalid UTF8 的报错“ #允许跨域,用于elasticsearch-head界面系统"

 cluster.name: my-application 
 node.name: node-10-253-128-14 
 path.data: /mnt/d/data/data 
 path.logs: /mnt/d/data/logs 
 bootstrap.memory_lock: false 
 bootstrap.system_call_filter: false 
 #network.host: 10.253.128.14 
 network.host: 0.0.0.0 
 http.port: 9200 
 discovery.zen.ping.unicast.hosts: ["10.253.128.10:9300","10.253.128.13:9300","10.253.128.14:9300"] 
 discovery.zen.minimum_master_nodes: 2 
 gateway.recover_after_nodes: 3 
 node.master: true 
 node.data: true 
 node.ingest: false 
 search.remote.connect: false 
 #允许跨域,用于elasticsearch-head界面系统
 http.cors.enabled: true 
 http.cors.allow-origin: "*" 

7、给每台服务器jvm.options文件修改配置
分别对三台服务器 10.253.128.10、10.253.128.13 、10.253.128.14 配置
vim  /home/elasticsearch-6.2.2/config/jvm.options
找到 “-Xms1g",“-Xmx1g" 根据自己服务器内存实际大小赋予运行的内存,我的服务器32G内存,先给16G运行 
-Xms16g
-Xmx16g

7.1特别说明:
32G 内存现象
Elasticsearch 默认安装后设置的堆内存是 1 GB。 对于任何一个业务部署来说, 这个设置都太小了。
比如机器有 64G 内存,那么我们是不是设置的越大越好呢?
其实不是的。
主要 Elasticsearch 底层使用 Lucene。Lucene 被设计为可以利用操作系统底层机制来缓存内存数据结构。 Lucene 的段是分别存储到单个文件中的。因为段是不可变的,这些文件也都不会变化,这是对缓存友好的,同时操作系统也会把这些段文件缓存起来,以便更快的访问。
如果你把所有的内存都分配给 Elasticsearch 的堆内存,那将不会有剩余的内存交给 Lucene。 这将严重地影响全文检索的性能。
标准的建议是把 50% 的可用内存作为 Elasticsearch 的堆内存,保留剩下的 50%。当然它也不会被浪费,Lucene 会很乐意利用起余下的内存。
同时了解过 ES 的同学都听过过「不要超过 32G」的说法吧。
其实主要原因是 :JVM 在内存小于 32 GB 的时候会采用一个内存对象指针压缩技术。

在 Java 中,所有的对象都分配在堆上,并通过一个指针进行引用。 普通对象指针(OOP)指向这些对象,通常为 CPU 字长 的大小:32 位或 64 位,取决于你的处理器。指针引用的就是这个 OOP 值的字节位置。

对于 32 位的系统,意味着堆内存大小最大为 4 GB。对于 64 位的系统, 可以使用更大的内存,但是 64 位的指针意味着更大的浪费,因为你的指针本身大了。更糟糕的是, 更大的指针在主内存和各级缓存(例如 LLC,L1 等)之间移动数据的时候,会占用更多的带宽.

所以最终我们都会采用 31 G 设置

-Xms 31g
-Xmx 31g
假设你有个机器有 128 GB 的内存,你可以创建两个节点,每个节点内存分配不超过 32 GB。 也就是说不超过 64 GB 内存给 ES 的堆内存,剩下的超过 64 GB 的内存给 Lucene


8.给每台服务器节点将elasticserarch服务器启动
注意:必须切换 es  用户运行,Root用户运行不了的。
[es@elasticsearch ~] su - es 
[es@elasticsearch ~] 输入密码:w12345678
[es@elasticsearch ~] /home/elasticsearch-6.2.2/bin/elasticsearch -d
[es@elasticsearch ~]  curl http://10.253.128.10:9200/_cat/nodes?v
curl http://10.253.128.13:9200/_cat/nodes?v
curl http://10.253.128.14:9200/_cat/nodes?v
ip                    heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.253.128.14           26           9   2    0.21    0.07     0.06 md         -      node-10-253-128-14
10.253.128.10           26          10   1    0.04    0.03     0.05 md        *      node-10-253-128-10
10.253.128.13           26          10   1    0.17    0.06     0.06 md        -      node-10-253-128-13

集群启动成功了!

下一步将安装  elasticsearch的操作界面系统elasticsearch-head,只安装在master 10.253.128.10 机上。
http://10.253.128.13:9100

https://blog.csdn.net/sunny_lr/article/details/82785415

elasticsearch的操作界面系统只安装在master 10.253.128.10 机上,其它服务器无须安装
elasticsearch-head下载:
https://github.com/mobz/elasticsearch-head
https://codeload.github.com/mobz/elasticsearch-head/zip/master

第一步,首先安装 nodejs语言
安装nodejs语言,自动会安装npm安装插件:
[root@elasticsearch1 home]#  yum -y install nodejs
第二步,下载elasticsearch-head.zip 
[root@elasticsearch1 home]# wget https://codeload.github.com/mobz/elasticsearch-head/zip/master 
第三步,安装elasticsearch-head界面系统
[root@elasticsearch1 home]# unzip elasticsearch-head.zip 
配置:elasticsearch-head
[root@elasticsearch1 home]# vi  /home/elasticsearch-head-master/Gruntfile.js
找到 port: 9100 ,在上边加上"hostname: '0.0.0.0',"  这点是允许所有服务器节点都能用elasticsearch-head界面操作系统。很重要

connect: {
            server: {
                options: {
                                        hostname: '0.0.0.0',
                    port: 9100,
                    base: '.',
                    keepalive: true
                }
            }
        }

#进入elasticsearch-head 目录
[root@elasticsearch1 home]#  cd  elasticsearch-head 
[root@elasticsearch1 elasticsearch-head ]#  vi README.textile 
#查看elasticsearch-head 的安装方法
h4. Running with built in server
#重点来看安装方法

* @git clone git://github.com/mobz/elasticsearch-head.git@
* @cd elasticsearch-head@
* @npm install@
* @npm run start@

* @open@ "http://localhost:9100/":http://localhost:9100/

This will start a local webserver running on port 9100 serving elasticsearch-head
#进入elasticsearch-head 目录使用npm install安装 ,别的目录不行哦
[root@elasticsearch1 elasticsearch-head ]# npm install
[root@elasticsearch1 elasticsearch-head ]# npm run start

无误后,打开浏览器 : http://localhost:9100/
http://10.253.128.10:9100/