近期文章:
项目背景
公司一个项目购买的阿里云ElasticSearch集群,但由于大环境不好,项目效益不好,但es集群每个月费用挺高,想优化成本,于是想着自建会不会比买阿里云 es集群便宜呢,于是就尝试买相同配置的 ECS机器,一对比发现,每个月省下1500
ElasticSearch集群搭建 详细过程如下
1、购买 ECS机器
我这里购买5 台 8c16G 100G磁盘的 ECS机器
search_elastic1 | 192.168.7.69 |
search_elastic2 | 192.168.7.70 |
search_elastic3 | 192.168.7.71 |
search_elastic3 | 192.168.7.72 |
search_elastic5 | 192.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目录下,如图所示
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监控了,后面单独分享一下监控脚本和模板,以及扩容后的集群压力分布不均如何优化等内容