cat > /etc/sysconfig/es <<EOF
JAVA_HOME=/oldboyedu/softwares/jdk1.8.0_291
EOF
cat > /usr/lib/systemd/system/es6.service <<EOF
[Unit]
# 对启动脚本的描述
Description=oldboyedu es6 server daemon
# 指定在那个服务之后启动
After=network.target
[Service]
# 指定服务的类型,默认就是simple类型,
# Type=simple是一种最常见的通过systemd服务系统运行用户自定义命令的类型,也是省略Type指令时的默认类型。
# Type=simple类型的服务只适合那些在shell下运行在前台的命令。
# 也就是说,当一个命令本身会以daemon模式运行时,将不能使用simple,而应该使用Type=forking。
Type=simple
# 指定环境变量的文件
EnvironmentFile=/etc/sysconfig/es
# 指定服务的启动命令
ExecStart=/oldboyedu/softwares/elasticsearch-6.8.23/bin/elasticsearch
# 指定运行程序的用户
User=oldboyedu
# 指定运行程序的用户组
Group=oldboyedu
# 指定程序最大文件打开数量
LimitNOFILE=131070
# 指定程序打开最大的线程数量
LimitNPROC=8192
[Install]
WantedBy=multi-user.target
EOF
cat > /usr/lib/systemd/system/es7.service <<EOF
[Unit]
Description=oldboyedu es7 server daemon
After=network.target
[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/es
ExecStart=/oldboyedu/softwares/elasticsearch-7.17.5/bin/elasticsearch
User=oldboyedu
Group=oldboyedu
LimitNOFILE=131070
LimitNPROC=8192
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now es6 es7
可能会遇到的问题:
Q1: max number of threads [3805] for user [oldboyedu] is too low, increase to at least [4096]
问题原因:
程序打开的线程数量偏低。
解决方案:
cat >> /etc/security/limits.d/es.conf <<EOF
* soft nproc 8192
* hard nproc 8192
EOF
Q2: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
问题原因:
虚拟内存映射偏低。
解决方案:
cat > /etc/sysctl.d/es.conf <<EOF
vm.max_map_count=262144
EOF
sysctl -f /etc/sysctl.d/es.conf
sysctl -q vm.max_map_count
Q3: Caused by: java.nio.file.AccessDeniedException: /oldboyedu/softwares/elasticsearch-7.17.5/config/elasticsearch.yml
问题原因:
ES的运行用户与ES程序文件没有访问权限。
解决方案
chown oldboyedu:oldboyedu -R /oldboyedu/softwares/elasticsearch-7.17.5/