[超详细] 手把手教你生产环境 ElasticSearch集群搭建 教程与问题记录

近期文章:

项目背景

公司一个项目购买的阿里云ElasticSearch集群,但由于大环境不好,项目效益不好,但es集群每个月费用挺高,想优化成本,于是想着自建会不会比买阿里云 es集群便宜呢,于是就尝试买相同配置的 ECS机器,一对比发现,每个月省下1500

ElasticSearch集群搭建 详细过程如下

1、购买 ECS机器

我这里购买5 台 8c16G 100G磁盘的 ECS机器

search_elastic1192.168.7.69
search_elastic2192.168.7.70
search_elastic3192.168.7.71
search_elastic3192.168.7.72
search_elastic5192.168.7.73

2、新建 es集群用户

useradd elastic

3、系统参数优化

vim /etc/sysctl.conf新增下面配置

vm.max_map_count=655360 

执行命令生效:

sysctl -p

vim /etc/security/limits.conf 新增下面配置

root soft nofile 65535 root hard nofile 65535 elastic soft nofile 65536 elastic hard nofile 65536 elastic  - memlock  unlimited

4、安Java JDK

mkdir /usr/local/data/ cd /usr/local/data/ yum install -y lrzsz rz 选择上传jdk-8u171-linux-x64.tar.gz tar zxvf jdk-8u171-linux-x64.tar.gz 

4.1、 配置 java 环境变量

vim /etc/profile.d/jdk.sh #!/bin/bash export JAVA_HOME=/usr/local/data/jdk1.8.0_171 export JRE_HOME=/usr/local/data/jdk1.8.0_171//jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

4.2、使java环境变量生效

# source /etc/profile.d/jdk.sh  #检查是否生效 java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

安装 java之后,接下来继续

5、elasticsearch 集群搭建

5.1、下载解压elasticsearch安装包

elasticsearch下载地址放在下方:

(根据需要选择版本哈)

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.16.zip unzip elasticsearch-5.6.16.zip

5.2 修改elasticsearch集群配置

cluster.name: search_es  node.name: search_elastic1 #注意修改这里为当前机器的主机名  #数据目录和日志保持默认 #path.data: /path/to/data #path.logs: /path/to/logs  bootstrap.memory_lock: true bootstrap.system_call_filter: false transport.tcp.compress: true http.port: 9200 network.host: 192.168.7.69 http.max_content_length: 100mb http.enabled: true discovery.zen.minimum_master_nodes: 1 discovery.zen.ping_timeout: 10s discovery.zen.ping.unicast.hosts: ["192.168.7.69:9300","192.168.7.70:9300","192.168.7.71:9300","192.168.7.72:9300","192.168.7.73:9300"]  ##head插件使用 http.cors.enabled: true http.cors.allow-origin: "*"

5.3、修改jvm.options

机器购买的是 16G,给 es分配 8G,留一半给系统使用和资源分配

-Xms8g -Xmx8g

6、elasticsearch 集群安装插件

6.1、安装 IK分词插件

安装IK分词插件最重的一点就是版本要跟elasticsearch一致,否则别想安装成功,

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.1/elasticsearch-analysis-ik-5.6.1.zip #解压到analysis-ik目录 unzip  elasticsearch-analysis-ik-5.6.1.zip -d analysis-ik

6.2 安装payloadscore插件

将研发给的payloadscore-plus.zip包解压到 elasticsearch plugins目录下,如图所示

elasticsearch 集群安装插件

6.3 启动 elasticsearch 服务

chown -R elastic.elastic elasticsearch-5.6.16 elasticsearch #重启 sudo -u elastic /usr/local/data/elasticsearch/bin/elasticsearch -d

打开浏览器访问:http://192.168.7.69:9200 或使用 curl

我这边由于elasticsearch集群是内网访问,也不需要开放端口哈,内部人员通过 vpn连接到内网,即可访问哈

6.4 添加进程检查脚本,挂掉自动重启

#!/bin/bash #func:检测elaticsearch进程是否存在,并执行启动操作 set -x  export JAVA_HOME=/usr/local/data/jdk1.8.0_171 export JRE_HOME=/usr/local/data/jdk1.8.0_171//jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin  es_id=`ps axu|grep -w elastic|grep -v grep|awk '{print $2}'`  if [[ $es_id ]];then         echo "es进程存在,`date +%F-%H:%M:%S`" >>/var/log/es.log else         echo "es进程不存在,`date +%F-%H:%M:%S`, 开始启动es" >>/var/log/es.log         su - elastic -c '/usr/local/data/elasticsearch/bin/elasticsearch -d' fi

crontab中新增

*/1 * * * * /bin/bash /scripts/elastic_check_status.sh >/dev/null 2>&1

7、问题记录

7.1 问题 1:bootstrap check failure [1] of [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

解决方案

vim /etc/security/limits.conf #添加以下内容,注意:elastic是es集群运行用户,你的不一定和我一样, elastic hard nofile 65536 elastic soft nofile 65536

再次重启elasticsearch服务

7.2 问题 2:bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

内存权限太小错误,在启动时又报错了,这是因为elastic用户拥有的内存权限太小,至少需要262144。

解决方案

在root用户下,在/etc/sysctl.conf文件最后添加一行

vm.max_map_count=262144

执行命令生效:

/sbin/sysctl -p

再次重启就正常了

最后就是加 zabbix监控了,后面单独分享一下监控脚本和模板,以及扩容后的集群压力分布不均如何优化等内容