概述
x-pack在5.0后已经作为组件集成到松耦合集成到ES 中,x-pack是一个集安全、警报、监视、报告和图形功能于一身的扩展,轻松开启或关闭那些你想要的功能。5.0之前须安装单独的 Shield、Watcher和Marvel等插件才能获得在 X-Pack中所有的功能。在6.x版本中已经默认集成,无需在安装,而且x-pack默认都是开启的。这里介绍的 x-pack-sql是需要白金版才能开启使用,并且6.3版本以后开始支持 jdbc,这个特性大大降低了学习门槛,你再也不用记一大堆rest接口api 了。
ES安装
下载
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.tar.gz
https://artifacts.elastic.co/downloads/kibana/kibana-6.5.1-linux-x86_64.tar.gz
license
访问以下链接
https://license.elastic.co/registration
填写好上面信息后发送,会给你邮箱发送一个下载license的链接
选择你要的版本下载即得到license-platinum.json文件
修改license-platinum.json内容,主要是红色的两个字段,platinum即白金版 ,expiry_date_in_mills表示license失效时间
{
"license": {
"uid": "b2c9c477-1288-4287-9768-9c33a2c80ff4",
"type": "platinum",
"issue_date_in_millis": 1543968000000,
"expiry_date_in_millis": 3107746200000,
"max_nodes": 100,
"issued_to": "nan a (fulis)",
"issuer": "Web Form",
"signature": "AAAAAwAAAA12nztKGXIJnZM1P6QAAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQBIBVV1WIP9VGkQWDReAg09XCkXBk+DyDgWInKoY0XFDPkpd0MklR5tAsZ3qrEeCp9W66wURn0fEpFEMOKDPSpXAm2DF4t1UHo+ucXqo19TQU+jigvdz2EHfjPp9OUZdhKWpgf0phswP8Uz1mQ8HBQ1KtNhBh7hAAdmCGOUHcUw4ZOg9dMg676Z5N6Ktgt8SRo4Ydwsxn263yRvYfCCXLiXqDw2DF0zJonXzNnEqouu2kLkJjigxehs09gD21tL+Egi6zwH1DXj81di8h9skxTc3mxv2fO4s8I9mImc7IqHeYAY4lVWnvS8JAQGOJMW45bbyN5sRaF6Hcns/2l6I6Ak",
"start_date_in_millis": 1543968000000
}
}
将license.json拷贝到目录
/export/home/tools/elasticstack/license.json
破解
打开下载好的elasticsearch-6.5.1.tar.gz,找到modules/x-pack-core目录下的
x-pack-core-6.5.1.jar
打开x-pack-core-6.5.1.jar,替换下面两个class文件
这里我已经将两个编译好的class放这里了,同样源码文件也在这里(如果想要文件可以联系我 stantnks@gmail.com)
编译上面两个源文件的方法如下,依赖的classpath对应的jar在安装包中都可以找到
export CLASSPATH=.:./x-pack-core-6.3.0.jar;./lucene-core-7.3.1.jar;./elasticsearch-6.3.0.jar;./elasticsearch-core-6.3.0.jar
javac -classpath $CLASSPATH -d . LicenseVerifier.java
javac -classpath $CLASSPATH -d . XPackBuild.java
部署ES
mkdir -p /export/home/tools/elasticstack
cp elasticsearch-6.5.1.tar.gz /export/home/tools/elasticstack
cd /export/home/tools/elasticstack
tar -xvf elasticsearch-6.5.1.tar.gz
ls -s elasticsearch-6.5.1 elasticsearch
配置ES
系统配置
1.禁用交换内存
On Linux systems, you can disable swap temporarily by running(这一步没有必要)
sudo swapoff -a
2.将锁定内存大小限制改成无限大(即不限制锁定内存大小)
vi /etc/security/limits.conf
linkage soft memlock unlimited
linkage hard memlock unlimited
检查
3.修改进程能打开的最大文件句柄数量
vi /etc/security/limits.conf
linkage soft nofile 65536
linkage hard nofile 65536
检查
4.增加虚拟内存设置
vi /etc/sysctl.conf
vm.max_map_count=262144
检查
5.限制程序可以fork的进程数
vi /etc/security/limits.conf
linkage soft noproc 8192
linkage hard noproc 8192
elasticsearch.yml
配置elasticsearch.yml时需要注意每个属性分号后面需要有一个空格(如果没有空格启动就会报解析错误)
1.锁定物理内存
锁住内存不要交换出去,不然内存会无限扩张出去,直到把服务器内存占满
bootstrap.memory_lock: true
通过以下命令查看mlockall配置
curl -XGET "10.40.101.8:9200/_nodes?pretty&filter_path=**.mlockall"
上面的配置项只有在系统的以下配置配置为不限制情况下才行(即不限制锁定内存大小)
vi /etc/security/limits.conf
linkage soft memlock unlimited
linkage hard memlock unlimited
2.数据目录
path.data: /export/home/tools/elasticstack/es-indexdata
3.日志目录
path.logs: /export/home/tools/elasticstack/es-logs
4.集群名字
cluster.name: wx-data
5.节点名称
node.name: 10.40.101.8
6.主机IP
network.host: 10.40.101.8
7.配置为单节点(6.5.1版本配置了报错,奇怪)
# es.enforce.bootstrap.checks: false
# discovery.type: single-node
8. 关闭x-pack-security
xpack.security.enabled: false
JVM参数配置
/export/home/tools/elasticstack/elasticsearch/config/jvm.options
# 修改最大堆和初始化堆大小
-Xms8g
-Xmx8g
# 增加持久带参数
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m
启动ES
cd /export/home/tools/elasticstack/elasticsearch/bin
./elasticsearch -d
停止ES
jps -l|grep Elasticsearch|awk '{print $1}'|xargs kill
查看授权
curl -XGET 'http://10.40.101.10:9200/_license'
基础版
白金版
破解为白金版
cd /export/home/tools/elasticstack
curl -XPOST \
-H 'Content-Type:application/json' \
-d @license-platinum.json \
'http://10.40.101.10:9200/_xpack/license?acknowledge=true&pretty'
变更为基础版
curl -XPOST \
'10.40.101.10:9200/_xpack/license/start_basic?acknowledge=true&pretty'
检查jdbc是否可用
启用安全
vi config/elasticsearch.yml
xpack.security.transport.ssl.enabled: true
xpack.security.enabled: true
配置密码
cd bin/
./elasticsearch-setup-passwords interactive
安全模式访问API
curl -XGET -u 'elastic:密码' 'http://10.40.101.10:9200/_license'
安全模式进去SQL-CLI
./elasticsearch-sql-cli
'http://elastic:密码@10.40.101.10 '
客户端-jdbc适配
maven依赖
<repositories>
<repository>
<id>elastic.co</id>
<url>https://artifacts.elastic.co/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.4.2</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty3-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>6.4.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>x-pack-sql-jdbc</artifactId>
<version>6.4.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>x-pack-transport</artifactId>
<version>6.4.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.4.2</version>
</dependency>
</dependencies>
注意:
下载依赖时如果下载不下来,请将C:\Users\Administrator\.m2\settings.xml改个名字, 例如改成settings.xml.bak,或$M2_HOME/conf/settings.xml改个名字。
等下载完成后再改回来。下载完成后需要将C:\Users\Administrator\.m2\repository或$M2_HOME\repository 目录下下载好的依赖jar包拷贝到你真实的本地仓库目录下
创建索引
curl -XPUT -u 'elastic:密码' \
-H "Content-Type:application/json" \
"10.40.101.10:9200/twitter/doc/1" \
-d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}'
查看索引数据
使用jdbc查询
DriverManagerDataSource ds=new DriverManagerDataSource();
ds.setDriverClassName("org.elasticsearch.xpack.sql.jdbc.jdbc.JdbcDriver");
ds.setUrl("jdbc:es://http://10.40.101.10:9200");
ds.setUsername("elastic");
ds.setPassword("密码");
JdbcTemplate jt=new JdbcTemplate(ds);
Integer cnt=jt.queryForObject("SELECT count(1) FROM twitter", Integer.class);
System.out.println("查询到记录数:" + cnt);
List<Map<String,Object>> list=jt.queryForList("SELECT * FROM twitter");
for(Map<String,Object> map: list){
System.out.println("查询记录明细:" + map);
}
疑问和坑
使用sql和jdbc基本没啥问题,但是 6.x版本transport必须要tls,这里面坑比较多。尤其是证书这块,比较复杂,等后面整理好了,再发一篇出来,不然只查询没法索引不是很坑吗。
参考资料
https://www.elastic.co/guide/en/elasticsearch/reference/6.5/xpack-sql.html