docker下elasticsearch开启账号密码验证与java集成elasticsearch

第一步:找到elasticsearch容器,命令

docker ps

第二步:进docker下部署的elasticsearch中,容器名为第一步中elasticsearch对应的容器名称,命令

docker exec -it db-容器名 bash

第三步,修改elasticsearch配置文件,首先进入config目录,目录中有个名为elasticsearch.yml的配置文件,在配置文件中加上一行xpack.security.enabled: true,代表启用xpack进行账号密码验证,命令如下

cd config
vi elasticsearch.yml

//在elasticsearch,yml加上xpack.security.enabled: true,然后:wq保存退出

第四步:重启elasticsearch

第五步:重启后执行第二步中的命令,进入容器中,在进入bin目录,执行以下命令

docker exec -it db-容器名 bash
cd bin
./elasticsearch -d

执行完以上命令后,稍等一会执行./elasticsearch-setup-passwords interactive,这时候就需要为一些默认账户设置密码,设置好之后妥善保存,设置完成之后重启elasticsearch,然后打开浏览器访问服务器9200端口,弹出账号密码输入框代表配置成功

我们在java中使用elasticsearch时,核心在于RestHighLevelClient高级请求客户端

首先新建RestClientConfig配置类

package ktw.micro.service.framework.es;

import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;

/**
 * @ClassName: RestClientConfig
 * @Description:
 * @author: zhang zihao
 * @date: 2022/11/12  16:15
 */
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
    @Override
    public RestHighLevelClient elasticsearchClient() {
        return RestClients.create(ClientConfiguration.localhost()).rest();
    }

    // no special bean creation needed
}

然后在ElasticsearchUtil工具类中编写客户端生成方法

public static RestHighLevelClient getClient(String ip, int port, String userName, String password) {
		final ClientConfiguration clientConfiguration = ClientConfiguration.builder().connectedTo(ip + ":" + port)
				.withBasicAuth(userName, password).build();
		return RestClients.create(clientConfiguration).rest();
	}

然后编写测试类

public class AppTest {
	public static void main(String[] args) throws IOException {
		query("csyd2013");
	}
	public static void query(String indexName) throws IOException {
		RestHighLevelClient client = ElasticsearchUtil.getClient("192.168.2.39", 9200,"elastic","123456");
		Coordinate[] coordinates = new Coordinate[5];
		// coordinates[0] = new Coordinate(111.471, 27.257);
		// coordinates[1] = new Coordinate(111.495, 27.241);
		// coordinates[2] = new Coordinate(111.476, 27.238);
		// coordinates[3] = new Coordinate(111.471, 27.257);

		coordinates[0] = new Coordinate(107, 29);
		coordinates[1] = new Coordinate(115, 29);
		coordinates[2] = new Coordinate(115, 23);
		coordinates[3] = new Coordinate(107, 23);
		coordinates[4] = new Coordinate(107, 29);

		CoordinatesBuilder coordinatesBuilder = new CoordinatesBuilder().coordinates(coordinates).close();
		PolygonBuilder polygonBuilder = new PolygonBuilder(coordinatesBuilder);
		@SuppressWarnings("deprecation")
		GeoShapeQueryBuilder query = QueryBuilders.geoIntersectionQuery("the_geom", polygonBuilder);
		// GeoShapeQueryBuilder query =
		// QueryBuilders.geoIntersectionQuery("the_geom",
		// polygonBuilder.buildGeometry());
		SearchRequest searchRequest = new SearchRequest(indexName);
		SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
		sourceBuilder.query(query);
		searchRequest.source(sourceBuilder);
		SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

		Date t1 = new Date();
		int count = searchResponse.getHits().getHits().length;

		// SearchHits histogram =
		// searchResponse.setSize(count.intValue()).execute().actionGet().getHits().value;
		Date t2 = new Date();
		int i = 1;
		for (SearchHit searchHit : searchResponse.getHits().getHits()) {

			Map<String, Object> search = searchHit.getSourceAsMap();
			i++;
		}
		Date t3 = new Date();
		System.out.println(t2.getTime() - t1.getTime());

		System.out.println(t3.getTime() - t2.getTime());
	}
}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Docker中创建带密码保护的Elasticsearch集群,您需要完成以下步骤: 1. 创建一个网络 首先,您需要创建一个Docker网络,以便在同一网络中运行多个容器。您可以使用以下命令创建一个名为`elk`的新网络: ``` docker network create elk ``` 2. 启动Elasticsearch容器 接下来,您需要启动Elasticsearch容器,并将其加入到上一步创建的网络中。您可以使用以下命令启动一个新的Elasticsearch容器: ``` docker run -d --name es01 --net elk -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ELASTIC_PASSWORD=mysecretpassword" docker.elastic.co/elasticsearch/elasticsearch:7.13.4 ``` 在这个例子中,我们启动了一个名为`es01`的新Elasticsearch容器,并将其加入到`elk`网络中。我们设置了`discovery.type`环境变量为`single-node`,这样就可以创建一个不需要发现节点的单节点集群。我们还设置了`ELASTIC_PASSWORD`环境变量,并将其值设置为`mysecretpassword`,以创建具有密码保护的默认超级用户账号`elastic`。 3. 启动Kibana容器 如果您想启动Kibana容器来访问Elasticsearch集群,请使用以下命令启动一个新的Kibana容器: ``` docker run -d --name kib01 --net elk -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://es01:9200" -e "ELASTICSEARCH_USERNAME=elastic" -e "ELASTICSEARCH_PASSWORD=mysecretpassword" docker.elastic.co/kibana/kibana:7.13.4 ``` 在这个例子中,我们启动了一个名为`kib01`的新Kibana容器,并将其加入到`elk`网络中。我们设置了`ELASTICSEARCH_HOSTS`环境变量为`http://es01:9200`,这样Kibana就可以连接到Elasticsearch集群。我们还设置了`ELASTICSEARCH_USERNAME`和`ELASTICSEARCH_PASSWORD`环境变量,以使用我们在第2步中设置的用户名和密码进行身份验证。 4. 启动Logstash容器(可选) 如果您想启动Logstash容器来处理日志数据,可以使用以下命令启动一个新的Logstash容器: ``` docker run -d --name log01 --net elk -v /path/to/log/files:/usr/share/logstash/pipeline/ -e "ELASTICSEARCH_HOSTS=http://es01:9200" -e "ELASTICSEARCH_USERNAME=elastic" -e "ELASTICSEARCH_PASSWORD=mysecretpassword" docker.elastic.co/logstash/logstash:7.13.4 ``` 在这个例子中,我们启动了一个名为`log01`的新Logstash容器,并将其加入到`elk`网络中。我们使用`-v`选项将本地日志文件目录挂载到容器中的`/usr/share/logstash/pipeline/`目录中,以便Logstash可以处理这些日志数据。我们设置了`ELASTICSEARCH_HOSTS`环境变量为`http://es01:9200`,这样Logstash就可以连接到Elasticsearch集群。我们还设置了`ELASTICSEARCH_USERNAME`和`ELASTICSEARCH_PASSWORD`环境变量,以使用我们在第2步中设置的用户名和密码进行身份验证。 以上就是在Docker中创建带密码保护的Elasticsearch集群的步骤。请注意,如果您想将该集群部署到生产环境中,您需要采取其他安全措施,如使用SSL/TLS进行加密通信、限制网络访问等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值