ElasticSearch开机自动启动与访问控制配置
使用supervisor配置ES启动
- supervisor安装
- supervisor配置
- ES自动启动配置文件
- 使用sysv-rc-conf配置开机自动启动
- 安装sysv-rc-conf
- 配置supervisor开机启动
- elasticsearch访问控制配置
- 参考
使用supervisor配置ES启动
supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
supervisor安装
sudo apt-get install supervisor
supervisor配置
安装成功后,访问/etc/supervisor/ 目录下找到 supervisord.conf 配置文件并写入如下内容,
[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700
[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor
minfds=65536 ; 可以打开的文件描述符的最小值,默认 1024
minprocs=1024 ; 可以打开的进程数的最小值,默认 200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
[include]
files = /etc/supervisor/conf.d/*.conf
这里需要注意的是需要[supervisord]增加两个参数minfds(最小文件数)和minprocs(最小进程数)。分别设置成65536和1024。如果不设置文件数的ES启动日志会有这个提示。
[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
$ supervisorctl status
$ supervisorctl stop elasticsearch
$ supervisorctl start elasticsearch
$ supervisorctl restart elasticsearch
$ supervisorctl reread
$ supervisorctl update
ES自动启动配置文件
在/etc/supervisor/conf.d目录新建配置文件elasticsearch.conf,增加如下配置。es和java的路径设置成你的。user设置成你的用户,注意es不能使用root启动
[program:elasticsearch]
command=/bin/bash /usr/local/share/elasticsearch-6.1.1/bin/elasticsearch
directory=/usr/local/share/elasticsearch-6.1.1/bin/
autorestart=true
autostart=true
stderr_logfile=/var/log/supervisor/elasticsearch_err.log
stdout_logfile=/var/log/supervisor/elasticsearch_out.log
environment=JAVA_HOME=/usr/local/java/jdk1.8.0_241
user=es
password=espassword
stopsignal=INT
startsecs=10
使用sysv-rc-conf配置开机自动启动
安装sysv-rc-conf
sudo apt-get install sysv-rc-conf
如果安装sysv-rc-conf时,报了如下的错:
E: Unable to locate package sysv-rc-conf(无法定位sysv-rc-conf包)
sudo vim /etc/apt/sources.list
增加下面这个源,更新源后再次安装就可以了
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
配置supervisor开机启动
#! /bin/sh
. /lib/lsb/init-functions
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/supervisord
NAME=supervisord
DESC=supervisor
test -x $DAEMON || exit 0
RETRY=TERM/30/KILL/5
LOGDIR=/var/log/supervisor
PIDFILE=/var/run/$NAME.pid
DODTIME=5
if [ -f /etc/default/supervisor ] ; then
. /etc/default/supervisor
fi
DAEMON_OPTS="-c /etc/supervisor/supervisord.conf $DAEMON_OPTS"
set -e
running_pid()
{
# Check if a given process pid's cmdline matches a given name
pid=$1
name=$2
[ -z "$pid" ] && return 1
[ ! -d /proc/$pid ] && return 1
(cat /proc/$pid/cmdline | tr "\000" "\n"|grep -q $name) || return 1
return 0
}
running()
{
# No pidfile, probably no daemon present
[ ! -f "$PIDFILE" ] && return 1
# Obtain the pid and check it against the binary name
pid=`cat $PIDFILE`
running_pid $pid $DAEMON || return 1
return 0
}
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--startas $DAEMON -- $DAEMON_OPTS
test -f $PIDFILE || sleep 1
if running ; then
echo "$NAME."
else
echo " ERROR."
fi
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
echo "$NAME."
;;
force-reload)
start-stop-daemon --stop --test --quiet --pidfile $PIDFILE \
--startas $DAEMON \
&& $0 restart \
|| exit 0
;;
restart)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --retry=$RETRY --quiet --oknodo --pidfile $PIDFILE
echo "$NAME."
;;
status)
echo -n "$NAME is "
if running ; then
echo "running"
else
echo " not running."
exit 1
fi
;;
*)
N=/etc/init.d/$NAME
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
exit 0
使用sysv-rc-conf配置supervisor启动
sudo sysv-rc-conf
出现开机启动配置页面,可以用空格或鼠标进行选中,将supervisor设置成启动(选中2,3,4,5)。
数字的含义:
- 0:停机
- 1:单用户,无网络连接,不能启动守护进程,不允许非root用户登录
- 2:多用户,无网络连接,不能启动守护进程
- 3:多用户,启动网络连接
- 4:用户自定义
- 5:多用户,带图形化界面
- 6:重启
至此,elasticsearch开机自动启动配置完毕。
elasticsearch访问控制配置
因为涉及到了ES服务的安全性,如果未授权访问的ES,很容易被其他人恶意操作。ES登录账号和密码的设置是通过x-pack来实现的,官方只给了免费的30天的使用权,当然特可以查找x-pack的破解方法。这里介绍使用一种简单的方法,使用iptables做访问控制,只允许指定主机访问各个节点的ES服务。
在/etc/init.d/文件目录新建es-acl
vim es-acl
增加你需要的访问控制iptables规则
#!/bin/sh
sudo iptables -I INPUT -p tcp --dport 9200 -j DROP#限制所有人访问本机9200端口
sudo iptables -I INPUT -s 192.168.19.1 -p tcp --dport 9200 -j ACCEPT#允许指定IP访问
sudo iptables -I INPUT -s 192.168.8.0/24 -p tcp --dport 9200 -j ACCEPT#允许指定网段访问
增加文件的可执行权限后,使用sysv-rc-conf配置到开机自动启动
sudo chmod a+x es-acl
重启节点之后,ES会自动启动,并且做了访问控制,如果ES启动失败,可以查看日志文件/var/log/supervisor/elasticsearch_out.log
参考
https://www.jianshu.com/p/03619bf7d7f5