接入集群 非安全模式使用Java API接入集群 非安全模式即6.5.4及之后版本集群未开启安全模式状态和其他版本的集群状态,我们为您提供两种方式:TransportClient类和RestHighLevelClient类建立客户端,并且在6.2.3版本和5.5.1版本中建议您使用TransportClient,6.5.4及之后版本中建议您使用RestHighLevelClient。 使用TransportClient类默认方法建立客户端: Settings settings ImmutableSettings.settingsBuilder().put("client.transport.sniff",false).build(); TransportClient client new TransportClient(settings) .addTransportAddress(new InetSocketTransportAddress("host1", 9300)); 使用RestHighLevelClient类默认方法建立客户端: RestHighLevelClient client new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"))); Elasticsearch安全模式Java API接入集群 当您在Elasticsearch6.5.4及之后版本中开启安全模式后,需要使用https方式连接集群,同时还需要提供用户名和密码进行身份验证。 对于使用Java API连接方式,旧版本提供的TransportClient不能实现使用用户名和密码连接集群,所以需要使用6.5.4及之后版本配套的相关API进行相关开发。 这里提供两种方式进行连接:TransportClient类和RestHighLevelClient类建立客户端。但是推荐使用RestHighLevelClient方式。 使用TransportClient类建立客户端 首先,使用以下步骤在客户端使用命令行分别生成keystore和truststore文件,其中使用到从集群管理界面下载的证书(CloudSearchService.cer)。证书下载可参考下图进行下载。 keytool genkeypair alias certificatekey keyalg RSA keystore transportkeystore.jks keytool import alias certificatekey file CloudSearchService.cer keystore truststore.jks 然后,使用生成的keystore、truststore文件,放入集群连接设置,使用PreBuiltTransportClient方法建立TransportClient类,并将连接设置放入客户端线程中。 详见下图:下载证书 关键代码如下所示: String userPw "username:password"; String path Paths.get(SecurityTransportClientDemo.class.getClassLoader().getResource(".").toURI()).toString(); Settings settings Settings.builder() .put("opendistrosecurity.ssl.transport.enforcehostnameverification", false) .put("opendistrosecurity.ssl.transport.keystorefilepath", path + "/transportkeystore.jks") .put("opendistrosecurity.ssl.transport.keystorepassword", "tscpass") .put("opendistrosecurity.ssl.transport.truststorefilepath", path + "/truststore.jks") .put("client.transport.ignoreclustername", "true") .put("client.transport.sniff", false).build(); TransportClient client (new PreBuiltTransportClient(settings, new Class[]{OpenDistroSecurityPlugin.class})).addTransportAddress(new TransportAddress(InetAddress.getByName(ip), 9300)); String base64UserPw Base64.getEncoder().encodeToString(userPw.getBytes("utf8")); client.threadPool().getThreadContext().putHeader("Authorization", "Basic " + base64UserPw);