文章目录


​异常1​​异常2​



异常1

异常


启动 bin 目录下的 ​​elasticsearch​​ 报错(这是ES的一种安全措施,不让用root用户)


[root@localhost bin]# ./elasticsearch

future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/java/jdk1.8.0_201/jre] does not meet this requirement
[WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-7.2.0.jar:7.2.0]
at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-7.2.0.jar:7.2.0]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:105) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:172) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:349) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.2.0.jar:7.2.0]

解决

创建非root用户

创建一个 javapub 用户并设置初始密码
useradd -c 'this is javapub user' -d /home/javapub evapub
passwd javapub

将 elasticsearch 安装目录属主权限改为 javapub 用户
chown -R javapub <es安装目录>

切换用户到 javapub
su javapub

使用 ​​javapub​​ 用户重启 elasticsearch


异常2

问题

max file descriptors [4096] for elasticsearch process is too low,

increase to at least [65536]

原因

每个进程最大同时打开文件数默认值太小, 查看当前系统同时打开进程数的默认值:

ulimit -Hn
ulimit -Sn

解决方案

切换到 root 账户,修改 ​​/etc/security/limits.conf​​ 文件 增加配置,用户退出后重新登录生效 ​​su root​​ 输入密码

​vi /etc/security/limits.conf​​ 在文件最后,增加如下配置:

#<domain>      <type>  <item>         <value> #  #*               soft    core            0 #*               hard    rss             10000 #@student        hard    nproc           20 #@faculty        soft    nproc           20 #@faculty        hard    nproc           50 #ftp             hard    nproc           0 #@student        -       maxlogins       4 javapub        hard    nofile   65536 javapub        soft    nofile   65536 javapub        soft    nproc    4096 javapub        hard    nproc    4096  # End of file 

第一列表示用户和组(@开头) * 号表示全部用户。第二列表示软限制还是硬限制,第三列表示限制的资源类型,第四列表示限制的最大值

hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值。

core是内核文件,nofile是文件描述符,noproc是进程,一般情况下只限制文件描述符数和进程数就够了

一下具体介绍

-----------分割线,上面是配置文件的模板,下面是自己添加的------------------------

* soft nofile 655350 #表示任何一个用户可以打开的最大的文件描述符数量
* hard nofile 655350

* soft nproc 655350 #表示任何一个用户可以打开的最大的进程数
* hard nproc 655350


@student hard nofile 65535 #student组中的任何人最多能打开文件描述符数量是65535,并且会在打开65000个时发出警告
@student soft nofile 65000

@student hard nproc 50 #student组中的任何人不能拥有超过50个进程,并且会在拥有30个进程时发出警告
@student soft nproc 30
```