ElasticSearch存储集群扩展及连接(集群系列一)

互联网时代数据量很大,因此几乎所有的存储都会支持分布式集群工作方式。从横向扩展应用的性能。这里对常见的工具做思路上的梳理,暂不涉及到具体细节。

一、扩容

1、可以通过增加机器来进行动态扩容;
2、需要修改各个机器上的配置文件;
3、最终需要重启机器;

说明:

1、重启机器可以轮流单个重启,但是因为涉及到重启过程中该节点停止服务会导致该节点的数据分片不足,其他机器会重新划分数据,造成大量的数据读取。但是ES已经有相关的具体命令,本质是先停止节点备份功能,再重启;
参考:ElasticSearch重启集群方案
2、集群安装部署
参考Elasticsearch5.2.1集群搭建,动态加入节点,并添加监控诊断插件

二、连接

这里介绍采用Java API的方式连接到ES集群,采用同一个org.elasticsearch.client.Client 接口,有两种连接方式。

1、作为节点接入

import static org.elasticsearch.node.NodeBuilder.nodeBuilder;
import org.elasticsearch.client.Client;
import org.elasticsearch.node.Node;
Node node = nodeBuilder().clusterName("escluster2").client(true).node();
Client client = node.client();

应用程序当成ElasticSearch集群中的一个节点,并和其他节点一样对待。当然(在绝大多数情况下),我们不希望自己的应用程序被当作数据节点来存储数据,或者被推选为主节点。
此时程序作为客户端需要和集群在同一个网段下。

2 、使用传输及连接方式

本方法允许只连接到集群而不加入集群。你会发现,客户端可以连接到多个节点,并通过轮询调度的方式使用它们。

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "escluster2").build();
        TransportClient client = new TransportClient(settings);
        client.addTransportAddress(new InetSocketTransportAddress("127.0.0.1", 9300));

多个接入点

Client client = new TransportClient()   
            .addTransportAddress(new InetSocketTransportAddress("host1", 9300))   
            .addTransportAddress(new InetSocketTransportAddress("host2", 9300));   
    client.close(); 

更改集群名

 Settings settings = ImmutableSettings.settingsBuilder()   
                    .put("cluster.name", "myClusterName").build();   
    Client client = new TransportClient(settings);

自动嗅探集群所有IP,把集群中其它机器的ip地址加到客户端中,这样做的好处是一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器

ettings settings = ImmutableSettings.settingsBuilder()   
                    .put("client.transport.sniff", true).build();   
TransportClient client = new TransportClient(settings);

3、选择合适的连接方式

到底哪种方式更好呢?

一方面来说,第一种方式让启动顺序复杂化了,即客户端节点必须加入集群并建立与其它节点的连接,而这需要时间和资源。然而,操作可以更快地执行,因为所有关于集群、索引、分片的信息都对客户端节点可见。

另一方面,使用TransportClient对象启动速度更快,需要的资源更少,如更少的socket连接。然而发送查询和数据却要消耗更多的资源,TransportClient对象对集群和索引的拓扑结构的信息一无所知,所以他无法把数据直接发送到正确的节点,而是先把数据发送给某个初始传输节点,然后由ElasticSearch来完成剩下的转发工作。

此外,TransportClient对象还需要你提供一份待转发节点的网络地址列表。

在选择合适的连接方式时请记住,第一种方式并不是总是可行的。例如,当要连接的ElasticSearch集群处于另一个局域网中,此时唯一可选的方式就是第二种方式。

参考:
ElasticSearch Java API(一)连接集群
elasticsearch与集群交互

猜你喜欢

转载自blog.csdn.net/xihuanyuye/article/details/81196132