Entorno operativo: Docker bajo centos7
Versión de Elasticsearch: 6.5.1 (no se utiliza la última versión, la última versión es 7.X)
versión jdk: 1.8 (demasiado larga, aproximadamente 8 versión)
Instale la imagen: docker pull docker.io/elasticsearch:6.5.1
Inicie el contenedor 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
Problemas que ocurren fácilmente al iniciar el contenedor es:
Problema 1: Desbordamiento de memoria, se muestra Exit (1) después del montaje , este estado puede ser un problema de memoria.
Solución:
Al iniciar el espejo, agregue -e ES_JAVA_OPTS = "- Xms512M -Xmx512M" para especificar el tamaño de la memoria. Como la declaración correcta anterior.
问题 二 : el número máximo de áreas de memoria virtual vm.max_map_count [xxx] es demasiado bajo, aumente a al menos [xxxx]
Este problema se obtiene a través del log, lo que básicamente significa que los permisos de memoria que posee el usuario de elasticsearch son demasiado pequeños, se requiere al menos xxxx
Solución:
Primero: cambie al usuario root para modificar la configuración sysctl.conf
vi /etc/sysctl.conf
Segundo: agregue la siguiente configuración al final del archivo:
vm.max_map_count=xxxx(此处的xxxx是你自己要填写的数值)
Tercero: sysctl -p (carga los parámetros del sistema desde el archivo especificado, si no se especifica, carga desde /etc/sysctl.conf)
Luego reinicie elasticsearch para comenzar con éxito
问题 三 :el tamaño del montón inicial [268435456] no es igual al tamaño máximo del montón [1073741824]; esto puede causar pausas de cambio de tamaño y evita que mlockall bloquee todo el montón
En términos generales, el tamaño de la memoria es inconsistente, lo que causa algunos problemas.
Solución: cuando utilice el comando -e ES_JAVA_OPTS = "- Xms512M -Xmx512M", configure los parámetros -Xms y -Xmx en el mismo tamaño.
El uso de ES y JAVA para crear clusters, índices y otros datos:
Utilice las herramientas de IDEA para crear un proyecto maven ( cómo crear un proyecto maven , instalación y configuración de maven , estos son dos enlaces).
El archivo elasticsearch.yml de ES en Docker debe tener la configuración network.host:0.0.0.0, cluster.name:xxxx (nombre del clúster).
archivo pom.xml de maven
<?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>
Archivo de prueba:
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();
}
}
Para obtener más información, consulte: https://www.cnblogs.com/kakatadage/p/10021957.html , pero su clase de prueba no puede pasarme aquí. La razón es: su clase de prueba especifica el clúster es, pero lo siguiente es inútil (Como se muestra a continuación), mi clase de prueba se ha probado localmente. El mío está conectado al servidor y el suyo es local. Con respecto a la adición, eliminación y modificación de es y JAVA: consulte elasticsearch y adición, eliminación y modificación de JAVA