为什么把Elasticsearch部署在屁点大内存的服务器上....说来话长,总结起来就是团队没钱
来说说常见问题:
- 1.没有装JDK
这个不用多说大家百度一下 - 2.不能在root账号下运行
这个也简单创建完子账号就行,但是子账号环境要重新配置,可以在~/目录下创建 .bash_profile 文件 然后写入配置
JAVA_HOME=/usr/java/jdk1.8.0_171
export JRE_HOME=/usr/java/jdk1.8.0_171/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
- 3.内存不足(error='Cannot allocate memory')
原来是4G内存搬到了1G内存的服务器...坑!后来升级到了2G还是经常显示内存不足导致奔溃,后来写了一段重启脚本下面会慢慢讲到
这个解决办法是修改 onfig/jvm.options 文件里面有一行
-Xms1G
改为
-Xms512m
意思就是远看分配1G内存的少给一半,起码先启动吧,以后有钱在升级
现在来说说经常奔溃怎办
之前在4G服务器上3个月没挂过,但是换了之后,开始频繁的挂掉,同步数据会挂,访问量大了会挂,被别人爬快了也挂,没办法了要做点补救措施,开始也是二,写了一段检查脚本服务挂了超过5分钟就给自己发邮件,然后手动重启,但是这个已经不能让我愉快的玩耍了,然后在去了百度的google了一下发现运维们其实是会有一段检查重启的脚本,接下来看看这脚本怎么写的
- 1.创建一个es_monitor.sh 文件写入
#!/bin/bash
cd `dirname $0`
BIN_DIR=`pwd`
# jdk路径,这里有个坑,下文会讲
export JAVA_HOME=/usr/java/jdk1.8.0_171
# 获取es进程ID,我的es目录是/home/elasticS/elasticsearch-6.2.2
ES_ID=`ps -ef |grep elasticsearch |grep -w 'elasticsearch-6.2.2'|grep -v 'grep'|awk '{print $2}'`
# 日志输出
ESMonitorLog=$BIN_DIR/es-master-monitor.log
Monitor()
{
if [[ $ES_ID ]];then # 这里判断ES进程是否存在
echo "[info]当前ES进程ID为:$ES_ID"
else
echo "[error]ES进程不存在!ES开始自动重启..."
#启动 ES的账号
su user
#切换账号的JAVA环境
source ~/.bash_profile
#到启动的目录下
cd xxxxxxx/elasticsearch-6.2.2
#启动ES
./bin/elasticsearch -d
fi
}
Monitor>>$ESMonitorLog
我这段可能和网上的不太一样,因为我直接抄下来之后一直无法执行,不知道是不是我的配置不一样,后来就直接改了一些,写的不会请指出
- 2.然后在系统的定时任务里加入这段脚本
vim /etc/crontab
*/1 * * * * user /bin/sh /你的路径/es_monitor.sh - 3.启动定时任务
/etc/init.d/cron restart
结束
最近刚在运行,还不知道是不是稳定,看看效果吧,祝大家愉快
网友评论