Ubuntu ES開機自動啓動與訪問控制配置

使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章