`
weitao1026
  • 浏览: 1048142 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

elasticsearch的使用问题

 
阅读更多

通过TransportClient这个接口,我们可以不启动节点就可以和es集群进行通信,它需要指定es集群中其中一台或多台机的ip地址和端口,例子如下:

 

[java] view plain copy
 
print?
  1. Client client = new TransportClient()    
  2.             .addTransportAddress(newInetSocketTransportAddress("host1"9300))    
  3.             .addTransportAddress(newInetSocketTransportAddress("host2"9300));    
  4. client.close();   
Client client = new TransportClient()  
            .addTransportAddress(newInetSocketTransportAddress("host1", 9300))  
            .addTransportAddress(newInetSocketTransportAddress("host2", 9300));  
client.close(); 

 

 如果你需要更改集群名(默认是elasticsearch),需要如下设置:

[java] view plain copy
 
print?
  1. Settings settings =ImmutableSettings.settingsBuilder()    
  2.                     .put("cluster.name","myClusterName").build();    
  3. Client client = newTransportClient(settings);   
Settings settings =ImmutableSettings.settingsBuilder()  
                    .put("cluster.name","myClusterName").build();  
Client client = newTransportClient(settings); 

 

你可以设置client.transport.sniff为true来使客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中,这样做的好处是一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器。代码实例如下:

[java] view plain copy
 
print?
  1. Settings settings = ImmutableSettings.settingsBuilder()    
  2.                    .put("client.transport.sniff"true).build();    
  3. TransportClientclient = new TransportClient(settings);  
Settings settings = ImmutableSettings.settingsBuilder()  
                   .put("client.transport.sniff", true).build();  
TransportClientclient = new TransportClient(settings);

 

 

注意:当ES服务器监听使用内网服务器IP而访问使用外网IP时,不要使用client.transport.sniff为true,在自动发现时会使用内网IP进行通信,导致无法连接到ES服务器,而直接使用addTransportAddress方法进行指定ES服务器。

 

Elasticsearch 免费认证插件Search-guard的部署安装及策略配置

当前es正在被各大互联网公司大量的使用,但目前安全方面还没有一个很成熟的方案,大部门都没有做安全认证或基于自身场景自己开发,没有一个好的开源方案
es官方推出了shield认证,试用了一番,很是方便,功能强大,文档也较全面,但最大的问题是收费的,我相信中国很多公司都不愿去花钱使用,所以随后在github
中找到了search-guard项目,接下来我们一起来了解并部署此项目到我们的ES环境

 

ElasticSearch2.3.4的search-guard的安装及配置讲解说明

一、Search-guard的安装

安装search-guard-ssl和search-guard

1、进入到Elasticsearch的安装路径下,本文中以该路径为例子:/ultra/ES/elasticsearch-2.3.4。先安装search-guard-ssl,执行以下命令:

./bin/plugin install -b com.floragunn/search-guard-ssl/2.3.4.14

2、再安装search-guard,执行以下命令:

./bin/plugin install -b com.floragunn/search-guard-2/2.3.4.4

 

下载search-guard-ssl源码并生成证书

需要生成证书的话,需要保证服务器上的openssl的版本在1.0.1以上。如果版本未达到,请先升级。

1、先将search-gurad-ssl的最新源码下载下来。找一个存放search-gurad-ssl的目录,本文中以该路径为例子:/ultra/ES。

执行以下命令:

git clone https://github.com/floragunncom/search-guard-ssl.git

cd search-guard-ssl/example-pki-scripts

2、进到example-pki-scripts目录下,需要根据自己服务器的情况修改脚本中的配置。找到gen_node_cert.sh文件,将其中的CN、dns修改为服务器的hostname,ip修改为服务器的IP。

3、生成证书:

#生成文件

./example.sh

#管理员的证书

./gen_client_node_cert.sh admin changeit capass

4、证书上传到Elasticsearch中。

a)将example-pki-scripts下生成的truststore.jks、admin-keystore.jks拷贝到${ES_HOME}/plugins/search-guard-2/sgconfig目录下。

b)并且给/ultra/ES/elasticsearch-2.3.4/plugins/search-guard-2/tools/sgadmin.sh执行权限:

chmod +x plugins/search-guard-2/tools/sgadmin.sh

c)将example-pki-scripts下生成的truststore.jks文件复制到ES集群中各个节点的config目录下,且把生成的node-*-keystore.jks文件复制到各个节点的config目录下。

 

在Elasticsearch中添加search-guard和search-guard-ssl的配置项

找到/ultra/ES/elasticsearch-2.3.4/config/elasticsearch.yml文件,添加以下配置项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
searchguard.authentication.authentication_backend.impl: com.floragunn.searchguard.authentication.backend.simple.SettingsBasedAuthenticationBackend
searchguard.authentication.authorizer.impl: com.floragunn.searchguard.authorization.simple.SettingsBasedAuthorizator
searchguard.authentication.http_authenticator.impl: com.floragunn.searchguard.authentication.http.basic.HTTPBasicAuthenticator
 
searchguard.actionrequestfilter.names: ["none"]
searchguard.actionrequestfilter.none.allowed_actions: []
 
searchguard.transport_auth.enabled: true
marvel.agent.exporter.es.hosts: [ "http://admin:secret@localhost:9200"]
 
searchguard.authentication.authorization.settingsdb.roles.admin: ["root"]
searchguard.authentication.settingsdb.user.admin: secret
security.manager.enabled: false
 
searchguard.audit.type: internal_elasticsearch
##### 管理员账号配置
searchguard.authcz.admin_dn:
- "CN=admin, OU=client, O=client, L=Test, C=DE"
# Enable or disable node-to-node ssl encryption (default: true)
searchguard.ssl.transport.enabled: true
searchguard.ssl.transport.keystore_type: JKS
###节点下放的是node-*,这里就写哪个
searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks
searchguard.ssl.transport.keystore_password: changeit
searchguard.ssl.transport.truststore_type: JKS
searchguard.ssl.transport.truststore_filepath: truststore.jks
searchguard.ssl.transport.truststore_password: changeit
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.transport.resolve_hostname: false
searchguard.ssl.transport.enable_openssl_if_available: false
searchguard.ssl.transport.enabled_protocols:
- "TLSv1"
- "TLSv1.1"
- "TLSv1.2"

 

重启Elasticsearch然后初始化search-guard的配置项

1、启动Elasticsearch,进到/ultra/ES/elasticsearch-2.3.4/bin下:

sh elasticsearch –d

2、初始化search-guard,进到/ultra/ES/elasticsearch-2.3.4下(我的集群名字是pasm,节点ip是192.168.182.74,相关pass我都是默认的changeit,有更改的需要你们自行去修改命令):

plugins/search-guard-2/tools/sgadmin.sh -cn pasm -h 192.168.182.74 -cd plugins/search-guard-2/sgconfig -ts plugins/search-guard-2/sgconfig/truststore.jks -ks plugins/search-guard-2/sgconfig/admin-keystore.jks -kspass changeit -tspass changeit -nhnv 

注意:如果修改了searchguard,则需要重新加载配置执行。

注意:search-guard配置的相关改动不需要重启elasticsearch,相关的配置实际上存储在searchguard 的indice下了。

 

二、HTTP和Java Api方式访问ElasticSearch

HTTP方式访问Elasticsearch

1、在浏览器上访问Elasticsearch,会直接出弹窗,输入用户名密码即可。

2、在服务器上使用curl的话需要加上参数–u adminName,如下图所示:

curl -u adminName:adminname-XGET "http://192.168.0.224:9200/blog/article/1?pretty"

 

Java API中使用search-guard

1、加入jar包

进到/ultra/ES/elasticsearch-2.3.4/plugins/search-guard-ssl目录下拷贝以下jar包加到CLASSPATH中。

search-guard-ssl-2.3.4.14.jar

netty-buffer-4.0.37.Final.jar

netty-codec-4.0.37.Final.jar

netty-common-4.0.37.Final.jar

netty-handler-4.0.37.Final.jar

netty-transport-4.0.37.Final.jar

2、修改setting

以下部分需要从ES节点的这个目录下复制出来放到工程中,并且修改为你实际的路径。

目录:/ultra/ES/elasticsearch-2.3.4/plugins/search-guard-2/sgconfig中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.net.InetAddress;
import java.net.InetSocketAddress;
import org.elasticsearch.action.admin.cluster.node.info.NodesInfoRequest;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import com.floragunn.searchguard.ssl.SearchGuardSSLPlugin;
 
Settings settings = Settings.settingsBuilder()
        .put("path.home"".")
        .put("cluster.name""PASM")
        .put("searchguard.ssl.transport.enabled"true)
        .put("searchguard.ssl.transport.keystore_filepath""I:/Work/WorkSpace/ultrasearch/plugins/search-guard-2/sgconfig/admin-keystore.jks")
        .put("searchguard.ssl.transport.truststore_filepath""I:/Work/WorkSpace/ultrasearch/plugins/search-guard-2/sgconfig/truststore.jks")
        .put("searchguard.ssl.transport.enforce_hostname_verification"false)              
        .build();

3、修改client

以下为你想要连接的ES节点的ip和port,请修改为你实际的。

1
2
3
4
5
6
7
TransportClient client = TransportClient.builder().settings(settings).addPlugin(SearchGuardSSLPlugin.class).build();
TransportClient addTransportAddress = client.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("192.168.120.42"9300)));
//do something with tc
NodesInfoRequest nodesInfoRequest= new NodesInfoRequest();
nodesInfoRequest.putHeader("sg.impersonate.as""worf");
client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();                               
client.admin().cluster().nodesInfo(nodesInfoRequest).actionGet();

 

search-guard中的用户权限管理

相关配置文件的介绍

searchguard 主要有5个配置文件在/ultra/ES/elasticsearch-2.3.4/plugins/search-guard-2/sgconfig 下:

1、sg_config.yml:主配置文件不需要做改动。

2、sg_internal_users.yml:本地用户文件,定义用户密码以及对应的权限。例如:对于 ELK 我们需要一个 kibana 登录用户和一个 logstash 用户,如下所示:

1
2
3
4
5
6
7
8
9
kibana4:
  hash: $2a$12$xZOcnwYPYQ3zIadnlQIJ0eNhX1ngwMkTN.oMwkKxoGvDVPn4/6XtO
  #password is: kirk
  roles:
    - kibana4
logstash:
  hash: $2a$12$xZOcnwYPYQ3zIadnlQIJ0eNhX1ngwMkTN.oMwkKxoGvDVPn4/6XtO
  roles:
- logstash

注意:用户的密码可用plugins/search-guard-2/tools/hash.sh生成。

3、sg_roles.yml:权限配置文件,以下为kibana4 和 logstash 的权限样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#<sg_role_name>:
#  cluster:
#    - '<permission>'
#  indices:
#    '<indexname or alias>':
#      '<type>':  
#        - '<permission>'
#      _dls_: '<querydsl query>'
#      _fls_:
#        - '<field>'
#        - '<field>'
sg_kibana4:
  cluster:
      - cluster:monitor/nodes/info
      - cluster:monitor/health
  indices:
    '*':
      '*':
        - indices:admin/mappings/fields/get
        - indices:admin/validate/query
        - indices:data/read/search
        - indices:data/read/msearch
        - indices:admin/get
        - indices:data/read/field_stats
    '?kibana':
      '*':
        - indices:admin/exists
        - indices:admin/mapping/put
        - indices:admin/mappings/fields/get
        - indices:admin/refresh
        - indices:admin/validate/query
        - indices:data/read/get
sg_logstash:
  cluster:
    - indices:admin/template/get
    - indices:admin/template/put
  indices:
    'logstash-*':
      '*':
        - WRITE
        - indices:data/write/bulk
        - indices:data/write/delete
        - indices:data/write/update
        - indices:data/read/search
        - indices:data/read/scroll
        - CREATE_INDEX

4、sg_roles_mapping.yml:定义用户的映射关系,添加 kibana 及 logstash 用户对应的映射如下:

1
2
3
4
5
6
7
8
sg_logstash:
  users:
    - logstash
sg_kibana4:
  backendroles:
    - kibana
  users:
    - kibana4

5、sg_action_groups.yml:定义权限。

 

 

分享到:
评论

相关推荐

    es-head Elasticsearch的可视化操作插件

    es-head是一个针对Elasticsearch的可视化操作插件。它提供了一个便捷的操作工具,可以连接Elasticsearch搜索引擎,并提供可视化的操作页面,对Elasticsearch进行各种设置和数据检索功能的管理。 es-head 插件可以在...

    Elastic Search搭建使用教程.pdf(内含ElasticSearch教程权威指南)

    Stack Overflow则利用Elasticsearch进行地理位置查询,并通过more-like-this接口查找相关的问题和答案;GitHub则使用Elasticsearch对大量的代码仓库进行搜索。这些应用案例都展示了Elasticsearch在全文搜索、结构化...

    elasticsearch安装和使用

    使用`/opt/es/essoftware/elasticsearch-2.3.4/bin/plugin install mobz/elasticsearch-head`命令安装,然后通过`http://cm3:9200/_plugin/head/`访问。 2. Marvel和Kibana是Elasticsearch的数据监控和可视化工具。...

    ES查询客户端,elasticsearch可视化工具 elasticsearch查询客户端

    Elasticsearch(简称ES)是一款强大的开源搜索引擎,广泛应用于数据检索、分析和管理。作为分布式、RESTful风格的搜索和数据分析引擎,Elasticsearch能够提供实时、高可用性以及可扩展的搜索功能。在进行日常的数据...

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战)

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...

    Elasticsearch 开机自启脚本

    `start` 用于启动Elasticsearch,这里使用 `su` 命令切换到指定的Elasticsearch用户(例如 `es-admin`),然后进入Elasticsearch的安装目录并执行 `bin/elasticsearch` 文件以后台模式启动服务。`stop` 通过查找并杀...

    elasticsearch服务器安装包

    2. **下载安装包**:这里的"es安装包"即为Elasticsearch的安装文件,通常是一个zip或tar.gz格式的压缩包。你需要从官方网站或者镜像站点下载对应版本的安装包,确保与你的系统兼容。 3. **解压安装**:下载完成后,...

    ES客户端+谷歌浏览器插件+Multi-Elasticsearch-Head

    使用Multi-Elasticsearch-Head,管理员或开发者可以轻松地查看和对比不同集群的状态、性能指标以及数据分布,这对于分布式系统监控和故障排查特别有用。它通常提供了一种直观的方式来查看索引结构、执行查询语句、...

    解决spring-data-elasticsearch 5.4.0 不支持 5.4.1的elasticsearch问题

    在使用Spring Data Elasticsearch框架时,可能会遇到一个常见的问题,即版本兼容性问题。Spring Data Elasticsearch 5.4.0设计时可能并未考虑到与Elasticsearch 5.4.1的完全兼容,导致在升级Elasticsearch到5.4.1后...

    elasticSearch(ES)最新版 ik分词插件7.10 elasticsearch-analysis-ik-7.10.0

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene构建,提供了分布式、RESTful风格的搜索和分析引擎服务。在中文环境下,为了实现精确的分词和搜索,我们需要安装适合版本的分词插件,如“elastic...

    flink-es7:为了使用Elasticsearch连接器,使用构建自动化工具(如Maven或SBT)的两个项目和带有SQL

    flink-es7:为了使用Elasticsearch连接器,使用构建自动化工具(如Maven或SBT)的两个项目和带有SQL

    ElasticSearch讲解PPT

    ElasticSearch简称es,es是一个开源的高扩展的分布式全文搜索引擎,它可以近乎实时的存储、检索数据,本身的扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也是用Java开发并使用Lucene作为核心来实现...

    elasticSearch-8.14.1-windows

    - **服务安装**:使用`elasticsearch-service.bat`将Elasticsearch安装为Windows服务,便于后台自动启动和管理。 - **安全考虑**:Elasticsearch默认是不安全的,建议在生产环境中启用安全性插件,并配置用户认证和...

    Windows版本(8.11)ElasticSearch、elasticsearch-head、kibana、IK分词

    注意,Elasticsearch默认使用9200端口,如果该端口已被占用,需要修改配置文件`config/elasticsearch.yml`。 **Kibana 8.11.3** Kibana是Elasticsearch的数据可视化工具,用于创建仪表板、图表和数据视图。8.11.3...

    elasticsearch elasticsearch-6.2.2 elasticsearch-6.2.2.zip 下载

    根据提供的文件信息,我们可以推断出本篇文章将围绕Elasticsearch 6.2.2版本进行详细介绍,包括其下载方式、主要功能特性以及在实际应用中的常见用途。 ### Elasticsearch简介 Elasticsearch是一款基于Lucene的...

    十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统.pdf

    十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统。 什么是elasticsearch Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索...

    ElasticSearch官方测试数据

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene库构建,被广泛用于大数据分析、日志聚合、实时搜索和索引等场景。官方提供的测试数据集是检验Elasticsearch功能、性能和稳定性的关键资源,可以帮助...

    JAVA使用ElasticSearch查询in和not in的实现方式

    JAVA使用ElasticSearch查询in和not in的实现方式 Elasticsearch是一个基于Lucene的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。它是用Java开发的,并作为Apache许可条款下的开放...

    Elasticsearch_python使用文档

    **Elasticsearch Python 使用文档** Elasticsearch 是一个开源的分布式全文搜索引擎,它提供了一个分布式、多用户能力的全文搜索引擎,基于 Lucene 库。Python 客户端库 Elasticsearch-py 则允许开发者轻松地与 ...

    elasticsearch7.14.0.zip

    这个压缩包包含了针对Windows和Linux操作系统的安装包,便于在不同环境下部署和使用Elasticsearch。此外,它还提供了多个插件的源码,如IK分词器、Pinyin插件和HanLP自然语言处理库,这些插件为Elasticsearch增加了...

Global site tag (gtag.js) - Google Analytics