Docker单机搭建elasticsearch7.4.1伪集群

编程

集群搭建有助于我们理解集群是怎么工作的,以便于我们更好的理解es的 高可用、副本容错机制、高性能等。

es中的角色分配

  • 主节点

    参数:node.master:true

    因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。所以,这个属性只是代表这个节点是不是具有主节点选举资格。

  • 数据节点

    node.data:true 数据节点

    这个属性表示节点是否存储数据,主节点也可以存储数据。

  • 客户端节点

    node.master:false

    node.data:false 点

    这种组合表示这个节点即不会成为主节点,也不会存储数据,这个节点的意义是作为一个client(客户端)节点,主要是针对海量请求的时候可以进行负载均衡。

    默认情况下,每个节点都有成为主节点的资格,也会存储数据,还会处理客户端的请求。

docker搭建es集群

我们在同一台虚拟机上搭建三个ES节点,1master(本身也是data-node) ,2data-node。

下载镜像

docker pull elasticsearch:7.4.1

新增配置

新增三个配置, 需要注意的是:集群名称必须保持一致

es1.yml

#集群名称 所有节点要保持一致

cluster.name: "test_es"

#本节点名称

node.name: master

#手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算

cluster.initial_master_nodes: ["master"]

#作为master节点

node.master: true

#是否存储数据

node.data: true

#head插件设置,支持跨域访问

http.cors.enabled: true

http.cors.allow-origin: "*"

http.port: 9200

transport.tcp.port: 9300

#设置本机通信地址,用于其它节点和该节点交互的ip地址

network.host: 0.0.0.0

es2.yml

#集群名称 所有节点要保持一致

cluster.name: "test_es"

#本节点名称

node.name: node-1

#手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算

cluster.initial_master_nodes: ["master"]

node.master: false

#是否存储数据

node.data: true

http.port: 9202

transport.tcp.port: 9302

#master地址

discovery.seed_hosts: ["172.17.0.2:9300"]

#设置本机通信地址,用于其它节点和该节点交互的ip地址

network.host: 0.0.0.0

es3.yml

#集群名称 所有节点要保持一致

cluster.name: "test_es"

#本节点名称

node.name: node-2

#手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算

cluster.initial_master_nodes: ["master"]

node.master: false

#是否存储数据

node.data: true

http.port: 9203

transport.tcp.port: 9303

#master地址

discovery.seed_hosts: ["172.17.0.2:9300"]

network.host: 0.0.0.0

注意我上面写的mster地址是docker容器的ip

docker运行es

分别吧master和datanode运行起来

docker run -d --name elasticSearch-master 

-p 9200:9200 -p 9300:9300

-v /usr/local/dockerfiles/es-cluster/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml

elasticsearch:7.4.1

docker run -d --name elasticSearch-node1

-p 9202:9202 -p 9302:9302

-v /usr/local/dockerfiles/es-cluster/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml

elasticsearch:7.4.1

docker run -d --name elasticSearch-node2

-p 9203:9203 -p 9303:9303

-v /usr/local/dockerfiles/es-cluster/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml

elasticsearch:7.4.1

集群状态查看

  • 命令查看

 curl -XGET "http://192.168.100.1:9200/_cat/health?v"

#控制台输出:

epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent

1587542787 08:06:27 test_es green 3 3 9 3 0 0 0 0 - 100.0%

我们可以看到我们的集群状态是green(健康),3个节点,3个数据节点等相关信息

  • es head查看

docker pull mobz/elasticsearch-head:5

docker run -d -p 9100:9100 mobz/elasticsearch-head:5

开发9100端口访问:http://192.168.100.1:9100/ 即可查看集群状态

java 写入数据到ES集群

es 7.4.1需要spring boot版本2.2.1,以下只是关键配置:

pom

  <parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.2.1.RELEASE</version>

</parent>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-elasticsearch</artifactId>

</dependency>

application.yml

spring:

elasticsearch:

rest:

uris: http://192.168.100.1:9200

程序代码

entity

@Data

@NoArgsConstructor

@AllArgsConstructor

/**

* index相当于db

* type相当于table

*/

@Document(indexName = "basic_index",type = "user_info", shards = 3, replicas = 2)

public class UserInfoDTO {

@Id

private String userId;

@Field(type = FieldType.Keyword)

private String userName;

@Field(type = FieldType.Keyword)

private String nikeName;

@Field(type = FieldType.Text, analyzer = "ik_max_word")

private String remarks;

}

jpa

public interface UserInfoRepo extends ElasticsearchRepository<UserInfoDTO, String> {

}

sevice

 this.userInfoRepo.saveAll(users);

注意:es7.X之后,不再支持配置文件设置副本和分片,需要创建索引的时候设置。

执行完成后查看es head:

可以看到我们的数据3分片和2副本(1主,2副共3份数据)设置生效。

以上是 Docker单机搭建elasticsearch7.4.1伪集群 的全部内容, 来源链接: utcz.com/z/515746.html

回到顶部