ElasticSearch集群以及简单的JavaAPI操作

ES集群配置

ES集群的简介以及重要的配置项

一个集群由一个唯一的名字来标识,名字默认为elasticsearch,一个节点只能通过指定一个集群的名字来加入集群

ES重要配置项的多种配置方式

默认情况下,ES集群中的每一个节点都有成为主节点的资格,也都存储数据,也提供
查询服务。主要由2个属性来控制

  1. node.master表示节点是否有成为主节点的资格
  2. node.data表示节点是否存储数据
  3. node.ingest 标识节点是否可以作为预处理节点

组合一:此节点既可以成为主节点,可以存储数据,可以作为预处理节点
ES的默认配置,在实际生产环境中肯定不能这样(因为一个节点如果这三个功能都有,压力会很大)

node.master: true
node.data: true
node.ingest: true	

组合二:data节点
这个节点没有成为主节点的资格,也就不参与选举,只会存储数据

node.master: false
node.data: true
node.ingest: false	

组合三:master节点
不会存储数据,有成为主节点的资格,可以参与选举.

node.master: true
node.data: false
node.ingest: false	

组合四:client节点
这个节点即不会成为主节点,也不会存储数据,主要用于负载均衡

node.master: false
node.data: false
node.ingest: true	

组合五:只能查询的节点

node.master: false
node.data: false
node.ingest: false	

ES集群(3台)简单配置

节点1:

#es会自动发现在同一网段下的es,所有节点都要填他
cluster.name: test
#节点名称,要唯一
node.name: test130
node.master: true
node.data: true
#节点的ip,填了这个也可以使用外网访问
network.host: 192.168.237.130
http.port: 9200
transport.tcp.port: 9300
#集群的ip+端口
discovery.zen.ping.unicast.hosts: ["192.168.237.130:9300","192.168.237.131:9300", "192.168.237.132:9300"]
discovery.zen.minimum_master_nodes: 2

节点2:

#es会自动发现在同一网段下的es,所有节点都要填他
cluster.name: test
#节点名称,要唯一
node.name: test131
node.master: true
node.data: true
#节点的ip,填了这个也可以使用外网访问
network.host: 192.168.237.131
http.port: 9200
transport.tcp.port: 9300
#集群的ip+端口
discovery.zen.ping.unicast.hosts: ["192.168.237.130:9300","192.168.237.131:9300", "192.168.237.132:9300"]
discovery.zen.minimum_master_nodes: 2

节点3:

#es会自动发现在同一网段下的es,所有节点都要填他
cluster.name: test
#节点名称,要唯一
node.name: test132
node.master: true
node.data: true
#节点的ip,填了这个也可以使用外网访问
network.host: 192.168.237.132
http.port: 9200
transport.tcp.port: 9300
#集群的ip+端口
discovery.zen.ping.unicast.hosts: ["192.168.237.130:9300","192.168.237.131:9300", "192.168.237.132:9300"]
discovery.zen.minimum_master_nodes: 2

说明:
为何集群的端口用的是9300而不是9200:

  1. 9200端口:ES节点与外部通信使用的端口,作为Http的Restful接口,用于CRUD操作
  2. 9300端口:ES节点之间使用的端口,是tcp通信端口,集群间的交流以及java客户端操作,都使用9300.

配置完后,依次开启3台机器的 ES服务即可。
集群状态查看:http://192.168.237.130:9200/_cat/health?v
在这里插入图片描述

端口9200确实开了的情况下,解决无法访问外网的问题。

这里在唠叨下,因为自己遇到这个坑(我配置ES的时候,虚机是刚下载的镜像,有很多坑)
如果说,ES服务确确实实打开了,9200,9300端口都开了(可以用命令netstat -nlp查看),但是外网就是访问不了ip+9200,可以排查以下原因:

  1. SELINUX是否设置为disabled
  2. 虚机的防火墙是否关闭

问题一的解决:

vim /etc/sysconfig/selinux

将SELINUX=enforcing 改为 SELINUX=disabled

问题二的解决:

  1. 查看防火墙service firewalld status
  2. 关闭防火墙service firewalld stop(暂时的)
  3. 开启防火墙service firewalld start
  4. 永久关闭防火墙service firewalld disable(用这种)

以上两种原因排查后,再看看外网能否访问成功。

ES简单的JavaAPI操作

注意,如果要用api操作ES,对应jar包的版本和ES版本要对应上,否则会报错,我用的ES版本是6.0.0.
链接: https://pan.baidu.com/s/1cZA3szFPXaIp5SOX_JrS9A
密码: gjp9

pom文件:

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>6.0.0</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>6.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
    <version>2.12.1</version>
</dependency>

插入数据:

@org.junit.Test
    public void testInsert() throws Exception {
        // ES的配置文件,这里配置集群名称即可
        Settings settings = Settings.builder().put("cluster.name", "ljj").build();
        // ES的客户端创建
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.237.130"), 9300));
        // ES的数据一般都通过XContentFactory.jsonBuilder()的方式区创建一个文档
        // 文档的内容由startObject标识开始,endObject标识结束
        XContentBuilder doc = XContentFactory.jsonBuilder()
                .startObject()
                .field("id", "2")
                .field("name", "hello333")
                .field("address", "hz")
                .endObject();
        IndexResponse response = client.prepareIndex("test", "test_type", "99")
                .setSource(doc).get();
        System.out.println(response.status());
        client.close();
    }

查询数据:

@org.junit.Test
    public void testSelect() throws Exception {
        //1.创建一个Setting对象,相当于是一个配置信息,主要是配置集群的名称
        Settings settings = Settings.builder()
                .put("cluster.name", "ljj")
                .build();
        //2.创建一个客户端Client对象
        PreBuiltTransportClient client = new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.237.130"), 9300));

        GetResponse response = client.prepareGet("test", "test_type", "99").get();
        System.out.println(response.getSourceAsString());
        //4.关闭client对象
        client.close();
    }

删除数据:

@org.junit.Test
    public void testDelete() throws Exception {
        //1.创建一个Setting对象,相当于是一个配置信息,主要是配置集群的名称
        Settings settings = Settings.builder()
                .put("cluster.name", "ljj")
                .build();
        //2.创建一个客户端Client对象
        PreBuiltTransportClient client = new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.237.130"), 9300));

        DeleteResponse response = client.prepareDelete("test", "test_type", "2").get();
        System.out.println(response.status());
        //4.关闭client对象
        client.close();
    }

修改数据:

@org.junit.Test
    public void testUpdate() throws Exception {
        Settings settings = Settings.builder().put("cluster.name", "ljj").build();
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.237.130"), 9300));
        UpdateRequest request = new UpdateRequest();
        request.index("test")
                .type("test_type")
                .index("99")
                .doc(
                        XContentFactory.jsonBuilder().startObject()
                                .field("address", "sh")
                                .endObject()
                );

        UpdateResponse response = client.update(request).get();
        System.out.println(response.status());
        client.close();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zong_0915

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值