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:5docker 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