es(elasticsearch)予備調査の要約(1)

動作環境:centos7の下のdocker

Elasticsearchバージョン:6.5.1(最新バージョンは使用されません。最新バージョンは7.Xです)

jdkバージョン:1.8(長すぎる、約8バージョン)

イメージをインストールします:docker pull docker.io/elasticsearch:6.5.1

esコンテナを起動します。

docker run -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms512M -Xmx512M" --name es6.5.1 docker.io/elasticsearch:6.5.1

esコンテナを起動する傾向がある問題:

問題1:メモリオーバーフロー、マウント後に出口(1)が表示されます。このステータスは、メモリの問題である可能性があります。

解決:

ミラーを起動するときに、-e ES_JAVA_OPTS = "-Xms512M -Xmx512M"を追加して、メモリサイズを指定します。上記の正しいステートメントなど。

问题二:最大仮想メモリ領域vm.max_map_count [xxx]が低すぎるため、少なくとも[xxxx]に増やしてください

この問題はログから取得されます。これは基本的に、elasticsearchユーザーが所有するメモリ権限が小さすぎることを意味します。少なくともxxxxが必要です。

解決:

最初に:rootユーザーに切り替えて、構成sysctl.confを変更します

vi /etc/sysctl.conf

2番目:ファイルの最後に次の構成を追加します。

vm.max_map_count=xxxx(此处的xxxx是你自己要填写的数值)

3番目:sysctl -p(指定されたファイルからシステムパラメータをロードします。指定されていない場合は、/ etc / sysctl.confからロードします)

次に、elasticsearchを再起動して正常に開始します

问题三:初期ヒープサイズ[268435456]が最大ヒープサイズ[1073741824]と等しくない; これにより、サイズ変更が一時停止し、mlockallがヒープ全体をロックできなくなる可能性があります

一般的に、メモリサイズに一貫性がなく、いくつかの問題が発生します。

解決策: -e ES_JAVA_OPTS = "-Xms512M -Xmx512M"コマンドを使用する場合は、-Xmsパラメーターと-Xmxパラメーターを同じサイズに設定します。

ESとJAVAを使用してクラスター、インデックス、その他のデータを作成する:

IDEAツールを使用してmavenプロジェクトを作成します(mavenプロジェクトの作成方法mavenのインストールと構成、これらは2つのリンクです)。

dockerのESのelasticsearch.ymlファイルには、network.host:0.0.0.0、cluster.name:xxxx(クラスター名)構成が必要です。

mavenのpom.xmlファイル

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.kakatadage</groupId>
  <artifactId>esdemo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>transport</artifactId>
      <version>6.5.1</version>
    </dependency>

  </dependencies>

  <build>
    <finalName>esdemo</finalName>
    <plugins>
      <plugin>
        <!-- 设置javac编译器的版本和编码字符 -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>utf8</encoding><!-- 编译器编码 -->
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

テストファイル:

package com.java.es.test;

import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;

import java.io.IOException;
import java.net.InetAddress;

public class EsDemo {

    //从ES中查询数据
    @Test
    public void test1() throws IOException {
        //指定ES集群,es的yml配置文件里面要有这个集群
        Settings setting = Settings.builder().put("cluster.name", "docker-cluster").build();

        //创建访问ES服务器的客户端,这里host为服务器对外IP,或者本地IP,取决于环境搭建在服务器还是本地
        TransportClient client = new PreBuiltTransportClient(setting)
                .addTransportAddress(
                        new TransportAddress(
                                InetAddress.getByName("host"),9300));

        IndexResponse response = client.prepareIndex("mfz", "mfz_tab", "1").setSource(XContentFactory.jsonBuilder()
                .startObject().field("name", "mfz")
                .field("sex", "男")
                .field("age", "22")
                .endObject()).get();

        System.out.println("索引名称:" + response.getIndex() + "\n类型:" + response.getType()
                + "\n文档ID:" + response.getId() + "\n当前实例状态:" + response.status());
        client.close();
    }
}

詳細については、https//www.cnblogs.com/kakatadage/p/10021957.htmlを参照してください。ただし、彼のテストクラスはここで合格できません。理由は、彼のテストクラスがesクラスターを指定しているが、以下は役に立たないためです。 (以下に示すように)、私のテストクラスはローカルでテストされています。鉱山はサーバーに接続されており、彼はローカルです。esとJAVAの追加、削除、変更について:elasticsearchとJAVAの追加、削除、変更をご覧ください。

おすすめ

転載: blog.csdn.net/FV8023/article/details/96427911