1. 程式人生 > >ElasticSearch叢集開啟X-Pack修改PreBuiltXPackTransportClient

ElasticSearch叢集開啟X-Pack修改PreBuiltXPackTransportClient

原文連結 : ElasticSearch叢集開啟X-Pack修改PreBuiltXPackTransportClient
ElasticSearch版本5.5.1,叢集三臺節點。

在節點1上安裝x-pack

bin/elasticsearch-plugin install x-pack
這裡寫圖片描述

這裡寫圖片描述

可以看到node1啟動時已經載入了 x-pack

這裡寫圖片描述

啟動 kibana 發現 Auth failed
這裡寫圖片描述

啟動叢集中的其他node節點也報錯 ,無法加入叢集。

Caused by: org.elasticsearch.transport.RemoteTransportException: [node1
][127.0.0.1:9300][internal:transport/handshake] Caused by: org.elasticsearch.ElasticsearchSecurityException: missing authentication token for action [internal:transport/handshake]

這裡寫圖片描述

安裝 kibana-x-pack 外掛

這裡寫圖片描述
Optimizing and caching browser bundles… 這一步會卡很久。 慢慢等吧 。

安裝好了,開啟 Kibana 發現 session 報錯 clear 也沒有用
這裡寫圖片描述


回去看 Kibana 沒有被關閉 導致的:

log   [02:10:01.457] [fatal] Port 5601 is already in use. Another instance of Kibana may be running!
解決:
lsof -i:5601
kill pid
bin/kibana 

再次訪問,成功!

8

Monitor裡面可以看到和 Header 外掛類似的功能:
9

叢集開啟Xpack

root@7088c867ec22:/elasticsearch/el_slave/es_slave1# bin/elasticsearch-plugin install x-pack
-> Downloading x-pack from elastic

過程與 node1 相同,重啟 node2 看看現在能否新增到叢集中去:

##載入x-pack
[2018-07-24T02:26:58,548][INFO ][o.e.p.PluginsService     ] [node2] loaded plugin [x-pack]

##新增到叢集成功
[2018-07-24T02:27:07,785][INFO ][o.e.c.s.ClusterService   ] [node2] detected_master {node1}{guQWpGciQvuQzXB30zDMEw}{HE-ZLsMTTE-L-hcsFX45sQ}{172.17.0.2}{172.17.0.2:9300}{ml.enabled=true}, added {{node1}{guQWpGciQvuQzXB30zDMEw}{HE-ZLsMTTE-L-hcsFX45sQ}{172.17.0.2}{172.17.0.2:9300}{ml.enabled=true},}, reason: zen-disco-receive(from master [master {node1}{guQWpGciQvuQzXB30zDMEw}{HE-ZLsMTTE-L-hcsFX45sQ}{172.17.0.2}{172.17.0.2:9300}{ml.enabled=true} committed version [21]])

看看 Kibana 的顯示,

10

11

13
至此,叢集就成功開啟了 xpack 功能。

建立用於連線9200的使用者

這個使用者可以訪問 localhost:9200 同時用於下面的 xpack javaApi 連線使用者
12

JavaAPi-xpack

新增 x-pack 之後 java api 的連線方式的改變

由於 xpack-client-tansport PreBuiltXPackTransportClient 需要單獨引入 ,所以可以從本地引入 jar 包,或者 修改 mvn ~/.m2/settings.xml 新增如下程式碼:

<mirrors>
    <mirror>
        <id>central</id>
        <mirrorOf>central</mirrorOf><!-- 修改此處 -->
        <name>Human Readable Name for this Mirror</name>
        <url>http://maven.aliyun.com/nexus/</url>
    </mirror>
</mirrors>
<profiles>
    <profile>
        <id>dev</id>
        <repositories>
            <repository>  <!-- 增加elastic倉庫 -->
                <id>elasticsearch-releases</id>
                <url>https://artifacts.elastic.co/maven</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
        <pluginRepositories>
        </pluginRepositories>
    </profile>
</profiles>
<activeProfiles>
    <activeProfile>dev</activeProfile> <!-- 啟用 -->
</activeProfiles>

然後transport 的寫法只要在 Elastic-JavaApi SpringBoot布林查詢 的基礎上 做一點兒修改就可以了

try {
            //不要設定叢集嗅探,這樣會把客戶端也新增到叢集中作為
            Settings settings = Settings.builder()
                    .put("cluster.name", "leon")
                    .put("xpack.security.transport.ssl.enabled", false)
                    .put("xpack.security.user", "es:es123456")
                    .build();

   transPort = new PreBuiltXPackTransportClient(settings);

這一套是我實踐下來的記錄,在移植到生產環境和別人機器上在引入 PreBuiltXPackTransportClient 時可能會有一些不一致,有一些差異。