知识库

标准化实施手册及常见错误


ES5集群离线搭建

<h1>1.搭建说明</h1> <h2>1.1.声明</h2> <p>1.本文档内容描述杭州瑞成信息技术有限公司ES5集群离线搭建详情。 2.以下操作目前只涉及了三台机器,如果遇更多节点情况,相同配置或者配置差异较小的均可以使用脚本实现自动化部署。</p> <h2>1.2.目的</h2> <p>1.通过此文档可以成功搭建离线ES5.4.3集群,并合理的能够维护集群正常运转和资源调配以及安装资源可视化插件等。 2.为来自不同的项目组或个人提供标准的ES5集群离线搭建方法。 3.减少搭建环境中出现的一些不必要的失误和错误。 4.本次搭建主要实现ES5集群的搭建服务和可视化插件安装等。</p> <h2>1.3.规范</h2> <p>1.目录规范: 安装包存放位置:/risen/soft/package 其它应用工具安装目录:/risen/soft 其它应用数据本地存放目录:/risen/soft/应用名称/data数据名称/ 其它应用日志本地存放目录:/risen/soft/应用名称/log进程名称/<br /> 其它应用临时文件本地存放位置目录:/tmp/应用名称/ 除系统默认之外,请严格规范遵守文件的存放位置,同时注意权限问题。</p> <h1>2.部署准备</h1> <h2>2.1.安装包准备</h2> <p>1.ElasticSearch 版本:5.4.3 下载地址: [elasticsearch-5.4.3.tar.gz](<a href="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/abb7f7a8722c8cb3a278832b03aea5a2">http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/abb7f7a8722c8cb3a278832b03aea5a2</a> &quot;[elasticsearch-5.4.3.tar.gz&quot;) [elasticsearch-analysis-ik-5.4.3.zip](<a href="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/e4be03280ac92c8cfb4fa58268b0a637">http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/e4be03280ac92c8cfb4fa58268b0a637</a> &quot;[elasticsearch-analysis-ik-5.4.3.zip&quot;) [ingest-attachment-5.4.3.zip](<a href="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/df8d620337c7f7c7aaf2cc0d46a92585">http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/df8d620337c7f7c7aaf2cc0d46a92585</a> &quot;[ingest-attachment-5.4.3.zip&quot;) [jna.jar](<a href="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/648f7e4d3a26a58f88299106f1c4dcfb">http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/648f7e4d3a26a58f88299106f1c4dcfb</a> &quot;[jna.jar&quot;) 2.JDK: 版本:1.8 位数:64位 下载地址: [jdk-8u221-linux-x64.tar.gz](<a href="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/c1baeef600d9b77c7485f8253407eb1d">http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/c1baeef600d9b77c7485f8253407eb1d</a> &quot;[jdk-8u221-linux-x64.tar.gz&quot;) 3.elasticsearch5启动最小内存默认2GB 4.可使用的yum源 特殊说明:以上只是必备的安装包,其他所关联依赖的依次会在后面详情中补充</p> <h2>2.2.节点配置信息</h2> <table> <thead> <tr> <th style="text-align: left;">IP地址</th> <th style="text-align: left;">主机名</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">192.168.9.61</td> <td style="text-align: left;">risen01</td> </tr> <tr> <td style="text-align: left;">192.168.12.89</td> <td style="text-align: left;">risen02</td> </tr> <tr> <td style="text-align: left;">192.168.5.161</td> <td style="text-align: left;">risen03</td> </tr> <tr> <td style="text-align: left;">...</td> <td style="text-align: left;">...</td> </tr> </tbody> </table> <h2>2.3.节点资源配置</h2> <table> <thead> <tr> <th style="text-align: left;">IP地址</th> <th style="text-align: left;">角色</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">192.168.9.61</td> <td style="text-align: left;">候选主节点(master node)</td> </tr> <tr> <td style="text-align: left;">192.168.12.89</td> <td style="text-align: left;">数据节点(data node)</td> </tr> <tr> <td style="text-align: left;">192.168.5.161</td> <td style="text-align: left;">数据节点(data node)</td> </tr> <tr> <td style="text-align: left;">...</td> <td style="text-align: left;">...</td> </tr> </tbody> </table> <p>我这里是三台机器,硬件资源有限,如遇生产环境请选择合适的es集群部署架构。</p> <h1>3.集群配置与启动</h1> <h2>3.1.安装包上传与解压</h2> <p>目录规划: mkdir -p /risen/soft/jdk #jdk安装路径 mkdir -p /risen/soft/package #安装包存放路径 操作节点:risen01 操作用户:root 1.上传安装包elasticsearch-5.4.3.tar.gz和jdk-8u221-linux-x64.tar.gz到 risen01节点下的/risen/soft/package目录下,结果如图所示: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/1e5f54b40cf0c92b1e0d1e3c400dd13b" alt="" /> 2.解压JDK安装包和elasticsearch安装包到/risen/soft/下 操作节点:risen01 操作用户:root 解压JDK命令:</p> <pre><code class="language-java">tar -zxvf /risen/soft/package/jdk-8u221-linux-x64.tar.gz -C /risen/soft/jdk</code></pre> <p>重命名</p> <pre><code class="language-java">mv /risen/soft/jdk/jdk1.8.0_221 /risen/soft/jdk/jdk1.8</code></pre> <p>解压es命令:</p> <pre><code class="language-java">tar -zxvf /risen/soft/package/elasticsearch-5.4.3.tar.gz -C /risen/soft</code></pre> <p>重命名</p> <pre><code class="language-java">mv /risen/soft/elasticsearch-5.4.3 /risen/soft/es</code></pre> <p>3.解压ik分词器至名为ik的文件夹,并移动至es家目录下的plugins中解压命令:unzip /risen/soft/package/elasticsearch-analysis-ik-5.4.3.zip -d /risen/soft/es,将解压的后的ik文件夹,移动至plugins 4.将新的jna.jar替换掉家目录下lib中的jna4.4.0.jar</p> <h2>3.2.启动前准备</h2> <p>操作节点:risen01,risen02,risen03 操作用户:root 1.调整最大虚拟内存太小 修改配置文件sysctl.conf,vi /etc/sysctl.conf添加下面配置:</p> <pre><code class="language-java">vm.max_map_count=655360</code></pre> <p>保存退出并执行命令即可:sysctl -p <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/9f6fc35261a81e3e518367818e8bc1f8" alt="" /> 2.调整用户最大可创建文件数太小 切换到root用户,编辑limits.conf配置文件, vim /etc/security/limits.conf添加以下内容:</p> <pre><code class="language-java">* soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096</code></pre> <p>保存并退出即可,只在当前shell生效,故其他shell执行需要关闭并重新连接 <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/c73d521722d7ca4f9c26202e6f31f417" alt="" /> 3.添加主机名称 修改主机配置文件hosts:vim /etc/hosts</p> <pre><code class="language-java">192.168.9.61 risen01 192.168.12.89 risen02 192.168.5.161 risen03</code></pre> <p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/41aa836059d8e634f93d054924c13aeb" alt="" /> 4.开启防火墙,增加网络策略</p> <pre><code class="language-java">systemctl start firewalld</code></pre> <p>增加网络策略9200、9300端口开放</p> <pre><code class="language-java">firewall-cmd --permanent --zone=public --add-port=9200/tcp firewall-cmd --permanent --zone=public --add-port=9300/tcp</code></pre> <p>添加完重加载</p> <pre><code class="language-java">firewall-cmd --reload</code></pre> <p>查看防火墙规则</p> <pre><code class="language-java">firewall-cmd --list-all firewall-cmd --reload</code></pre> <h2>3.3.修改配置文件</h2> <p>1.为es5指定JDK1.8 操作节点:risen01 操作用户:root 修改/risen/soft/es/bin下的elasticsearch启动文件,在#!/bin/bash下新添加下面一行代码:</p> <pre><code class="language-java">export JAVA_HOME=/risen/soft/jdk/jdk1.8</code></pre> <p>2.在/risen/soft/es目录下新建立data目录用来存放es数据</p> <pre><code class="language-java">mkdir -p /risen/soft/es/data</code></pre> <p>3.在/risen/soft/es目录下新建立logs目录用来存放es日志</p> <pre><code class="language-java">mkdir -p /risen/soft/es/logs</code></pre> <p>4.修改es5配置文件 操作节点:risen01 操作用户:root 注意:严格遵守配置文件中的缩进空格,并且属性值不支持大写字母,同时在ES5和ES2版本之间很多配置项存在很大的变动,具体合理的配置还是要根据集群整体资源,业务需求以及数据量等多因素综合考虑的。 修改/risen/soft/es/config目录下的elasticsearch.yml配置文件,下面我们详细介绍一下集群的具体配置:</p> <pre><code class="language-java">#集群名称 cluster.name:risen-cluster #节点名称 node.name: master #这里我们选择risen01只作为master并不作为数据存储节点 node.master: true node.data: false # 设置es的日志目录 path.logs:/risen/soft/es/logs # 设置es的数据目录 path.data: /risen/soft/es/data # 设置索引的分片数,默认为5,5.0之后就不用了 #index.number_of_shards: 5 # 设置索引的副本数,默认为1,5.0之后就不用了 #index.number_of_replicas: 2 # 当JVM开始写入交换空间时(swapping)ElasticSearch性能会低下,你应该保证它不会写入交换空间 # 设置这个属性为true来锁定内存,同时也要允许elasticsearch的进程可以锁住内存 bootstrap.memory_lock: false #Centos6不支持SecComp,而默认为true会进行检测导致启动失败 bootstrap.system_call_filter: false #同时设置bind_host和publish_host上面两个参数 network.host: 192.168.9.61 #设置节点间交互的tcp端口,默认是9300 transport.tcp.port: 9300 #设置是否压缩tcp传输时的数据,默认为false,不压缩 transport.tcp.compress: true #设置对外服务的http端口,默认为9200 http.port: 9200 #使用http协议对外提供服务,默认为true,开启 http.enabled: true # 使用head等插件监控集群信息,需要打开以下配置项 http.cors.enabled: true http.cors.allow-origin: &amp;quot;*&amp;quot; http.cors.allow-credentials: true #一个集群中的N个节点启动后,才允许进行恢复处理 gateway.recover_after_nodes: 1 #Recovery Throttling # 下面这些配置允许在初始化恢复,副本分配,再平衡,或者添加和删除节点时控制节点间的分片分配 # 设置一个节点的并行恢复数 # 1.初始化数据恢复时,并发恢复线程的个数,默认为4 cluster.routing.allocation.node_initial_primaries_recoveries: 4 # 2.添加删除节点或负载均衡时并发恢复线程的个数,默认为2 cluster.routing.allocation.node_concurrent_recoveries: 2 # 设置恢复时的吞吐量(例如:100mb,默认为0无限制.如果机器还有其他业务在跑的话还是限制一下的好) indices.recovery.max_bytes_per_sec: 20mb # 注意: 合理的设置以上参数能有效的提高集群节点的数据恢复以及初始化速度 #Discovery # 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点.默认为1,对于大的集群来说,可以设置大一点的值(2-4) discovery.zen.minimum_master_nodes: 1 # 这是一个集群中的主节点的初始列表,当节点(主节点或者数据节点)启动时使用这个列表进行探测 discovery.zen.ping.unicast.hosts: [&amp;quot;risen01:9300&amp;quot;,&amp;quot;risen02:9300&amp;quot;,&amp;quot;risen03:9300&amp;quot;] # es保护机制是否允许删除索引或者正则 action.destructive_requires_name: true action.auto_create_index: true # 设置es快照仓库位置 repo.path: [&amp;quot;/risen/soft/es/data/es_backup&amp;quot;]</code></pre> <h2>4.分发其他节点机器</h2> <p>操作节点:risen01 操作用户:root 执行命令: scp -r /risen/soft/es/ root@risen02:/risen/soft/ scp -r /risen/soft/es/ root@risen03:/risen/soft/</p> <h2>5.修改data node配置文件</h2> <p>操作节点:risen02,risen03 操作用户:root (1)修改risen02 ElasticSearch 配置文件 vim /risen/soft/es/config/elasticsearch.yml,修改内容:</p> <pre><code class="language-java">node.name: slave1 node.master: false node.data: true network.host: 192.168.12.89</code></pre> <p>(2)修改risen03 ElasticSearch 配置文件 vim /risen/soft/es/config/elasticsearch.yml,修改内容:</p> <pre><code class="language-java">node.name: slave2 node.master: false node.data: true network.host: 192.168.5.161</code></pre> <p>其它内容保持不变即可后面可根据实际需求再次调整集群配置以提高性能。 (3)清空risen01主节点拷贝过来的es下data数据</p> <pre><code class="language-java">rm -rf /risen/soft/es/data/*</code></pre> <h2>6.修改权限</h2> <p>操作节点:risen01,risen02,risen03 操作用户:root 说明:elasticsearch启动不支持root启动故需要其他用户启动,这里我们用开始创建好的bigdata用户(每台机器已提前创建bigdata用户完毕),并赋权给bigdata用户 创建bigdata用户,并设置密码</p> <pre><code class="language-java">useradd -d /home/bigdata -m -s /bin/bash bigdata passwd bigdata</code></pre> <p>授权</p> <pre><code class="language-java">chown -R bigdata:bigdata /risen/soft/es</code></pre> <p>如图所示: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/16e770955eebb95a58988bc6e4bcce59" alt="" /></p> <h2>7.启动集群</h2> <p>1.启动步骤 操作节点:risen01,risen02,risen03 操作用户:bigdata 说明:第一次启动可能出现环境的问题,请查看最后【报错和警告问题】解决方案是否能有所帮助 risen01操作:进入到 /risen/soft/es 执行:bin/elasticsearch 结果如图所示: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/8ef0b9cd40457b9330e0684598e81ce3" alt="" /> risen02操作:进入到 /risen/soft/es 执行:bin/elasticsearch 结果如图所示: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/c95a0591f5e68da1e61ec2b1020df97f" alt="" /> 此时会发现risen01启动界面出现了下图所示情况: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/619d170fcedcdbfaee1e1b449d84e8bd" alt="" /> 这就说明已经将新的risen02节点加入到了集群中,而risen01已经自动检测到。 risen03操作:进入到/risen/soft/es 执行:bin/elasticsearch 结果如图所示: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/f5b16753b773d6dd8acdadd2ff999f20" alt="" /> 此时会发现risen01启动界面出现了下图所示情况: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/9d55048c2b169ca3a87efbf1bafc8d67" alt="" /> 2.后台运行,到此我们所有的节点都已启动完毕,在各个节点启动成功后再启动命令后面加上-d即可后台运行,命令: bin/elasticsearch -d(不加-d,当窗口关闭或者ctrl+c,es也将自动关闭) 3.然后在任意节点执行查看节点信息命令: curl risen01:9200/_cat/nodes?v 结果如图所示: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/2691e8f890c9329894c5499554f7da66" alt="" /> 可以看出我们的节点配置情况符合预期。</p> <h1>8.可视化插件安装</h1> <h2>8.1.head插件安装</h2> <p>说明:由于es5的head插件服务需要grunt启动,而安装grunt必须要安装npm和node命令</p> <h3>8.1.1.安装前准备</h3> <p>(1)Elasticsearch-head插件下载地址: [elasticsearch-head.zip](<a href="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/4b43c5ae62d6a648f149e99f4476aff6">http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/4b43c5ae62d6a648f149e99f4476aff6</a> &quot;<a href="2">node-v6.11.0-linux-x64.tar.xz</a>node和npm离线安装下载地址: [node-v6.11.0-linux-x64.tar.xz](<a href="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/e5c35c8b61837ff9638c69e02fdbd9d6">http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/e5c35c8b61837ff9638c69e02fdbd9d6</a> &quot;[node-v6.11.0-linux-x64.tar.xz&quot;) (3)可用的yum源 (4)准备一台联网的Linux环境的机器 (5)检查联网机器是否安装npm和node,如果已安装那么直接跳过下面的npm和node安装,直接进行步骤4安装grunt,否则请按照步骤一步步来。</p> <h3>8.1.2.安装编译环境</h3> <p>操作节点:联网机器和risen01 操作用户:root 执行命令:yum install -y gcc gcc-c++ make</p> <h3>8.1.3.安装npm和node</h3> <p>操作节点:risen01 操作用户:root 说明:因为我这里联网机器已经安装自带npm和node命令故现在在risen01上演示一下如何安装 (1)解压node-v6.11.0-linux-x64.tar包,命令: xf -d node-v6.11.0-linux-x64.tar.xz tar -xvf node-v6.11.0-linux-x64.tar -C /risen/soft/ <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/939f47d6131b0249bbc23b447b1cd7d6" alt="" /> 结果如图所示: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/16f6d901bac0200d4e294cadf635ecf6" alt="" /> (2)环境变量设置</p> <pre><code class="language-java">修改/etc/profile文件,修改内容如下图所示: export NODE_HOME=/risen/soft/node-v6.11.0-linux-x64 export NODE_PATH=$NODE_HOME/lib/node_modules:$PATH export PATH=${JAVA_HOME}/bin:$NODE_HOME/bin:$PATH</code></pre> <p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/31f319723d58977e5b76dc5c3052c595" alt="" /> 然后执行命令:source /etc/profile 验证环境变量是否添加成功: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/f52e7ac13e3c864c54f69790b377c214" alt="" /> 出现上图所示则表示安装成功。</p> <h3>8.1.4.安装grunt</h3> <p>操作节点:联网机器(这里跟risen01同一台) 操作用户:root (1)将下载下来的elasticsearch-head插件上传至联网机器的任意目录,然后解压并重命名为head mv /risen/soft/package/elasticsearch-head/ /risen/soft/head (2)进入head目录执行命令: npm install -g grunt --registry=<a href="https://registry.npm.taobao.org">https://registry.npm.taobao.org</a> 结果如图下所示: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/7d06ae3968f5b6d81c4fbc658c63effb" alt="" /> (3)将/risen/soft/node-v6.11.0-linux-x64/lib/下node_modules目录拷贝到head目录下 cp -r /risen/soft/node-v6.11.0-linux-x64/lib/node_modules/ /risen/soft/head/ (4)修改head目录下的Gruntfile.js文件,在connect出新增属性:</p> <pre><code class="language-java">hostname:'’192.168.9.61',</code></pre> <p>保存并退出 说明:这里的端口修改为9201 结果如图所示: <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/7f82891212873d5f3481a194c36d44ae" alt="" /> 修改 _site/app.js 修改http://localhost:9200字段到本机ES端口与IP <img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/c61c29df4aba88b9927effca2544ecb2" alt="" /> (5)打包elasticsearch-head插件,执行命令:(这里联网机器跟risen01是同一台,忽略) zip -q -r head.zip head/* (6)将联网机器上打包好的head.zip插件下载到本地,并上传至risen01的/risen/soft/es目录下并解压即可(不要放在plugins目录下,es5和es2之间有很大的改动) 这里是移动heap目录至risen01的/risen/soft/es下:mv /risen/soft/head/ /risen/soft/es (7)进入到/risen/soft/es/head目录执行启动head插件命令: node_modules/grunt/bin/grunt server 可能出现以下截图报错:</p>

页面列表

ITEM_HTML