本文集主要是总结自己在项目中使用ES 的经验教训,包括各种实战和调优。
安装前需要先关闭elasticsearch的服务
wget https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.3.0.zip
bin/elasticsearch-plugin install file:///path/to/file/x-pack-5.3.0.zip
bin/kibana-plugin install file:///path/to/file/x-pack-5.3.0.zip 安装之后会在plugins下面出现一个x-pack的文件夹。
之后在elasticsearch.yml中添加权限验证 xpack.security.enabled: false
卸载的方式:
bin/elasticsearch-plugin remove x-pack
bin/elasticsearch-plugin install x-pack
激活license:curl -XPUT -u elastic:password 'http://<host>:<port>/_xpack/license' -d @license.json
如果前后版本变化需要添加上acknowledge=true
curl -XPUT -u elastic:password 'http://<host>:<port>/_xpack/license?acknowledge=true' -d @license.json
curl -XPUT 'http://localhost:9200/_xpack/license?acknowledge=true' -d @test1-test1-53425a61-bea9-4a37-8a39-3b70298f516c.json(这个json文件需要去官网上注册下载)
kibana后台启动: nohup bin/kibana & 。然后在按任意键就可以了。
关于kibana界面功能的使用介绍:http://www.cnblogs.com/Leo_wl/p/6181563.html
X-pack的破解说明
主要总结x-pack的破解说明:elasticsearch的x-pack主要做监控使用,但是同时涵盖了其他丰富的功能,具体使用可以参考x-pack的官方文档。https://www.elastic.co/guide/en/x-pack/current/installing-license.html
但是x-pack只有一个月的有效期,注册以后免费版可以使用一年。但是只能使用基本版。功能会受到影响。 具体区别参照链接: https://www.elastic.co/subscriptions
x-pack获取一年免费使用的网址,注册后会给邮箱发送链接,按照邮箱提示下载相应版本得license,注册链接:https://register.elastic.co/xpack_register
下载5.3.0的zip文件,wget https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.3.0.zip
解压后找到x-pack-5.3.0.jar,其中的org.elasticsearch/license/LicenseVerifier.class主要用来进行权限验证,修改相应文件。修改后的文件如下,可以通过main方法编译,也可以用过tomcat编译成class文件。其中需要如下jar包,已放置文件最底部。之后将编译好的class文件替换原先的x-pack-5.3.0.jar中。
然后将该jar包传到elasticsearch安装路径的plugin/x-pack下,替换掉原先的jar包。
执行激活license命令:curl -XPUT -u elastic:password 'http://<host>:<port>/_xpack/license?acknowledge=true' -d @license.json
其中license.json为我们官网注册以后获得的json文件,可以对这个文件进行修改。
文件中的type分为三种,即basic、gold、platinum三种。expiry_date_millis为到期时间,写的是unix时间格式。其他参数可以根据自己的需求进行更改。其中signature貌似不能大改,会验证长度之类的吧,要改动的话需要自己修改其他的class文件。可以通过curl -XGET 'http://localhost:9200/_xpack/license'查看license的信息,也可以在kibana的monitoring中看到我们的license信息。
破解的代码
package org.elasticsearch.license;
import java.nio.*;
import java.util.*;
import java.security.*;
import org.elasticsearch.common.xcontent.*;
import org.apache.lucene.util.*;
import org.elasticsearch.common.io.*;
import java.io.*;
public class LicenseVerifier
{
public static void main(String[] args){
System.out.println("wyj 破解成功");
}
public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) {
return true;
}
public static boolean verifyLicense(final License license) {
return true;
}
}
参考链接:http://blog.csdn.net/mvpboss1004/article/details/65445023
es 文集里需要的各项文件都存储在网盘上。
链接: https://pan.baidu.com/s/1FcV-V9ie0Lf3aW1J5bpfrQ 提取码: 73et
如何注册License
注册es产品:https://register.elastic.co/xpack_register
更新license,Updating Your License 官方文档https://www.elastic.co/guide/en/x-pack/current/installing-license.html
注册用户获取基础license,有效期1年https://register.elastic.co/xpack_register
curl -XPUT -u elastic:password 'http://<host>:<port>/_xpack/license' -d @license.json
@license.json 申请得到的json文件,复制文件中的所有内容,粘贴在此。
如果提示需要acknowledge,则设置为true curl -XPUT -u elastic:password 'http://<host>:<port>/_xpack/license?acknowledge=true' -d @license.json
查看license的:curl -XGET 'http://localhost:9200/_xpack/license'
使用x-pack进行权限验证
es使用x-pack进行权限验证的过程记录:
-
首先在es和kibana的配置中把xpack.security.enabled: true.
-
同时kibana的配置文件中设置
elasticsearch.username: "elastic"
elasticsearch.password: "changeme" //es x-pack中默认的帐号密码是elastic:changeme -
开启权限验证以后,登录kibana就需要输入帐号密码了。同时在kibana的management里面可以新建帐号和密码,同时可以配置权限。具体可参考官网链接:https://www.elastic.co/guide/en/x-pack/current/security-getting-started.html 可以设置用户组、修改密码等等.具体命令的使用还是以官方文档为标准。
修改elastic用户的密码:(修改密码需要高级权限的帐号作为严重。所以命令都有带上 -u elastic,之后会让输入elastic账号的密码进行验证)
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/elastic/_password' -d '{
"password" : "123456"
}'
修改kibana用户的密码:
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/kibana/_password' -d '{
"password" : "123456"
}'
创建用户组和角色,创建所属用户
eg:创建beats_admin用户组,该用户组对filebeat有all权限,对.kibana有manage,read,index权限
curl -XPOST -u elastic 'localhost:9200/_xpack/security/role/beats_admin' -d '{
"indices" : [
{
"names" : [ "filebeat*" ],
"privileges" : [ "all" ]
},
{
"names" : [ ".kibana*" ],
"privileges" : [ "manage", "read", "index" ]
}
]
}'
创建jockbeat用户,密码是jockbeat
curl -XPOST -u elastic 'localhost:9200/_xpack/security/user/jockbeat' -d '{
"password" : "jockbeat",
"full_name" : "jock beat",
"email" : "john.doe@anony.mous",
"roles" : [ "beats_admin" ]
}'
查看一个用户的权限:
GET /_xpack/security/user/userName
查看两个用户的权限:
GET /_xpack/security/user/userName1,userName2
查看全部用户的权限:
GET /_xpack/security/user
其他删除、更新命令可参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/security-api-users.html
- kibana配置好以后javaAPI就需要相应的跟着变动。关于具体的变动方法,参考如下:https://www.elastic.co/guide/en/x-pack/current/java-clients.html
网上找了个实例,说是可以设置分片的rerouting。链接如下:http://www.wklken.me/posts/2015/05/23/elasticsearch-issues.html 但是rerouting也有可能丢数据,同时连接中的方法在5.3的情况下不太对,所以还需要参考官网的rerouting方法。如下:https://www.elastic.co/guide/en/elasticsearch/reference/5.3/cluster-reroute.html
使用x-pack以后,API使用上的变化。
原先的api方法:
@PostConstruct
public void init() throws UnknownHostException {
// 设置集群名称
Settings settings = null;
if (Constant.isLocal) {
settings = Settings.builder().put("cluster.name", clusterName).build();
} else {
settings = Settings.builder().put("cluster.name", clusterName).put("client.transport.sniff", true).build();
}
// 创建client
client = new PreBuiltTransportClient(settings);
if (hosts.get(0).equalsIgnoreCase(hosts.get(hosts.size() - 1))) {
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(hosts.get(0)), Integer.parseInt(port)));
} else {
for (String host : hosts) {
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), Integer.parseInt(port)));
}
}
if (client == null) {
log.error("create client error");
}
}
变更之后的api:
变更之后,需要使用PreBuiltXPackTransportClient 来创建新的client,同时配置如下属性,.put("xpack.security.user", "transport_client_user:changeme")
官网示例如下:
TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
.put("cluster.name", "myClusterName")
.put("xpack.security.user", "transport_client_user:changeme")
...
.build())
.addTransportAddress(new InetSocketTransportAddress("localhost", 9300))
.addTransportAddress(new InetSocketTransportAddress("localhost", 9301));
需要配置pom.xml ,依赖的配置可以参考官方文档:https://www.elastic.co/guide/en/x-pack/5.3/java-clients.html
网友评论