https://note.youdao.com/ynoteshare1/index.html?id=dc6a3b2b1606dbf08e57fb4518cecef7&type=note
查看具体报错信息
sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch \ -Des.pidfile=/var/run/elasticsearch/elasticsearch.pid \ -Des.default.path.home=/usr/share/elasticsearch \ -Des.default.path.logs=/var/log/elasticsearch \ -Des.default.path.data=/var/lib/elasticsearch \ -Des.default.path.conf=/etc/elasticsearch
which: no java in (/usr/sbin:/usr/bin:/sbin:/bin) Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME
chmod 755 -R ./ 写入权限 ll路径查看权限
rpm安装 es logstash elasticsearch
https://www.elastic.co/guide/en/kibana/7.2/rpm.html
https://www.elastic.co/guide/en/logstash/7.2/installing-logstash.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.2/rpm.html
1.main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
<jre>/lib/security/java.policy,文件中添加如下:
permission javax.management.MBeanTrustPermission "register";
2.系统变量中必须存在JAVA_HOME
其他条件
关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
保证JDK版本是 1.8+,使用 java -version检测,如果不是,则需要先删除旧版本的jdk,再安装新版本,步骤如下:
卸载JDK
Centos7一般都会带有自己的openjdk,我们一般都回用oracle的jdk,所以要卸载
步骤一:查询系统是否以安装jdk
#rpm -qa|grep java
或 #rpm -qa|grep jdk
或 #rpm -qa|grep gcj
步骤二:卸载已安装的jdk
#rpm -e --nodeps java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64
#rpm -e --nodeps java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64
#rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
#rpm -e --nodeps java-1.7.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
步骤三:验证一下是还有jdk
#rpm -qa|grep java
#java -version
没有内容证明已经卸载干净了
步骤四:如果 java -version仍然有信息,则需要手动删除一些文件夹
1.执行 whereis java 找出java相关文件夹,然后依次删除
rm -rf 文件夹名称
2.删除环境变量 vim /etc/profile
删除 JAVA_HOME
source /etc/profile刷新环境变量,重新执行 java -version
安装JDK8
步骤一:
yum search java|grep jdk #查看yum库中都有哪些jdk版本
yum install java-1.8.0-openjdk #安装Java1.8
步骤二:配置环境变量
进入 cd /usr/lib/jvm 进入安装目录,复制jdk名称
编辑/etc/profile文件
vim /etc/profile #设置Java环境变量
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64
export JRE_HOME=/etc/alternatives/jre_1.8.0
export PATH=$JRE_HOME/bin:$JAVA_HOME/bin:$PATH
步骤三:生效profile
source /etc/profile
步骤四,验证java版本
java -version
安装elasticsearch
导入elasticsearch key秘钥
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
设置elasticsearch 源
进入/etc/yum.repos.d/文件夹,并创建文件 elasticsaerch.repo。
cd /etc/yum.repos.d
vim elasticsaerch.repo
写入如下内容:
[elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
安装elasticsearch
sudo yum install elasticsearch
启动elasticsearch
sudo systemctl daemon-reload #对于新创建的unit文件或,修改了的unit文件,要通知systemd重载此配置文件 sudo systemctl enable elasticsearch.service #开机启动
sudo systemctl start elasticsearch.service #启动elasticsearch服务 sudo systemctl stop elasticsearch.service #停止elasticsearch服务
检测elasticsearch服务是否正常
curl localhost:9200
正确返回如下:
{
"name" : "ZhVu-ER",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "bRrwwzXPQDKx5nYaLH5iyQ",
"version" : {
"number" : "6.5.1",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "8c58350",
"build_date" : "2018-11-16T02:22:42.182257Z",
"build_snapshot" : false,
"lucene_version" : "7.5.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
3.配置elasticsearch
配置文件的路径在/etc/sysconfig/elasticsearch中配置,默认配置文件的路径是 /etc/elasticsearch, 可以在/etc/sysconfig/elasticsearch中修改ES_PATH_CONF。
主要有3个配置文件:
elasticsearch.yml elastsearch配置文件
jvm.options elasticsearch jvm配置文件
log4j2.properties elasticsearch日志配置文件
elasticsearch.yml中配置:
path.data: /var/lib/elasticsearch #data存放路径
path.logs: /var/log/elasticsearch #日志存放路径
http.port: 9200 #表示elasticsearch的端口
cluster.name: pengxuancluster #集群名称,相同集群名字的节点才能加入到同一个集群
node.name: pengxuannode-1 #节点名称,集群内唯一
network.host: 0.0.0.0 #默认值为127.0.0.1,也可以指定为内网ip,指定为0.0.0.0则可以过外网ip访问
discovery.zen.ping.unicast.hosts: ["122.207.86.14", "122.207.86.15"] #广播host,表示要加入到同一个集群的host地址,会扫描 9300--9305端口。
jvm.options 配置:
-Xms2g #表示最小使用2g内存
-Xmx4g #表示最大使用4g内存
4.启动/关闭elastisearch
4.1 启动: systemctl start elasticsearch 关闭:systemctl stop elasticsearch
4.2 启动: ./bin/elasticsearch 关闭:直接 ctrl + c
4.3 后台启动: ./bin/elasticsearch -d 关闭:ps -ef|grep Elasticsearch,得到pid,然后执行
kill -SIGTERM pid
5.测试 打开 ip:9200测试是否正常,如果无法打开,关闭防火墙,或者添加端口号为可通过防火墙
firewall-cmd --permanent --add-port=9200/tcp
firewall-cmd --reload
安装kibana
导入kibana秘钥
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
设置kibana 源
进入/etc/yum.repos.d/文件夹,并创建文件 kibana.repo,写入内容:
[kibana-6.x] name=Kibana repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
执行安装命令
sudo yum install kibana
启动kibana
sudo systemctl daemon-reload ##对于新创建的unit文件或,修改了的unit文件,要通知systemd
重载此配置文件 sudo systemctl enable kibana.service #设置开机启动
sudo systemctl start kibana.service #启动服务 sudo systemctl stop kibana.service #停止服务
配置kibana
进入/etc/kibana ,编辑文件 kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://122.207.86.14:9200"
测试 打开 ip:5601测试是否正常,如果无法打开,关闭防火墙,或者添加端口号为可通过防火墙
firewall-cmd --permanent --add-port=5601/tcp
firewall-cmd --reload
破解x-pack
x-pack,默认已经安装了,所以只需要破解即可。
1.为什么要破解x-pack?
因为涉及到了ES服务的安全性。
2.本教程前提
默认你已经安装好了elasticsearch 和kibana
3.适用范围
所有ES版本都适用,破解原理都一样
1.重写x-pack下的2个类:LicenseVerifier.java和XPackBuild.java
重写完的类链接: https://pan.baidu.com/s/1ESqoZW8eieO7Zdgs31hxsQ 密码: uqnd
覆盖流程
1.找到目标jar包 elasticsearch-6.3.1\modules\x-pack\x-pack-core\x-pack-core-6.3.1.jar
2.用LicenseVerifier.class 覆盖x-pack-core-6.3.1.jar\org\elasticsearch\license目录下的同名文件
3.同理用 XPackBuild.class 覆盖 x-pack-core-6.3.1.jar\org\elasticsearch\xpack\core 目录下的同名文件
2.去官网申请license证书
https://license.elastic.co/registration 官网地址
1.邮箱认真写,用来接收json文件的
2.country写china,其它都可以随便写
3.点击申请后邮箱马上会收到一个邮件
3.修改申请到的证书
主要修改这几个地方
1."type":"basic" 替换为 "type":"platinum" # 基础版变更为铂金版
2."expiry_date_in_millis":1561420799999 替换为 "expiry_date_in_millis":3107746200000# 1年变为50年
好好保存,修改后的文件可以重复使用到其它ES服务器
4.上传证书完成修改
上传前准备,打开elasticsearch.yml 配置文件 加入 xpack.security.enabled: false打开elasticsearch服务 和 kibana服务进入kibana后台 localhost:5601,进入到如下图所示的页面:
4.上传证书,就是那个json文件 upload license
5.上传成功.到此破解x-pack已经成功了.如图所示续命到了2068年,可以随意使用ES X-pack的一些付费功能
5.修改ES启动用户
使用x-pack用户认证的时候,如果使用root用户启动es,则会出现错误,这是因为出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入的脚本并且执行,为了系统安全考虑,所以需要创建一个单独的用户来运行elasticsearch。
1.创建elastic用户组以及elastic用户
groupadd elastic
useradd elastic -g elastic -p pengxuan # elastic为用户名 -g 表示组名 -p 表示密码
2.针对文件夹添加权限
chown -R elastic:elastic /usr/share/elasticsearch
chown -R elastic:elastic /var/log/elasticsearch
chown -R elastic:elastic /var/lib/elasticsearch
chown -R elastic:elastic /etc/elasticsearch
chown -R elastic:elastic /etc/sysconfig/elasticsearch
chown -R elastic:elastic /etc/init.d/elasticsearch
3.重新开启elasticsearch
3.1进入elasticsearch文件夹 cd /usr/share/elasticsearch 执行./bin/elasticsearch -d -p /usr/share/elasticsearch/elasticsearch.pid,如果有提示无权访问某个文件或者文件夹,则切回到root用户,执行2中的命令,将文件夹修改为无权访问的文件夹即可。
3.2如果执行出现错误,max file descriptors [4096] for elasticsearch process is too low, increase to
at least [65536]。
切回到root用户,vim /etc/security/limits.conf 添加如下设置:
elastic soft nofile 65536 #elastic为用户名称
elastic hard nofile 65536 #leastic为用户名称
执行 exit,退出elastic用户,使配置生效。
3.3重新执行3.1步骤即可
3.4在执行
6.开启ES的登录功能
1.修改elasticsearch.yml配置
# 添加如下2行,打开安全配置功能 xpack.security.enabled: true xpack.security.transport.ssl.enabled: true
2.重置登陆权限密码,默认为changeme
bin/elasticsearch-setup-passwords interactive
按步骤分别重置elastic/kibana等账号的密码elastic就是登陆elasticsearch服务的最高权限账号3.修改kibana配置
# 在kibana.yml下添加如下两行 elasticsearch.username: "elastic" elasticsearch.password: {你修改的password}
此处修改完后,重启ES和kibana服务就需要登陆账号和密码了4.x-pack设置完毕后,head无法登陆的问题
# 在elasticsearch.yml中添加如下三行配置 http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
重启服务,并通过如下形式访问head端口http://192.168.36.61:9100/?auth_user=elastic&auth_password=passwd
安装logstash
导入logstsh的密钥
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
创建logstash源
进入 /etc/yum.repos.d/ 文件夹,创建文件 logstash.repo,写入如下内容:
[logstash-6.x] name=Elastic repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
执行安装脚本
yum install logstash
配置logstash
进入cd cd /etc/logstash文件夹,logstash.yml为logstash配置文件
修改
node.name #表示节点的名字,默认为机器的hostname
path.data #表示数据存放文件夹,默认为LOGSTASH_HOME/data
path.config #表示config文件的存放路径,默认路径配置在 /etc/logstash/pipelines.yml中,路径是/etc/logstash/conf.d/*.conf
添加logstash config
新增一个input为mysql,output为elasticsearch的config
进入 /etc/logstash/conf.d文件夹,新建文件 logstash-mysql.conf,写入内容:
input {
jdbc {
jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
jdbc_user => "mysql"
jdbc_password => ""
tracking_column=> "createtime" #表示 sql_last_value所使用的列
tracking_column_type=> "timestamp" #表示sql_last_value列的类型
schedule => "* * * * *"
statement => "SELECT * from tablename where createtime >:sql_last_value"
}
}
output{
elasticsearch{
id => "tablename"
index => "tablename-%{+YYYY.MM.dd}" #index规则
document_id => "%{id}" #文档的id
hosts => ["122.207.86.14:9200"] #es的地址
}
}
设置开机启动
systemctl enable logstash
可能出现错误:failed to start logstash unit not found
解决方案:执行 /usr/share/logstash/bin/system-install 即可,重新执行上述命令
可能出现错误:Could not find logstash.yml
解决方案:执行命令时候加上参数 --path.settings=/etc/logstash
可能出现错误:Unable to connect to database. Tried 1 times {:error_message=>"Java::JavaSql::SQLException: Access denied for user 'root'@'本机ip' (using password: YES)"
解决方案:mysql默认只能在当前local中进行连接,如果需要在其他ip访问,则需要添加用户,并指定ip地址和mysql root用户(其他用户)的密码,同时设置权限即可。
可能出现错误:Error writing file 'xxxx.tmp'
解决方案:表示mysql数据库所在的临时文件目录磁盘空间过小,修改mysql的my.ini文件,指定tmpdir为另外的磁盘即可。
创建索引模板
PUT /_template/everything_template
{
"index_patterns": "visit-*",
"settings": {
"number_of_shards": 2, #设置主分片数
"number_of_replicas" : 1 #设置复制分片数
}
}