成为弹性搜索的搜索专家!09.集群化

我們正在進行中進行各種嘗試,但目前我們想要使用搜索系統在常用的應用程式上進行搜索,因此單台配置感覺有些不安全,所以我們會使用多台集群配置。

如果您搜索一下ElasticSearch的集群配置,我认为您应该能够理解,一般使用起来非常容易。也许有一些小技巧,但我们在这里将以非常简单的方式配置。

首先,看一下设置文件。

################################### Cluster ###################################

# Cluster name identifies your cluster for auto-discovery. If you're running
# multiple clusters on the same network, make sure you're using unique names.
#
#cluster.name: elasticsearch

#################################### Node #####################################

# Node names are generated dynamically on startup, so you're relieved
# from configuring them manually. You can tie this node to a specific name:
#
#node.name: "Franz Kafka"

# Every node can be configured to allow or deny being eligible as the master,
# and to allow or deny to store the data.
#
# Allow this node to be eligible as a master node (enabled by default):
#
#node.master: true
#
# Allow this node to store data (enabled by default):
#
#node.data: true
# You can exploit these settings to design advanced cluster topologies.
#
# 1. You want this node to never become a master node, only to hold data.
#    This will be the "workhorse" of your cluster.
#
#node.master: false
#node.data: true
#
# 2. You want this node to only serve as a master: to not store any data and
#    to have free resources. This will be the "coordinator" of your cluster.
#
#node.master: true
#node.data: false
#
# 3. You want this node to be neither master nor data node, but
#    to act as a "search load balancer" (fetching data from nodes,
#    aggregating results, etc.)
#
#node.master: false
#node.data: false

# Use the Cluster Health API [http://localhost:9200/_cluster/health], the
# Node Info API [http://localhost:9200/_nodes] or GUI tools
# such as <http://www.elasticsearch.org/overview/marvel/>,
# <http://github.com/karmi/elasticsearch-paramedic>,
# <http://github.com/lukas-vlcek/bigdesk> and
# <http://mobz.github.com/elasticsearch-head> to inspect the cluster state.

# A node can have generic attributes associated with it, which can later be used
# for customized shard allocation filtering, or allocation awareness. An attribute
# is a simple key value pair, similar to node.key: value, here is an example:
#
#node.rack: rack314

# By default, multiple nodes are allowed to start from the same installation location
# to disable it, set the following:
#node.max_local_storage_nodes: 1

根据英文说明,Cluster的设置相对来说比较容易理解。ElasticSearch会根据集群名称自动进行集群操作。因此,最重要的是确保集群名称相同即可。

接下来,设置集群化后的节点如何运作。首先是节点的名称。让我们给它取一个容易理解的名字吧。

然后,设置如何运作:
node.master = true或false
node.data = true或false

上述的设置组合(共4种)。
主节点是否成为主节点?
数据是否具有数据?

节点.master = true
节点.data = true

如果这样的话,不仅可以精通技能,还可以拥有数据。只要正常使用,这个方法很方便。

节点.master = true
节点.data = false

因为没有数据持有功能,只有主节点功能,所以在Elasticsearch中称为“协调节点”。

节点的主节点设置为假,而数据节点设置为真。

我只有数据。

节点主机 = false
节点数据 = false

根据说法,elasticsearch仅充当一个负载均衡器的角色。

在我的案例中,我使用了两台都是true的三台构成的集群化。

只要服务器构成已经完成,请确保以下的架构正确。

curl -XGET http://localhost:9200/_cluster/state?pretty

{
  "cluster_name" : "*****-search",
  "version" : 7,
  "master_node" : "EKEbvVZrRDCRCcimEsKdKg",
  "blocks" : { },
  "nodes" : {
    "EKEbvVZrRDCRCcimEsKdKg" : {
      "name" : "*****-*****",
      "transport_address" : "inet[/***.***.***.***:9300]",
      "attributes" : { }
    },
    "ZCGmnee6QuC4Mrxb19NzGg" : {
      "name" : "*****-*****",
      "transport_address" : "inet[/***.***.***.***:9300]",
      "attributes" : { }
    },
    "nX0umaReSDK57okDmTu-hA" : {
      "name" : "*****-*****",
      "transport_address" : "inet[/***.***.***.***:9300]",
      "attributes" : { }
    }
  },
  "metadata" : {
    "indices" : { }
  },
  "routing_table" : {
    "indices" : { }
  },
  "routing_nodes" : {
    "unassigned" : [ ],
    "nodes" : {
      "EKEbvVZrRDCRCcimEsKdKg" : [ ],
      "ZCGmnee6QuC4Mrxb19NzGg" : [ ],
      "nX0umaReSDK57okDmTu-hA" : [ ]
    }
  },
  "allocations" : [ ]
}

我确认了三台结构的配置。

现在让我们关注一下,经过多次努力才达到目前的模板结构。

需要对这三台都应用吗???我有点怀疑。由于Elasticsearch具有分布式数据存储的特点,我想只对一个应用会被应用到所有地方。不过当我试了一下之后。。。。结果居然全部都适用了。

这个动作虽然搞错了会觉得很烦,但也觉得解脱了繁琐的工作,真是太好了。

当然,数据同步也没有问题。
接下来是集群健康检查,我在考虑是否要安装之前写过的elastic-HQ插件。
如果要自己做的话,至少需要考虑以下两点。

集群的健康检查

curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'

集群状态监控

curl -XGET 'http://localhost:9200/_cluster/stats?pretty=true'

监控集群节点的状态

curl -X GET http://localhost:9200/_nodes/stats?pretty

对于这个检索结果,似乎是通过心跳来确认故障,并且如果有异常情况会发送警报。

下次,请为我创建一个VIP账号,然后从那里开始,我希望你能够将其分配到循环处理中。我想要检查那些日志等等。

广告
将在 10 秒后关闭
bannerAds