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
https://www.cnblogs.com/sundahua/p/9149692.html